Skip to content
innovorder
⌘K

Integration path

Integration Guide: Guest App

System map · Guest journey
Guest app
Public API
Orders + loyalty

This guide outlines the comprehensive steps to integrate a third-party guest application (e.g., a corporate catering app) with the Innovorder API. By following this recipe, you can enable users to seamlessly view their balance, reload their account, and access their transaction history within your application.

1. Authentication

Each brand is assigned a distinct Service Account. You must first authenticate using these credentials to obtain an accessToken. This token is required to sign and authorize all subsequent API requests.

POST/oauth/loginGet Access Token

Authenticate using the service account credentials provided for the specific brand. The access token is valid for 24 hours (14 days when rememberMe is true); when it expires the API responds with a 401 error (token_expired) and you must authenticate again.

Request Body

json
{
  "username": "service.account@brand.com",
  "password": "YOUR_SECURE_PASSWORD",
  "grant_type": "password"
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
usernamestring"service.account@brand.com"The username value.
passwordstring"YOUR_SECURE_PASSWORD"The password value.
grant_typestring"password"The grant type value.

Response

json
{
  "access_token": "eyJhbGciOiJIUzI1...",
  "status": 201,
  "code": "token_created",
  "message": "You have successfully logged in.",
  "data": {
    "user": {
      "userId": 1,
      "email": "service.account@brand.com",
      "role": "brand",
      "brandId": 100
    }
  },
  "token_type": "Bearer"
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
access_tokenstring"eyJhbGciOiJIUzI1..."The access token value.
statusinteger201HTTP status code returned by the API.
codestring"token_created"Machine-readable application code for the result.
messagestring"You have successfully logged in."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.userobject{…}Object containing user fields.
data.user.userIdinteger1Identifier of the user.
data.user.emailstring"service.account@brand.com"Email address.
data.user.rolestring"brand"The role value.
data.user.brandIdinteger100Identifier of the brand.
token_typestring"Bearer"The token type value.
Header Requirement:Authorization: Bearer <accessToken>

2. User Account Pairing

To link a guest account in your external app with an Innovorder account, use the Customer Search endpoint. This allows you to resolve the Innovorder customerId using an email, name, or badge number.

GET/customersFind Customer

Search for a customer to retrieve their internal ID.

Parameters

NameTypeRequiredDescription
brandIdstringYesThe ID of the Brand.
searchstringNoPartial match on name, email, phone, or badge number.
emailstringNoExact email match.
badgeNumberstringNoExact badge number match.

Response

json
{
  "data": [
    {
      "customerId": 12345,
      "firstName": "John",
      "lastName": "Doe",
      "email": "john@example.com",
      "badgeNumber": "998877"
    }
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].customerIdinteger12345Identifier of the customer.
data[].firstNamestring"John"The first name value.
data[].lastNamestring"Doe"The last name value.
data[].emailstring"john@example.com"Email address.
data[].badgeNumberstring"998877"The badge number value.

3. Display Badge Number

If the guest needs to identify themselves physically at a Kiosk or POS (for example, to pay with their account), you should display their Badge Number. This information is available in the customer details.

GET/customers/{customerId}Get Customer Details

Retrieve the profile details including the badge number.

Parameters

NameTypeRequiredDescription
customerIdintegerYesThe Innovorder Customer ID.
unscopedbooleanNoMust be set to true when calling from a service account.

Response

json
{
  "status": 200,
  "data": {
    "customerId": 12345,
    "firstName": "John",
    "lastName": "Doe",
    "badgeNumber": "998877",
    "email": "john@example.com"
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
dataobject{…}Endpoint-specific response payload.
data.customerIdinteger12345Identifier of the customer.
data.firstNamestring"John"The first name value.
data.lastNamestring"Doe"The last name value.
data.badgeNumberstring"998877"The badge number value.
data.emailstring"john@example.com"Email address.

4. View Balance

Once you have the customerId, you can retrieve the real-time E-Wallet balance. The balance is returned in cents.

GET/customers/{customerId}/balanceGet Wallet Balance

Parameters

NameTypeRequiredDescription
customerIdintegerYesInnovorder Customer ID.
unscopedbooleanNoMust be set to true when calling from a service account.

Response

json
{
  "status": 200,
  "data": {
    "customerBalance": 2500
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
dataobject{…}Endpoint-specific response payload.
data.customerBalanceinteger2500The customer balance value.

5. Reload Balance

Allow the guest to top up their account directly from your app. This operation creates a CREDIT transaction on the user's ledger.

POST/customers/transactionsCredit E-Wallet

Add funds to a customer wallet.

Request Body

json
{
  "customerId": 12345,
  "brandId": 100,
  "type": "1",
  "amount": "2000",
  "source": "7",
  "paymentOrigin": "4",
  "paymentOriginMetaData": "App Reload Ref#9988"
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
customerIdinteger12345Identifier of the customer.
brandIdinteger100Identifier of the brand.
typestring"1"The type value.
amountstring"2000"The amount value.
sourcestring"7"The source value.
paymentOriginstring"4"The payment origin value.
paymentOriginMetaDatastring"App Reload Ref#9988"The payment origin meta data value.

Response

json
{
  "status": 200,
  "code": "transaction_succeed"
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"transaction_succeed"Machine-readable application code for the result.

6. View History

E-Wallet Transaction History

Retrieves credits, debits, and adjustments.

GET/customers/{customerId}/balance_historyGet Wallet Transactions

Parameters

NameTypeRequiredDescription
customerIdintegerYesCustomer ID
limitintegerNoPagination limit (default 10)
offsetintegerNoPagination offset
orderstringNoSort expression accepted by the pagination middleware.
includestringNoComma-separated optional expansions: order, omnichannelOrder, and/or beforeAndAfterBalance.
unscopedstringNoUse only when your integration is authorized to retrieve soft-deleted customer data.
applyDateobjectNoOptional Unix-timestamp range with gte and lte properties.

Response

json
{
  "status": 200,
  "code": "balance_succeed",
  "message": "You have access to this balance.",
  "data": [
    {
      "transactionId": 94001,
      "customerId": 12345,
      "amount": 2500,
      "type": "CREDIT",
      "status": "OK",
      "applyDate": "2026-07-10T12:00:00.000Z",
      "createdAt": "2026-07-10T12:00:00.000Z",
      "externalOrderReference": null,
      "orderId": null
    }
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"balance_succeed"Machine-readable application code for the result.
messagestring"You have access to this balance."Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].transactionIdinteger94001Identifier of the transaction.
data[].customerIdinteger12345Identifier of the customer.
data[].amountinteger2500The amount value.
data[].typestring"CREDIT"The type value.
data[].statusstring"OK"HTTP status code returned by the API.
data[].applyDatestring"2026-07-10T12:00:00.000Z"Date or timestamp for apply.
data[].createdAtstring"2026-07-10T12:00:00.000Z"Timestamp when this resource was created.
data[].externalOrderReferencenullnullThe external order reference value.
data[].orderIdnullnullIdentifier of the order.

Order History

Retrieves past food orders from POS, Kiosk, or Web. For a complete list of parameters and response fields, refer to the Order History Reference.

Feature: The response includes an htmlTicket field. You can inject this HTML string directly into a WebView to display a perfectly formatted receipt (just like the paper version) without needing to implement complex tax or discount logic on the client side.

GET/v1/ordersGet Orders

Retrieve a paginated list of orders for the customer.

Parameters

NameTypeRequiredDescription
customerIdstringYesCustomer ID
brandIdstringYesBrand ID
limitintegerNoMax results (default 10)
offsetintegerNoPagination offset
startDatestringNoFilter by date (ISO 8601)
statusstringNoFilter by status (e.g. PAID)

Response

json
{
  "status": 200,
  "code": "omnichannel_orders_succeed",
  "message": "Omnichannel orders successfully retrieved.",
  "data": {
    "omnichannelOrders": [
      {
        "omnichannelOrderId": "uuid-1234",
        "status": "PAID",
        "totalPriceDiscountedWithTaxIncluded": 1250,
        "htmlTicket": "<!DOCTYPE html><html>...Receipt Content...</html>"
      }
    ]
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"omnichannel_orders_succeed"Machine-readable application code for the result.
messagestring"Omnichannel orders successfully retrieved."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.omnichannelOrdersarray[…]List of omnichannel orders entries.
data.omnichannelOrders[]object{…}Object containing omnichannel orders fields.
data.omnichannelOrders[].omnichannelOrderIdstring"uuid-1234"Identifier of the associated omnichannel order.
data.omnichannelOrders[].statusstring"PAID"HTTP status code returned by the API.
data.omnichannelOrders[].totalPriceDiscountedWithTaxIncludedinteger1250The total price discounted with tax included value.
data.omnichannelOrders[].htmlTicketstring"<!DOCTYPE html><html>...Receipt Content...</html>"The html ticket value.