openapi: 3.1.0
info:
title: Deliverect Loyalty API
description: Integrate loyalty programs by creating and retrieving loyalty customers, reading program configuration, retrieving and validating programs, and validating compensation cards. Authenticates
with OAuth 2.0 machine-to-machine access tokens.
version: '1.0'
x-generated-from: documentation
x-source-url: https://developers.deliverect.com/reference
x-last-validated: '2026-06-02'
contact:
name: Kin Lane
email: [email protected]
license:
name: All Rights Reserved
servers:
- url: https://api.deliverect.com
description: Production
- url: https://api.staging.deliverect.com
description: Staging
tags:
- name: Customers
description: Customers operations for the Deliverect Loyalty API.
- name: Configuration
description: Configuration operations for the Deliverect Loyalty API.
- name: Programs
description: Programs operations for the Deliverect Loyalty API.
- name: Compensation Cards
description: Compensation Cards operations for the Deliverect Loyalty API.
- name: Authentication
description: Authentication operations for the Deliverect Loyalty API.
paths:
/loyalty/{channelLinkId}/customer:
post:
summary: Deliverect Create Loyalty Customer
description: Deliverect Create Loyalty Customer
operationId: loyalty_channel_create_loyalty_customer
parameters:
- name: channelLinkId
in: path
schema:
type: string
required: true
description: The channelLinkId value.
example: 5e8abc11dec0001a009b
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: email of the end customer
example: [email protected]
phoneNumber:
type: string
description: phone number of the end customer in E164 format
example: '+15555550123'
firstName:
type: string
description: first name of the end customer
example: Deliverect's Pizza Place
lastName:
type: string
description: last name of the end customer
example: Deliverect's Pizza Place
dateOfBirth:
type: string
description: date of birth of the end customer in ISO format
example: '2026-03-15T14:30:00Z'
examples:
loyalty_channel_create_loyalty_customerRequest:
summary: Default loyalty_channel_create_loyalty_customer request
x-microcks-default: true
value:
email: [email protected]
phoneNumber: '+15555550123'
firstName: Deliverect's Pizza Place
lastName: Deliverect's Pizza Place
dateOfBirth: '2026-03-15T14:30:00Z'
responses:
'200':
description: '200'
content:
application/json:
examples:
'- without tier':
value:
providerId: '68964'
firstName: John
lastName: Doe
email: [email protected]
phoneNumber: '+32411222333'
dateOfBirth: '1970-01-01T00:00:00.000000+00:00'
lifetimePointsBalance: 0
tier: null
with tier:
value:
providerId: '234567'
firstName: John
lastName: Doe
email: [email protected]
phoneNumber: '+32411222333'
dateOfBirth: '1970-01-01T00:00:00.000000+00:00'
lifetimePointsBalance: 0
status: active
tier:
name: Bronze
description: This is a bronze tier
media:
url: https://deliverect.com/image.png
mediaType: image
requirements:
minLifetimePoints: 0
maxLifetimePoints: 1000
schema:
oneOf:
- title: '- without tier'
type: object
properties:
firstName:
type: string
example: John
lastName:
type: string
example: Doe
email:
type: string
example: [email protected]
phoneNumber:
type: string
example: '+32411222333'
dateOfBirth:
type: string
example: '1970-01-01T00:00:00.000000+00:00'
lifetimePointsBalance:
type: integer
example: 0
default: 0
tier: {}
providerId:
type: string
required:
- providerId
- title: with tier
type: object
properties:
firstName:
type: string
example: John
lastName:
type: string
example: Doe
email:
type: string
example: [email protected]
phoneNumber:
type: string
example: '+32411222333'
dateOfBirth:
type: string
example: '1970-01-01T00:00:00.000000+00:00'
lifetimePointsBalance:
type: integer
example: 0
default: 0
tier:
type: object
properties:
name:
type: string
example: Bronze
description:
type: string
example: This is a bronze tier
media:
type: object
properties:
url:
type: string
example: https://deliverect.com/image.png
mediaType:
type: string
example: image
requirements:
type: object
properties:
minLifetimePoints:
type: integer
example: 0
default: 0
maxLifetimePoints:
type: integer
example: 1000
default: 0
providerId:
type: string
required:
- providerId
'400':
description: '400'
content:
application/json:
examples:
Result:
value: "{\n \"error\": \"no active loyalty profile found\",\n \"http_code\": 400,\n \"description\": \"no active loyalty profile found\"\n}"
schema:
type: object
properties:
error:
type: string
example: no active loyalty profile found
http_code:
type: integer
example: 400
default: 0
description:
type: string
example: no active loyalty profile found
deprecated: false
tags:
- Customers
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
get:
summary: Deliverect Get Loyalty Customer
description: Deliverect Get Loyalty Customer
operationId: loyalty_channel_get_customer
parameters:
- name: channelLinkId
in: path
schema:
type: string
required: true
description: The channelLinkId value.
example: 5e8abc11dec0001a009b
- name: email
in: query
description: email of the end customer
schema:
type: string
example: [email protected]
- name: phoneNumber
in: query
description: phone number of the end customer in E164 format
schema:
type: string
example: '+15555550123'
- in: query
name: providerId
schema:
type: string
description: The customer's unique identifier within the loyalty provider's system, QR codes can also be passed via this parameter where supported on the Loyalty platform
example: 609a1b2c3d4e5f6a7b8c9d0e
responses:
'200':
description: '200'
content:
application/json:
examples:
without tier:
value:
firstName: John
lastName: Doe
email: [email protected]
phoneNumber: '+32411222333'
dateOfBirth: '1970-01-01T00:00:00.000000+00:00'
lifetimePointsBalance: 0
status: activation_pending
tier: null
providerId: '376483'
with tier:
value:
providerId: '83885'
firstName: John
lastName: Doe
email: [email protected]
phoneNumber: '+32411222333'
dateOfBirth: '1970-01-01T00:00:00.000000+00:00'
lifetimePointsBalance: 0
status: active
tier:
name: Bronze
description: This is a bronze tier
media:
url: https://deliverect.com/image.png
mediaType: image
requirements:
minLifetimePoints: 0
maxLifetimePoints: 1000
schema:
oneOf:
- title: without tier
type: object
properties:
firstName:
type: string
example: John
lastName:
type: string
example: Doe
email:
type: string
example: [email protected]
phoneNumber:
type: string
example: '+32411222333'
dateOfBirth:
type: string
example: '1970-01-01T00:00:00.000000+00:00'
lifetimePointsBalance:
type: integer
example: 0
default: 0
status:
type: string
example: activation_pending
tier: {}
providerId:
type: string
required:
- providerId
- title: with tier
type: object
properties:
firstName:
type: string
example: John
lastName:
type: string
example: Doe
email:
type: string
example: [email protected]
phoneNumber:
type: string
example: '+32411222333'
dateOfBirth:
type: string
example: '1970-01-01T00:00:00.000000+00:00'
lifetimePointsBalance:
type: integer
example: 0
default: 0
status:
type: string
example: active
tier:
type: object
properties:
name:
type: string
example: Bronze
description:
type: string
example: This is a bronze tier
media:
type: object
properties:
url:
type: string
example: https://deliverect.com/image.png
mediaType:
type: string
example: image
requirements:
type: object
properties:
minLifetimePoints:
type: integer
example: 0
default: 0
maxLifetimePoints:
type: integer
example: 1000
default: 0
providerId:
type: string
required:
- providerId
'400':
description: '400'
content:
application/json:
examples:
Result:
value: "{\n \"error\": \"no active loyalty profile found\",\n \"http_code\": 400,\n \"description\": \"no active loyalty profile found\"\n}"
schema:
type: object
properties:
error:
type: string
example: no active loyalty profile found
http_code:
type: integer
example: 400
default: 0
description:
type: string
example: no active loyalty profile found
'404':
description: '404'
content:
application/json:
examples:
Result:
value: "{\n \"error\": \"loyalty customer not found\",\n \"http_code\": 404,\n \"description\": \"loyalty customer not found\"\n}"
schema:
type: object
properties:
error:
type: string
example: loyalty customer not found
http_code:
type: integer
example: 404
default: 0
description:
type: string
example: loyalty customer not found
deprecated: false
tags:
- Customers
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/loyalty/{channelLinkId}/configuration:
get:
summary: Deliverect Get Configuration
description: This endpoint provides information such as settings, features and requirements based on the account's configuration.
operationId: loyalty_channel_get_configuration
parameters:
- name: channelLinkId
in: path
schema:
type: string
required: true
description: The channelLinkId value.
example: 5e8abc11dec0001a009b
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value:
enabled: true
providerName: Generic
providerId: 10000
externalSignUpUrl: https://deliverect.com/signup
features:
supportsSSO: false
supportsExternalSignUpUrl: true
supportsWalletPointsBalance: true
supportsWalletCashBalance: false
supportsBOGOFPrograms: true
supportsFreeItemPrograms: true
supportsFlatPrograms: true
requiresEmail: true
requiresPhoneNumber: false
supportsDynamicConfiguration: false
cashbackConfig:
title: VIP Customers
description: Exclusive rewards for our VIP customers
earningRules:
- type: cash_back
reward:
type: percentage
value: 1000
- type: sign_up
reward:
type: fixed
value: 1000
burningRules:
- type: purchase
cost:
type: percentage
value: 5000
maxBurningAmount: 500
- type: purchase
cost:
type: fixed
value: 500
schema:
type: object
properties:
enabled:
type: boolean
example: true
default: true
providerName:
type: string
example: Generic
providerId:
type: integer
example: 10000
default: 0
externalSignUpUrl:
type: string
example: https://deliverect.com/signup
features:
type: object
properties:
supportsSSO:
type: boolean
example: false
default: true
supportsExternalSignUpUrl:
type: boolean
example: true
default: true
supportsWalletPointsBalance:
type: boolean
example: true
default: true
supportsWalletCashBalance:
type: boolean
example: false
default: true
supportsBOGOFPrograms:
type: boolean
example: true
default: true
supportsFreeItemPrograms:
type: boolean
example: true
default: true
supportsFlatPrograms:
type: boolean
example: true
default: true
requiresEmail:
type: boolean
example: true
default: true
requiresPhoneNumber:
type: boolean
example: false
default: true
supportsDynamicConfiguration:
type: string
default: 'false'
example: 'false'
cashbackConfig:
type: object
properties:
title:
type: string
example: string
description:
type: string
example: No salad
earningRules:
type: array
items:
properties:
type:
type: string
enum:
- cash_back
- sign_up
example: cash_back
reward:
type: object
properties:
type:
type: string
enum:
- percentage
- fixed
example: percentage
value:
type: integer
example: 1
required:
- value
- type
type: object
required:
- reward
- type
burningRules:
type: array
items:
properties:
type:
type: string
enum:
- percentage
- fixed
example: percentage
cost:
type: object
properties:
type:
type: string
enum:
- percentage
- fixed
example: percentage
value:
type: string
example: string
maxBurningAmount:
type: string
description: Only available for percentage driven rules
example: string
required:
- value
- type
type: object
required:
- cost
- type
required:
- burningRules
- earningRules
- description
- title
required:
- cashbackConfig
- features
- externalSignUpUrl
- providerId
- providerName
- enabled
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Configuration
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/loyalty/{channelLinkId}/programs/retrieve:
post:
summary: Deliverect Get Loyalty Programs
description: Deliverect Get Loyalty Programs
operationId: loyalty_channel_get_programs
parameters:
- name: channelLinkId
in: path
schema:
type: string
required: true
description: The channelLinkId value.
example: 5e8abc11dec0001a009b
requestBody:
content:
application/json:
schema:
type: object
required:
- order
properties:
order:
type: object
description: For the full order schema, please refer to [Glossary - Channel Orders](https://developers.deliverect.com/page/glossary-channel-orders)
properties:
orderType:
type: integer
description: The type of the order (Pickup, Delivery, Eat-in)
format: int32
example: 1
items:
type: object
properties:
plu:
type: string
example: PIE1
name:
type: string
example: Deliverect's Pizza Place
price:
type: integer
format: int32
example: 1250
quantity:
type: integer
format: int32
example: 1
subItems:
type: object
properties: {}
customer:
type: object
properties:
email:
type: string
example: [email protected]
phoneNumber:
type: string
example: '+15555550123'
name:
type: string
example: Deliverect's Pizza Place
decimalDigits:
type: integer
description: number of decimal for the order currency
format: int32
example: 1
subTotal:
type: integer
format: int32
example: 1250
payment:
type: object
properties:
amount:
type: integer
format: int32
example: 1250
examples:
Request Example:
value:
order:
orderType: 1
items:
- plu: BEEF-02
price: 1100
quantity: 1
name: Beef Opor
productType: 1
_id: 620d19e940411b30c49b1005
deliveryTax: 9000
customer:
email: [email protected]
phoneNumber: '+31201234567'
decimalDigits: 2
subTotal: 1100
payment:
amount: 1100
type: 3
JSON - short payload:
value:
order:
orderType: 1
customer:
email: [email protected]
phoneNumber: '+31201234567'
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "[\n {\n \"programId\":\"1234\",\n \"title\":\"$10 off order\",\n \"description\":\"Discount amount off the order\",\n \"cost\":100,\n \"type\"\
:\"discount_amount\",\n \"discount\":1000,\n \"applicable\": true,\n \"expiresAt\": \"2024-12-31 23:59:59.000000\",\n \"media\": null\n \n },\n {\n\
\ \"programId\":\"4578\",\n \"title\":\"50% off order\",\n \"description\":\"Discount percentage off the order.\",\n \"cost\":100,\n \"type\":\"discount_percentage\"\
,\n \"discount\":5000,\n \"applicable\": true,\n \"expiresAt\": \"2024-12-31 23:59:59.000000\",\n \"media\": null\n\n \n },\n {\n \"programId\"\
:\"765\",\n \"title\":\"Free item\",\n \"description\":\"Get an item for free.\",\n \"cost\":200,\n \"type\":\"free_item\",\n \"itemPLU\":\"DRN-01\"\
,\n \"media\":{\n \"url\":\"https://program.media/image\",\n \"mediaType\":\"image\"\n },\n \"applicable\": true,\n \"expiresAt\": \"\
2024-12-31 23:59:59.000000\"\n },\n {\n \"programId\":\"12456\",\n \"title\":\"Buy one get one for free\",\n \"description\":\"Order an item and get another\
\ one for free.\",\n \"cost\":500,\n \"type\":\"buy_one_get_one_free\",\n \"itemPLU\":\"DRN-02\",\n \"media\":{\n \"url\":\"https://program.media/image\"\
,\n \"mediaType\":\"image\"\n },\n \"applicable\": false,\n \"expiresAt\": \"2024-12-31 23:59:59.000000\"\n },\n {\n \"programId\": \"36996\"\
,\n \"title\": \"Coke $5 off\",\n \"type\": \"item_discount_amount\",\n \"applicable\": true,\n \"description\": \"$10 off for a single item\",\n \"\
cost\": 150.0,\n \"media\": {\n \"url\": \"https://res.cloudinary.com/punchh/image/upload/c_limit,f_auto,fl_lossy,g_center,q_auto/v1/punchhstatic-mothership2/redeemables/redeemable_images/000/036/996/original/4b189839dd5c99f7bccee13cdb675af19f9b9d37.jpeg\"\
,\n \"mediaType\": \"image\"\n },\n \"expiresAt\": null,\n \"discount\": 500,\n \"itemPLU\": \"ABC-123\",\n \"minOrderValue\": 1000\n \
\ },\n {\n \"programId\": \"36998\",\n \"title\": \"Coke 50% off\",\n \"type\": \"item_discount_percentage\",\n \"applicable\": true,\n \"description\"\
: \"50% off Coke!\",\n \"cost\": 150.0,\n \"media\": {\n \"url\": \"https://res.cloudinary.com/punchh/image/upload/c_limit,f_auto,fl_lossy,g_center,q_auto/v1/punchhstatic-mothership2/redeemables/redeemable_images/000/036/996/original/4b189839dd5c99f7bccee13cdb675af19f9b9d37.jpeg\"\
,\n \"mediaType\": \"image\"\n },\n \"expiresAt\": null,\n \"discount\": 5000,\n \"itemPLU\": \"ABC-123\",\n \"minOrderValue\": null\n \
\ }\n]"
schema:
type: array
items:
type: object
properties:
programId:
type: string
example: '1234'
title:
type: string
example: $10 off order
description:
type: string
example: Discount amount off the order
cost:
type: integer
example: 100
default: 0
type:
type: string
example: discount_amount
discount:
type: integer
example: 1000
default: 0
applicable:
type: boolean
example: true
default: true
expiresAt:
type: string
example: '2024-12-31 23:59:59.000000'
media: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: "{\n \"error\": \"no active loyalty profile f
# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/deliverect/refs/heads/main/openapi/deliverect-loyalty-api-openapi-original.yml