Skip to content
innovorder
⌘K

Engagement

Setup

Manage loyalty provider configuration for restaurants and brands. Each restaurant can be connected to one loyalty provider (Splio, Como, or Pongo).

GET/v1/loyalty/restaurants/{restaurantId}/configGet Restaurant Loyalty Config

Retrieve the loyalty configuration for a specific restaurant. The restaurantId can be either a numeric ID or a UUID. Returns the provider configuration, authentication methods, register methods, and feature flags. The API key is omitted from the response.

Parameters

NameTypeRequiredDescription
restaurantIdinteger | string (UUID)YesThe restaurant ID (numeric) or UUID.

Response

json
{
  "status": 200,
  "code": "module_loyalty_succeed",
  "message": "A module loyalty has been retrieved.",
  "data": {
    "moduleLoyaltyProviderId": 42,
    "restaurantId": 1001,
    "brandId": 10,
    "provider": "splio",
    "programId": "program_abc123",
    "memberIdentifier": "email",
    "loginMethod": "email",
    "formLink": "https://example.com/loyalty-form",
    "useCasualTone": true,
    "authModes": [
      "email"
    ],
    "authenticationMethods": {
      "email": true,
      "phone": false,
      "externalId": false
    },
    "registerMethods": {
      "email": true,
      "phone": false
    },
    "features": [
      {
        "id": 1,
        "name": "smart_pass",
        "isEnabled": true
      },
      {
        "id": 2,
        "name": "order_details_v2",
        "isEnabled": false
      }
    ]
  }
}
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"module_loyalty_succeed"Machine-readable application code for the result.
messagestring"A module loyalty has been retrieved."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.moduleLoyaltyProviderIdinteger42Identifier of the associated module loyalty provider.
data.restaurantIdinteger1001Identifier of the restaurant.
data.brandIdinteger10Identifier of the brand.
data.providerstring"splio"The provider value.
data.programIdstring"program_abc123"Identifier of the associated program.
data.memberIdentifierstring"email"The member identifier value.
data.loginMethodstring"email"The login method value.
data.formLinkstring"https://example.com/loyalty-form"The form link value.
data.useCasualTonebooleantrueThe use casual tone value.
data.authModesarray[…]List of auth modes entries.
data.authModes[]string"email"The auth modes value.
data.authenticationMethodsobject{…}Object containing authentication methods fields.
data.authenticationMethods.emailbooleantrueEmail address.
data.authenticationMethods.phonebooleanfalsePhone number.
data.authenticationMethods.externalIdbooleanfalseIdentifier in the connected external system.
data.registerMethodsobject{…}Object containing register methods fields.
data.registerMethods.emailbooleantrueEmail address.
data.registerMethods.phonebooleanfalsePhone number.
data.featuresarray[…]List of features entries.
data.features[]object{…}Object containing features fields.
data.features[].idinteger1The id value.
data.features[].namestring"smart_pass"The name value.
data.features[].isEnabledbooleantrueWhether this feature is enabled.

GET/v1/loyalty/restaurants/{restaurantId}/eligibilityGet External Loyalty Eligibility

Checks whether an external loyalty provider can be enabled for the restaurant. External loyalty is unavailable only when Innovorder Royalty is enabled at both the brand and restaurant levels.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesRestaurant whose loyalty eligibility is checked.

Response

json
{
  "status": 200,
  "code": "loyalty_eligibility_succeed",
  "message": "External loyalty eligibility has been retrieved.",
  "data": {
    "isRoyaltyEnabledOnBrand": true,
    "isRoyaltyEnabledOnRestaurant": false,
    "canEnableExternalLoyalty": true
  }
}
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"loyalty_eligibility_succeed"Machine-readable application code for the result.
messagestring"External loyalty eligibility has been retrieved."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.isRoyaltyEnabledOnBrandbooleantrueWhether royalty enabled on brand is enabled or applies.
data.isRoyaltyEnabledOnRestaurantbooleanfalseWhether royalty enabled on restaurant is enabled or applies.
data.canEnableExternalLoyaltybooleantrueWhether enable external loyalty is enabled or applies.

GET/v1/loyalty/brands/{brandId}/configGet Brand Loyalty Configs

Retrieve loyalty configurations for all restaurants within a brand. Returns an array of configurations, one per restaurant. The API key is omitted from each configuration.

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe unique identifier of the brand.

Response

json
{
  "status": 200,
  "code": "module_loyalty_succeed",
  "message": "A module loyalty has been retrieved.",
  "data": [
    {
      "moduleLoyaltyProviderId": 42,
      "restaurantId": 1001,
      "brandId": 10,
      "provider": "splio",
      "programId": "program_abc123",
      "memberIdentifier": "email",
      "loginMethod": "email"
    },
    {
      "moduleLoyaltyProviderId": 43,
      "restaurantId": 1002,
      "brandId": 10,
      "provider": "como",
      "programId": "program_def456",
      "memberIdentifier": "phone",
      "loginMethod": "phone"
    }
  ]
}
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"module_loyalty_succeed"Machine-readable application code for the result.
messagestring"A module loyalty has been retrieved."Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].moduleLoyaltyProviderIdinteger42Identifier of the associated module loyalty provider.
data[].restaurantIdinteger1001Identifier of the restaurant.
data[].brandIdinteger10Identifier of the brand.
data[].providerstring"splio"The provider value.
data[].programIdstring"program_abc123"Identifier of the associated program.
data[].memberIdentifierstring"email"The member identifier value.
data[].loginMethodstring"email"The login method value.

PUT/v1/loyalty/restaurants/{restaurantId}/configUpsert Restaurant Loyalty Config

Create or update the loyalty provider configuration for a restaurant. If a restaurant-level and brand-level loyalty module both exist, a conflict error is returned. Requires Brand or Restaurant role.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Request Body

json
{
  "provider": "splio",
  "apiKey": "sk_live_abc123def456",
  "programId": "program_abc123",
  "memberIdentifier": "email",
  "programTermsUrl": "https://example.com/terms",
  "optInLists": {
    "LOYALTY": 1,
    "MARKETING": 2
  },
  "splio": {
    "syncMenu": true,
    "smartPass": {
      "urlPrefix": "https://smartpass.example.com",
      "organizationId": "org_123",
      "projectId": "proj_456",
      "organizationSecret": "secret_789"
    }
  },
  "formLink": "https://example.com/loyalty-form",
  "useCasualTone": true,
  "allowCustomerRewardUsage": true,
  "authenticationMethods": {
    "email": true,
    "phone": false,
    "externalId": false
  },
  "registerMethods": {
    "email": true,
    "phone": false
  },
  "features": [
    {
      "id": 1,
      "isEnabled": true
    },
    {
      "id": 2,
      "isEnabled": false
    }
  ]
}
Request Body Properties

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

PropertyTypeExampleDescription
providerstring"splio"The provider value.
apiKeystring"sk_live_abc123def456"The api key value.
programIdstring"program_abc123"Identifier of the associated program.
memberIdentifierstring"email"The member identifier value.
programTermsUrlstring"https://example.com/terms"The program terms url value.
optInListsobject{…}Object containing opt in lists fields.
optInLists.LOYALTYinteger1The loyalty value.
optInLists.MARKETINGinteger2The marketing value.
splioobject{…}Object containing splio fields.
splio.syncMenubooleantrueThe sync menu value.
splio.smartPassobject{…}Object containing smart pass fields.
splio.smartPass.urlPrefixstring"https://smartpass.example.com"The url prefix value.
splio.smartPass.organizationIdstring"org_123"Identifier of the associated organization.
splio.smartPass.projectIdstring"proj_456"Identifier of the associated project.
splio.smartPass.organizationSecretstring"secret_789"The organization secret value.
formLinkstring"https://example.com/loyalty-form"The form link value.
useCasualTonebooleantrueThe use casual tone value.
allowCustomerRewardUsagebooleantrueThe allow customer reward usage value.
authenticationMethodsobject{…}Object containing authentication methods fields.
authenticationMethods.emailbooleantrueEmail address.
authenticationMethods.phonebooleanfalsePhone number.
authenticationMethods.externalIdbooleanfalseIdentifier in the connected external system.
registerMethodsobject{…}Object containing register methods fields.
registerMethods.emailbooleantrueEmail address.
registerMethods.phonebooleanfalsePhone number.
featuresarray[…]List of features entries.
features[]object{…}Object containing features fields.
features[].idinteger1The id value.
features[].isEnabledbooleantrueWhether this feature is enabled.

Response

json
{
  "status": 200,
  "code": "module_loyalty_updated",
  "message": "A module loyalty has been updated.",
  "data": {
    "moduleLoyaltyProviderId": 42,
    "restaurantId": 1001,
    "provider": "splio",
    "apiKey": "sk_live_abc123def456",
    "programId": "program_abc123"
  }
}
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"module_loyalty_updated"Machine-readable application code for the result.
messagestring"A module loyalty has been updated."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.moduleLoyaltyProviderIdinteger42Identifier of the associated module loyalty provider.
data.restaurantIdinteger1001Identifier of the restaurant.
data.providerstring"splio"The provider value.
data.apiKeystring"sk_live_abc123def456"The api key value.
data.programIdstring"program_abc123"Identifier of the associated program.

DELETE/v1/loyalty/restaurants/{restaurantId}/configDelete Restaurant Loyalty Config

Remove the loyalty provider configuration for a restaurant. This disconnects the restaurant from its loyalty provider. Requires Brand or Restaurant role.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Response

json
{
  "status": 200,
  "code": "module_loyalty_updated",
  "message": "A module loyalty has been updated."
}
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"module_loyalty_updated"Machine-readable application code for the result.
messagestring"A module loyalty has been updated."Human-readable result message. Do not use this value for program logic.

GET/v1/loyalty/restaurants/{restaurantId}/programsGet Loyalty Programs

Retrieve available loyalty programs for a restaurant from its configured provider. Requires Brand or Restaurant role.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Response

json
{
  "status": 200,
  "code": "module_loyalty_succeed",
  "message": "A module loyalty has been retrieved.",
  "data": [
    {
      "id": "program_abc123",
      "name": "Gold Rewards",
      "description": "Earn points on every purchase"
    },
    {
      "id": "program_def456",
      "name": "VIP Club",
      "description": "Exclusive member discounts"
    }
  ]
}
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"module_loyalty_succeed"Machine-readable application code for the result.
messagestring"A module loyalty has been retrieved."Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].idstring"program_abc123"The id value.
data[].namestring"Gold Rewards"The name value.
data[].descriptionstring"Earn points on every purchase"The description value.

OAuth Integration

OAuth-based authentication flow for connecting loyalty providers that require OAuth (e.g., Pongo). The flow involves redirecting the user to the provider, and handling the callback.

GET/v1/loyalty/brands/{brandId}/restaurants/{restaurantId}/oauthGet OAuth Redirect URL

Initiate the OAuth flow for a loyalty provider. Returns a 302 response with the redirect URL where the user should be sent to authorize the connection. Currently only supports the Pongo provider.

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe unique identifier of the brand.
restaurantIdintegerYesThe unique identifier of the restaurant.
providerstringYesThe loyalty provider name. Currently only "pongo" is supported.

Response

json
{
  "redirectUrl": "https://pongo.io/oauth/authorize?client_id=abc&redirect_uri=..."
}
Response Properties

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

PropertyTypeExampleDescription
redirectUrlstring"https://pongo.io/oauth/authorize?client_id=abc&redirect_uri=..."The redirect url value.

GET/v1/loyalty/providers/{provider}/oauth/redirectOAuth Callback

Callback endpoint for the OAuth flow. This is called by the loyalty provider after the user has authorized the connection. The state parameter is encrypted and contains the brand/restaurant context. Returns a 302 redirect to the backoffice.

Parameters

NameTypeRequiredDescription
providerstringYesThe loyalty provider name (e.g., "pongo").
codestringYesThe authorization code from the OAuth provider.
statestringYesEncrypted state parameter containing the brand and restaurant context.

Response

json
HTTP 302 Found. The API returns a Location header that redirects the user agent to the backoffice URL supplied by the loyalty provider integration. There is no JSON response body.