In-Store API

The In-Store API (Orbit) is a local REST service for integrating kiosks, menu boards, and other in-store applications with the PAR POS register.

Register endpoints version: v1
Audience: IT administrators and integrators

Introduction

About Orbit

Orbit is the in-store REST API for PAR POS. It allows internal, network-connected hardware — such as self-service kiosks and digital menu boards — to communicate directly with the register (Primary Terminal) at a store. Through Orbit, connected devices can read live menu and pricing data, submit and retrieve orders, check item availability, and receive real-time notifications when Register data changes.

Orbit runs locally on the store network. Devices call the Primary Terminal directly rather than a cloud endpoint, which keeps order flow fast and functional even if the store's internet connection is degraded.

Who This Guide Is For

This guide is written for IT administrators and integration developers who are connecting to the in-store PAR POS ecosystem. It assumes familiarity with REST APIs, JSON, and HTTP authentication, but does not assume prior knowledge of PAR POS internals.

Supported Use Cases

Orbit is designed to support a range of in-store use cases. Typical integrations include:

  • Self-service kiosks — Build and submit customer orders, calculate pricing and tax, and check whether menu items are currently available.
  • Digital menu boards — Read current menu, pricing, and item-availability data, and stay in sync using real-time price-change notifications.

Note: Orbit is a local, in-store API. Each device connects to the register(s) at its own store and does not communicate with devices at other locations.

API Versions and Base Paths

Orbit endpoints are grouped under a few different base paths, reflecting different service areas within PAR POS. All paths below are relative to the base URL of the Primary Terminal (see Base URL).

Base Path Purpose
/v1/ Core connectivity endpoints: health and ping checks.
/v2/local/ Local device authentication (integrator and admin token issuance).
/api/ General authentication and real-time register notifications.
/register/v1/ Register data and operations: orders, item availability, settings, and till reporting.

Getting Started

Base URL

All Orbit requests are made to the Primary Terminal's local network address, for example:

https://<primary-terminal-ip>:<port>

Confirm the terminal's IP address and port with the store's network configuration or your PAR deployment contact. Orbit is served over HTTPS.

Authentication Overview

Every Orbit request (other than the authentication endpoints themselves) requires a bearer token in the Authorization header:

Authorization: Bearer <token>

Tokens are issued by one of the Authentication endpoints, and expire at the time returned in the response. Request a new token before the current one expires to avoid interrupted service.

Required Headers

Most register-facing endpoints (under /register/v1/) require a RequestId header. Orbit uses this value to trace an individual request through the system for diagnostics and support — it is not an order number or a value the register interprets.

Header Required Description
Authorization Yes (except auth endpoints) Bearer token issued by an authentication endpoint.
RequestId Yes, on most /register/v1/ endpoints Caller-generated identifier (e.g. a GUID) used for request tracing.
Content-Type Yes, on POST requests application/json

Tip: Generate a fresh RequestId for every call. Reusing the same value across requests makes it harder to trace individual calls if you need to troubleshoot with PAR support.

Authentication

Orbit issues bearer tokens from three endpoints. Use the integrator endpoint for unattended hardware, username and password authentication for attended tools, and the admin endpoint to elevate an existing session.

POST /v2/local/Authentication/integrator

Authenticates an unattended device. This is the recommended authentication method for kiosks and other hardware.

Request body: LocalAuthenticationRequest

Field Type Required Description
integratorId string (uuid) Yes The provisioned integrator ID for the device.
{
  "integratorId": "00000000-0000-0000-0000-000000000000"
}

POST /v2/local/Authentication/admin

Elevates a session to admin-level access.

Request body: LocalAdminAuthenticationRequest

Field Type Required Description
token string Yes An existing valid token to exchange for admin-level access. Minimum length 1.

This endpoint may return 428 Precondition Required when a precondition has not been met.

POST /api/Authentication/authenticate

Authenticates with a username and password.

Request body: AuthenticationRequest

Field Type Required Description
userName string Yes Account username. Minimum length 1.
password string Yes Account password. Minimum length 1.

Response body: AuthenticationResponse

Field Type Description
token string, nullable The issued bearer token.
expirationTime string (date-time) The date and time the token expires.

Using the Access Token

Include the returned token on every subsequent request using the Authorization header:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Tokens are time-limited. Check the expirationTime field returned at login and refresh the token before it lapses. Calls made with an expired or missing token receive a 401 Unauthorized response.

Error Handling

Standard Error Response

When a request fails, most Orbit endpoints return a ProblemDetails object describing what went wrong:

{
  "type": "string",
  "title": "string",
  "status": 400,
  "detail": "string",
  "instance": "string"
}
Field Description
type A URI reference identifying the error category.
title A short, human-readable summary of the error.
status The HTTP status code repeated in the response body.
detail A human-readable explanation specific to this occurrence of the error.
instance A URI reference identifying the specific request that produced the error.

HTTP Status Codes Reference

These status codes recur across Orbit endpoints, particularly the register-facing endpoints under /register/v1/, which depend on a live connection between the server and the store's Primary Register.

Status Meaning Typical Cause
200 OK Success The request completed normally.
400 Bad Request Invalid input Missing required fields, malformed JSON, or an invalid parameter value.
401 Unauthorized Authentication failed Missing, invalid, or expired bearer token.
428 Precondition Required Additional step needed Returned only by admin authentication when a precondition has not been met.
500 Internal Server Error Unexpected server-side error An unhandled issue occurred while processing the request.
501 Internal Error Not implemented / processing error Returned by the Settings endpoint for unsupported processing conditions.
502 Bad Gateway Register communication terminated The request to the Primary Register was terminated before completing.
503 Service Unavailable Register not connected The Primary Register is not currently connected or subscribed to the server.
504 Gateway Timeout Register timed out The request to the Primary Register did not complete within the expected time.

Note: 502, 503, and 504 responses generally indicate a connectivity issue between the server and the store's Primary Register rather than a problem with your request. Retry with backoff and escalate if the condition persists.

Connectivity and Health

Use these endpoints to confirm that Orbit is reachable and that your authentication is working, before building or troubleshooting a device integration.

GET /v1/Health

Returns a basic health check for the Orbit service. Does not require authentication.

Status Description
200 OK The service is running.

GET /v1/Ping

A simple connectivity check. Does not require authentication.

Status Description
200 OK Returns the text "Pong" along with the current server date and time.

GET /v1/Ping/testauth

Confirms that a bearer token is valid. Use this during setup to verify authentication before calling data endpoints.

Status Description
200 OK Returns the text "Authorized - Pong" along with the current server date and time.
401 Unauthorized The bearer token is missing, invalid, or expired.

Item Availability

Item availability endpoints let kiosks and menu boards check which menu items can currently be sold — for example, to gray out or hide items that are out of stock.

GET /register/v1/ItemAvailability

Returns availability information for menu items.

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.
itemIds query No List of item IDs to check. If omitted, availability for all items is returned.
exclude query No List of filters to apply to the result. Valid values: "Unlimited", "Inactive".

Responses

Status Description
200 OK Success.
400 Bad Request The request or one of the supplied item IDs was invalid.
500 Internal Server Error There was an issue processing the request.
502 Bad Gateway The request to the Primary Register was terminated.
503 Service Unavailable The Primary Register is not connected or subscribed to the server.
504 Gateway Timeout The request to the Primary Register timed out.

GET /register/v1/ItemAvailability/unavailable

Returns the IDs of items that are currently unavailable, optionally filtered to a single destination (e.g. a specific menu, kitchen, or ordering channel).

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.
destinationId query No Optional destination ID to filter results. Must be greater than 0 if provided.

Responses

Status Description
200 OK Success. Returns the list of unavailable item IDs.
400 Bad Request The request was invalid, or destinationId was not greater than 0.
500 Internal Server Error There was an issue processing the request.
502 Bad Gateway The request to the Primary Register was terminated.
503 Service Unavailable The Primary Register is not connected or subscribed to the server.
504 Gateway Timeout The request to the Primary Register timed out.

Settings

Settings endpoints expose the register's configuration entities — including menus, items, and pricing — that menu boards and kiosks need to render an accurate, current menu.

GET /register/v1/Settings

Returns one or more settings entities from the register.

Parameters

Name In Required Description
RequestId header Yes Used for trace purposes.
entity query No Name of the entity to retrieve. Valid values: Charities, Destinations, Items, Options, PriceChanges, ModifierGroups, ItemGroups, Menus, ModifierCodes, Promotions, Tenders.

Responses

Status Description
200 OK Success.
400 Bad Request The request or entity value was invalid.
501 Internal Error The request could not be processed.

Tip: For menu boards, the Items, Menus, and PriceChanges entities are typically the most useful starting point. Combine this endpoint with the Price Change notification to keep displayed pricing current without polling.

GET /register/v1/Settings/lastmodifiedtime

Returns the last-modified time for settings entities, so integrators can poll efficiently and only re-fetch data that has actually changed.

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.

Responses

Status Description
200 OK Success. Returns last-modified times for settings entities.
400 Bad Request Invalid request.
500 Internal Server Error There was an issue processing the request.
502 Bad Gateway The request to the Primary Register was terminated.
503 Service Unavailable The Primary Register is not connected or subscribed to the server.
504 Gateway Timeout The request to the Primary Register timed out.

Orders

Order endpoints let kiosks build, price, and submit customer orders, and let order confirmation boards retrieve order status. Add Order and Calculate Order accept the same request body, described once in Order Request Object and referenced from both.

Order Request Object

Add Order and Calculate Order both accept the object below in the request body.

Top-Level Fields

Field Type Description
DestinationId integer The destination (e.g. menu, kitchen, or ordering channel) the order is placed for.
LaneId integer Id of the lane (order line) the order is associated with.
Name string A display name for the order (e.g. a customer or order label shown on-screen).
IsTaxExempt boolean Whether the order should be treated as tax-exempt.
ManualSend boolean Whether the order should be held for manual send rather than sent to production immediately.
Items array of Item The line items on the order. See Item Fields below.
Payments array of Payment Payments applied to the order. See Payment Fields below.
Promotions array of Promotion Promotions or discounts applied to the order. See Promotion Fields below.
FutureOrderData object Details for a scheduled or delivery order. See Future Order Data Fields below.
CalculateOrderOptions object Options controlling how pricing is calculated. See below.
AdditionalData object (string map) Free-form key/value pairs for integrator-specific metadata.

CalculateOrderOptions Fields

Field Type Description
CalculatePriceByPos boolean When true, pricing is calculated using the point-of-sale's own pricing rules rather than values supplied by the caller.

Item Fields

Field Type Description
Id integer A caller-assigned identifier for this line item, unique within the order.
ItemId integer The menu item's catalog ID.
Description string Display text for the item.
Price decimal The item's price.
Note string A free-text note for this item (e.g. a special request).
Modifiers array of Modifier Modifiers applied to this item. See Modifier Fields below.
ComboItems array of object Component items when this line item represents a combo. Structure is caller-defined.
CompositeComponentId integer, nullable If this item is a component of a composite item, the ID linking it to that composite.
CompositeOrderItemId integer, nullable If this item is part of a composite item, the order-item ID of the parent composite.
AdditionalData object (string map) Free-form key/value pairs for integrator-specific metadata.

Modifier Fields

Field Type Description
Id integer A caller-assigned identifier for this modifier.
ItemId integer The catalog item ID this modifier represents (e.g. "Extra Cheese").
Description string Display text for the modifier.
ModifierGroupId integer The modifier group this selection belongs to.
ModifierCodeId integer The specific modifier code selected (e.g. "extra" vs. "light").
Price decimal The modifier's price, if any.
Modifiers array of object Nested modifiers, for modifiers that themselves carry sub-modifiers.

Payment Fields

Field Type Description
Id integer A caller-assigned identifier for this payment.
TenderId integer The tender type used (e.g. cash, credit card, gift card), as configured in Settings.
Amount decimal The payment amount.
TipAmount decimal The tip amount included with this payment, if any.
AdditionalData object (string map) Free-form key/value pairs for integrator-specific metadata (e.g. a card processor reference).

Promotion Fields

Field Type Description
PromotionId integer The catalog ID of the promotion applied.
Code string The promotion or coupon code entered.
Name string Display name of the promotion.
Amount decimal The discount amount the promotion applies.
ExternalOfferId integer An external system's identifier for this offer, if applicable.
Upsells array of object Upsell qualifications tied to this promotion. Each entry has TargetOrderItemId and QualificationId.

Future Order Data Fields

Include FutureOrderData for scheduled pickup or delivery orders.

Field Type Description
CustomerEmail string Customer email address for order updates.
CustomerPhone string Customer phone number for order updates.
PickupTime string (date-time) The scheduled pickup or delivery time, in ISO 8601 format.
DeliveryDetails object Delivery address and coordinates. See below. Omit for pickup-only orders.
Field Type Description
DeliveryDetails.DeliveryAddress object Structured address: AddressLine1, AddressLine2, City, State, PostalCode, Country, Company, Notes, AddressType (all strings).
DeliveryDetails.GeoCoordinate object Latitude and Longitude (decimal degrees) for the delivery location.

A complete example of this request body is provided in Full Order Request Example.

POST /register/v1/Order

Submits a new order to the register. Use this from kiosks and other order-entry devices once the customer has finished building their order.

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.

Request body: the Order Request Object. See Full Order Request Example for a complete example.

Responses

Status Description
200 OK Success. The order was accepted by the register.
400 Bad Request The order was improperly formatted or otherwise invalid.
500 Internal Server Error There was an issue processing the order.
502 Bad Gateway The request to the Primary Register was terminated.
503 Service Unavailable The Primary Register is not connected or subscribed to the server.
504 Gateway Timeout The request to the Primary Register timed out.

POST /register/v1/Order/calculateOrder

Calculates pricing, tax, and totals for an order without submitting it to the register. Use this to show a live order total on a kiosk as the customer builds their order, before they confirm and submit it with Add Order.

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.

Request body: the same Order Request Object.

Responses

Status Description
200 OK Success. Returns calculated pricing for the order.
400 Bad Request The order was improperly formatted or otherwise invalid.
500 Internal Server Error There was an issue calculating the order.
502 Bad Gateway The request to the Primary Register was terminated.
503 Service Unavailable The Primary Register is not connected or subscribed to the server.
504 Gateway Timeout The request to the Primary Register timed out.

Tip: Call Calculate Order as customers modify their cart (adding items, applying a promotion code) so the on-screen total always reflects live pricing and tax. Call Add Order only once, when the customer confirms.

GET /register/v1/Order/GetOrder

Retrieves a single order by ID. Useful for an order confirmation board to display the details and status of a specific order.

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.
orderId query Yes The ID of the order to retrieve.

Responses

Status Description
200 OK Success.
400 Bad Request The request was invalid.
500 Internal Server Error There was an issue processing the request.
502 Bad Gateway The request to the Primary Register was terminated.
503 Service Unavailable The Primary Register is not connected or subscribed to the server.
504 Gateway Timeout The request to the Primary Register timed out.

GET /register/v1/Order/getOrders

Retrieves a page of orders, optionally filtered to those modified since a given time. Useful for an order confirmation board to keep a rolling list of active orders in sync.

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.
modifiedTime query No Return only orders modified at or after this date-time (ISO 8601).
pageSize query No Maximum number of orders to return. Default: 25.

Responses

Status Description
200 OK Success.
400 Bad Request The order request was improperly formatted or otherwise invalid.
500 Internal Server Error There was an issue processing the request.
502 Bad Gateway The request to the Primary Register was terminated.
503 Service Unavailable The Primary Register is not connected or subscribed to the server.
504 Gateway Timeout The request to the Primary Register timed out.

Tip: Poll with the modifiedTime parameter set to the last time you fetched orders, so you only receive orders that are new or have changed since your last check.

GET /register/v1/Order/SummaryOrders

Returns summary-level information across orders, useful for dashboards and confirmation boards that need aggregate or lightweight order data rather than full order detail.

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.

Responses

Status Description
200 OK Success.
400 Bad Request Invalid request.
500 Internal Server Error Internal server error.
502 Bad Gateway Bad gateway.
503 Service Unavailable Service unavailable.
504 Gateway Timeout Gateway timeout.

Reporting

GET /register/v1/ReportingTills

Returns the tills currently configured on the register. A till represents a cash drawer or payment-tracking unit associated with a lane or terminal.

Parameters

Name In Required Description
RequestId header Yes Used for tracing the request.

Responses

Status Description
200 OK Success.
500 Internal Server Error There was an issue processing the request.

Real-Time Notifications

Notification endpoints let devices subscribe to register events as they happen, instead of continuously polling for changes. Menu boards and order confirmation boards benefit most from these — for example, refreshing displayed pricing the moment it changes, or reacting immediately to a register connection drop.

Note: These endpoints establish a long-lived connection that streams events to the caller rather than returning a single response. Your HTTP client and any intermediate proxies must be configured to allow long-lived connections.

GET /api/Notifications/All

Subscribes to a real-time stream of all events published by the register.

Status Description
200 OK Connection established successfully; events stream as they occur.

GET /api/Notifications/LastModifiedTime

Subscribes to notifications emitted when the last-modified time of register data changes, signaling that dependent data (such as settings entities) should be refetched.

Status Description
200 OK Connection established successfully.

GET /api/Notifications/PriceChange

Subscribes to notifications emitted when item pricing changes on the register. Menu boards should subscribe to this to keep displayed prices accurate without polling Settings continuously.

Status Description
200 OK Connection established successfully.

GET /api/Notifications/System/{eventType}

Subscribes to system-level notifications from the register, such as connection status changes.

Parameters

Name In Required Description
eventType path Yes The type of system event to subscribe to. Valid values: "ConnectionStatus", "All".

Responses

Status Description
200 OK Connection established successfully.
400 Bad Request The eventType value in the URL was not recognized.
500 Internal Server Error Server error.

Tip: Subscribe to "ConnectionStatus" events on order confirmation boards and menu boards so the device can show a clear offline state if the register connection drops, rather than silently displaying stale data.

Data Model Reference

This section lists the named schema objects referenced throughout this guide. Order-related objects (Item, Modifier, Payment, Promotion, FutureOrderData) are defined in Order Request Object and are not repeated here.

AuthenticationRequest

Used by POST /api/Authentication/authenticate.

Field Type Required Description
userName string Yes Account username. Minimum length 1.
password string Yes Account password. Minimum length 1.

AuthenticationResponse

Returned by POST /api/Authentication/authenticate.

Field Type Description
token string, nullable The issued bearer token.
expirationTime string (date-time) The date and time the token expires.

LocalAuthenticationRequest

Used by POST /v2/local/Authentication/integrator.

Field Type Required Description
integratorId string (uuid) Yes The provisioned integrator ID for the device.

LocalAdminAuthenticationRequest

Used by POST /v2/local/Authentication/admin.

Field Type Required Description
token string Yes An existing valid token to exchange for admin-level access. Minimum length 1.

ProblemDetails

Returned in the body of most error responses (400, 401, and others). See Standard Error Response for field descriptions.

Full Order Request Example

The example below shows a complete request body for Add Order (POST /register/v1/Order) and Calculate Order (POST /register/v1/Order/calculateOrder), using every field described in Order Request Object.

{
  "AdditionalData": {
    "key1": "value1"
  },
  "CalculateOrderOptions": {
    "CalculatePriceByPos": true
  },
  "DestinationId": 123,
  "IsTaxExempt": false,
  "Items": [
    {
      "AdditionalData": {
        "itemKey": "itemValue"
      },
      "ComboItems": [],
      "CompositeComponentId": null,
      "CompositeOrderItemId": null,
      "Description": "Sample Item",
      "Id": 1,
      "ItemId": 1001,
      "Modifiers": [
        {
          "Description": "Extra Cheese",
          "Id": 10,
          "ItemId": 2001,
          "ModifierCodeId": 3001,
          "ModifierGroupId": 4001,
          "Modifiers": [],
          "Price": 0.99
        }
      ],
      "Note": "No onions",
      "Price": 9.99
    }
  ],
  "LaneId": 1,
  "Name": "Test Order",
  "Payments": [
    {
      "Amount": 9.99,
      "AdditionalData": {
        "paymentKey": "paymentValue"
      },
      "Id": 1,
      "TenderId": 2,
      "TipAmount": 1.0
    }
  ],
  "Promotions": [
    {
      "Amount": 2.0,
      "Code": "PROMO2024",
      "ExternalOfferId": 1234,
      "Name": "New Year Promo",
      "PromotionId": 5678,
      "Upsells": [
        {
          "TargetOrderItemId": 1,
          "QualificationId": 101
        }
      ]
    }
  ],
  "ManualSend": true,
  "FutureOrderData": {
    "CustomerEmail": "customer@example.com",
    "CustomerPhone": "+1234567890",
    "PickupTime": "2024-01-02T14:30:00Z",
    "DeliveryDetails": {
      "DeliveryAddress": {
        "AddressLine1": "123 Main St",
        "AddressLine2": "Apt 4B",
        "City": "Springfield",
        "State": "IL",
        "PostalCode": "62701",
        "Country": "USA",
        "Company": "Acme Corp",
        "Notes": "Ring doorbell",
        "AddressType": "Residential"
      },
      "GeoCoordinate": {
        "Latitude": 39.7817,
        "Longitude": -89.6501
      }
    }
  }
}

Endpoint Quick Reference

Method Path Purpose
POST /v2/local/Authentication/integrator Authenticate an unattended device (recommended for hardware).
POST /v2/local/Authentication/admin Elevate a session to admin-level access.
POST /api/Authentication/authenticate Authenticate with username and password.
GET /v1/Health Basic service health check.
GET /v1/Ping Basic connectivity check.
GET /v1/Ping/testauth Confirm a bearer token is valid.
GET /register/v1/ItemAvailability Get availability for one or all items.
GET /register/v1/ItemAvailability/unavailable Get IDs of currently unavailable items.
GET /register/v1/Settings Get a settings entity (menus, items, pricing, etc.).
GET /register/v1/Settings/lastmodifiedtime Get last-modified times for settings entities.
POST /register/v1/Order Submit a new order.
POST /register/v1/Order/calculateOrder Calculate pricing for an order without submitting it.
GET /register/v1/Order/GetOrder Get a single order by ID.
GET /register/v1/Order/getOrders Get a page of orders, optionally filtered by modified time.
GET /register/v1/Order/SummaryOrders Get summary-level order data.
GET /register/v1/ReportingTills Get configured tills.
GET /api/Notifications/All Stream all register events.
GET /api/Notifications/LastModifiedTime Stream last-modified-time change events.
GET /api/Notifications/PriceChange Stream price change events.
GET /api/Notifications/System/{eventType} Stream system events (e.g. connection status).

Note: GET /register/v1/NoEndpoint is an internal diagnostic route the register uses to return a standardized error for unrecognized URLs. It is not intended for use by integrators and is omitted from the reference above.