WLL Rewards Configuration API
API Endpoint
api.rewards.wlloyalty.net/v1Introduction
The White Label Loyalty (WLL) Rewards Configuration API enables developers to programmatically manage every part of the WLL Rewards platform to enable advanced automated configuration systems without human intervention in the console.
Authorization
All requests to the API must contain a X-Api-Key
header to identify your
tenant account. In addition to the API key, all of these methods additionally
require a Bearer token Authorization
header to identify the entity accessing
the API, and ensure the requester has sufficient permissions for the
requested operation.
The Bearer token can be generated using the client credentials flow of the WLL administrative authorization server. The necessary client credentials can be provided upon request.
Rewards ¶
Rewards Collection ¶
Headers
Content-Type: application/json
Body
{
"type": "VOUCHER",
"name": "Free Cup of Coffee",
"summary": "This is a short summary.",
"description": "Redeem this reward for a free cup of coffee",
"terms": "",
"priority": 0,
"pictureUrl": "https://example.com/pic.jpg",
"category": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
},
"value": 0,
"price": 0,
"purchasable": false,
"availability": {
"start": "2018-06-08T18:19:10.878Z",
"end": "2018-06-09T18:19:10.878Z"
},
"tier": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
},
"venues": [
{
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
}
],
"redemptionChannels": [
"IN_STORE",
"ONLINE"
],
"purchaseExpiration": 86400,
"codeType": "OTP"
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"VOUCHER"
]
},
"name": {
"type": "string"
},
"summary": {
"type": "string"
},
"description": {
"type": "string"
},
"terms": {
"type": "string"
},
"priority": {
"type": "number"
},
"pictureUrl": {
"type": "string"
},
"category": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
]
},
"value": {
"type": "number"
},
"price": {
"type": "number"
},
"purchasable": {
"type": "boolean"
},
"availability": {
"type": "object",
"properties": {
"start": {
"type": "string"
},
"end": {
"type": "string"
}
}
},
"tier": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
]
},
"venues": {
"type": "array"
},
"redemptionChannels": {
"type": "array"
},
"purchaseExpiration": {
"type": "number"
},
"codeType": {
"type": "string",
"enum": [
"OTP",
"POOL",
"STATIC",
"HUMAN"
]
},
"code": {
"type": "string"
}
},
"required": [
"type",
"name",
"description",
"terms",
"priority",
"pictureUrl",
"value",
"price",
"purchasable",
"availability",
"codeType"
]
}
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"type": "VOUCHER",
"id": "9cb2cc08-e033-4200-86a7-95a03ba09462",
"name": "Free Cup of Coffee",
"pictureUrl": "https://example.com/pic.jpg",
"purchasable": false,
"summary": "Example summary",
"defaultLocale": "en"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"VOUCHER",
"GENERIC_OFFER",
"AWIN_PROGRAMME",
"FIDEL_OFFER",
"OLIVE_OFFER",
"WEGIFT_PRODUCT",
"XOXO_PRODUCT"
]
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"pictureUrl": {
"type": "string"
},
"purchasable": {
"type": "boolean"
},
"summary": {
"type": "string"
},
"defaultLocale": {
"type": "string",
"enum": [
"en",
"fr",
"de",
"it",
"es",
"nl",
"ar",
"tr"
]
}
},
"required": [
"type",
"id",
"name",
"pictureUrl",
"purchasable",
"defaultLocale"
]
}
},
"required": [
"status",
"data"
]
}
Create a RewardPOST/rewards
Use this API to define a new reward available to users. Rewards provide a wrapper to define the behaviour which can be granted to or purchased by users; see here for more information.
There are different types of reward to allow different kinds of behaviour. The types available to you depend on the commercial options you have chosen.
The full list of available types is provided below in the Key Common Fields section.
Key Common Fields
type
specifies the kind of behaviour this reward represents. It also defines what other properties are required/possible.
The value can be one of:
-
VOUCHER
-
GENERIC_OFFER
-
AWIN_PROGRAMME
-
FIDEL_OFFER
-
KINDRED
-
OLIVE_OFFER
-
WEGIFT_PRODUCT
-
XOXO_PRODUCT
price
is the number of points required for users to purchase this reward.
priority
dictates an order in which rewards can be listed to users. The reward with the greatest priority is shown first.
tier
dictates the minimum tier which a user must have attained in order to access this reward.
venues
dictates at which venues this reward should be valid.
Generic Offer Fields
clickThroughUrl
a URL related to this reward you want to be available for users.
Voucher Fields
A reward can be defined as purchasable in which case a user may use their points balance to “purchase” a voucher for that reward. Alternatively if the reward is marked as unpurchasable then vouchers for it can only be directly granted as an event reaction.
purchaseExpiration
is the number of seconds that a voucher should be valid after it is purchased by or granted to the user.
codeType
dictates the behaviour of the voucher code. It can be one of OTP
, POOL
, STATIC
, HUMAN
. The differences are explained below.
code
the static code to use for this reward if STATIC
code type is selected.
hideCode
boolean to dictate whether the actual code should be hidden from the user in user interfaces when redeeming.
redemptionMessage
a message that should be displayed to users when redeeming this reward.
Voucher Code Types
Static
The simplest type of code where every voucher for this reward is given the same specified code.
Pool
A list of codes valid for this reward is uploaded to the system into a pool. Each time a user gets a voucher for this reward one code from the pool is assigned to that voucher.
OTP (One time password)
Every time a user gets a voucher for this reward a unique code is generated and assigned to that voucher. Since integrating systems won’t have prior knowledge of these codes they must be actively validated with our API during redemption.
Fidel Offer Fields
fidelBrandId
required; the Fidel ID of the brand this reward is intended for.
fidelOfferId
optional; the Fidel ID of the specific offer this reward represents.
schemes
required; an array of the card schemes this reward is active on e.g "visa"
.
currency
required; ISO 4217 three letter currency code.
country
required; ISO 3166 alpha 2 country code.
minTransactionAmount
optional number; the minimum transaction amount which qualifies for this offer.
maxTransactionAmount
optional number; the minimum transaction amount which qualifies for this offer.
returnPeriod
optional number; the number of days in which returns are possible.
🔒 Admin authorization required
Requests to this method must provide an Authorization
header containing a valid administrative token with admin:rewards
scope. Non-compliant requests will be rejected.
Individual Reward ¶
Headers
Content-Type: application/json
Body
{
"type": "VOUCHER",
"name": "Free Cup of Coffee",
"summary": "This is a short summary.",
"description": "Redeem this reward for a free cup of coffee",
"terms": "",
"priority": 0,
"pictureUrl": "https://example.com/pic.jpg",
"category": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
},
"value": 0,
"price": 0,
"purchasable": false,
"availability": {
"start": "2018-06-08T18:19:10.878Z",
"end": "2018-06-09T18:19:10.878Z"
},
"tier": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
},
"venues": [
{
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
}
],
"redemptionChannels": [
"IN_STORE",
"ONLINE"
]
}
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"type": "VOUCHER",
"id": "9cb2cc08-e033-4200-86a7-95a03ba09462",
"name": "Free Cup of Coffee",
"pictureUrl": "https://example.com/pic.jpg",
"purchasable": false,
"summary": "Example summary",
"defaultLocale": "en"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"VOUCHER",
"GENERIC_OFFER",
"AWIN_PROGRAMME",
"FIDEL_OFFER",
"OLIVE_OFFER",
"WEGIFT_PRODUCT",
"XOXO_PRODUCT"
]
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"pictureUrl": {
"type": "string"
},
"purchasable": {
"type": "boolean"
},
"summary": {
"type": "string"
},
"defaultLocale": {
"type": "string",
"enum": [
"en",
"fr",
"de",
"it",
"es",
"nl",
"ar",
"tr"
]
}
},
"required": [
"type",
"id",
"name",
"pictureUrl",
"purchasable",
"defaultLocale"
]
}
},
"required": [
"status",
"data"
]
}
Update a RewardPATCH/rewards/{id}
Update the details of a particular reward. All properties are optional so it is only necessary to pass data for the property/properties you want to update.
🔒 Admin authorization required
Requests to this method must provide an Authorization
header containing a valid administrative token with admin:rewards
scope. Non-compliant requests will be rejected.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the reward to update.
Reward Incentive Instructions ¶
Headers
X-Api-Key: $api_key
Authorization: Bearer $access_token
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": [
{
"type": "FIXED",
"value": 1000,
"sku": "321ZA",
"productSku": "AZ123"
}
]
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "array"
}
},
"required": [
"status",
"data"
]
}
List Incentive InstructionsGET/rewards/{id}/discounts
Get a list of all the incentive instructions currently configured for a reward.
For most use-cases the Validate Voucher endpoint will likely be more useful, since that endpoint applies filtering logic to only return the instructions which are relevant during a specific voucher redemption.
🔐 Admin authorization required
Requests to this method must provide an Authorization
header containing a valid administrative token with read:rewards
scope. Non-compliant requests will be rejected.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the reward.
Headers
X-Api-Key: $api_key
Authorization: Bearer $access_token
Body
{
"type": "FIXED",
"value": 1000,
"sku": "321ZA",
"productSku": "AZ123"
}
Schema
{
"type": "object",
"properties": {
"type": {
"enum": [
"FIXED",
"ABSOLUTE",
"PERCENTAGE"
]
},
"value": {
"type": "number"
},
"sku": {
"type": "string"
},
"productSku": {
"type": "string"
}
},
"required": [
"type",
"value"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"type": "FIXED",
"value": 1000,
"sku": "321ZA",
"productSku": "AZ123"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"FIXED",
"ABSOLUTE",
"PERCENTAGE"
]
},
"value": {
"type": "number"
},
"sku": {
"type": "string"
},
"productSku": {
"type": "string"
}
},
"required": [
"type",
"value"
]
}
},
"required": [
"status",
"data"
]
}
Create an Incentive InstructionPOST/rewards/{id}/discounts
Use this endpoint to define new incentive instructions for the specified reward.
Discount objects may contain sku
and productSku
fields.
These fields are intended to represent the SKU of the discount itself (if any) and the SKU of the product on which the discount should be applied (if any).
Absolute Discounts
A discount with type: 'ABSOLUTE'
indicates that the product or basket price should be adjusted relative to the price before discounting.
The value
is an integer which represents the adjustment amount in the lowest denomination of the currency.
For example given a basket price of £1.50, applying an absolute discount of value: 100
would result in a new basket price of £0.50.
Percentage Discounts
A discount with type: 'PERCENTAGE'
indicates that the product or basket price should be adjusted by the given percentage of the price before discounting.
The value
is an integer which represents the percentage 0-100. For example given a basket price of £1.50, applying a percentage discount of value: 10
would result in a new basket price of £1.35.
Fixed Discounts
A discount with type: 'FIXED'
indicates that the product or basket price should be set to the given the price.
The value
is an integer which represents new price to set, in the lowest denomination of the currency.
For example given a basket price of £1.50, applying an fixed discount of value: 100
would result in a new basket price of £1.00.
🔐 Admin authorization required
Requests to this method must provide an Authorization
header containing a valid administrative token with update:rewards
scope. Non-compliant requests will be rejected.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the reward.
Headers
X-Api-Key: $api_key
Authorization: Bearer $access_token
Body
{
"type": "FIXED",
"value": 1000,
"sku": "321ZA",
"productSku": "AZ123"
}
Schema
{
"type": "object",
"properties": {
"type": {
"enum": [
"FIXED",
"ABSOLUTE",
"PERCENTAGE"
]
},
"value": {
"type": "number"
},
"sku": {
"type": "string"
},
"productSku": {
"type": "string"
}
},
"required": [
"type",
"value"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"type": "FIXED",
"value": 1000,
"sku": "321ZA",
"productSku": "AZ123"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"FIXED",
"ABSOLUTE",
"PERCENTAGE"
]
},
"value": {
"type": "number"
},
"sku": {
"type": "string"
},
"productSku": {
"type": "string"
}
},
"required": [
"type",
"value"
]
}
},
"required": [
"status",
"data"
]
}
Update an Incentive InstructionPATCH/rewards/{id}/discounts
Use this endpoint to update an existing incentive instruction for the specified reward.
Discount objects may contain sku
and productSku
fields.
These fields are intended to represent the SKU of the discount itself (if any) and the SKU of the product on which the discount should be applied (if any).
Absolute Discounts
A discount with type: 'ABSOLUTE'
indicates that the product or basket price should be adjusted relative to the price before discounting.
The value
is an integer which represents the adjustment amount in the lowest denomination of the currency.
For example given a basket price of £1.50, applying an absolute discount of value: 100
would result in a new basket price of £0.50.
Percentage Discounts
A discount with type: 'PERCENTAGE'
indicates that the product or basket price should be adjusted by the given percentage of the price before discounting.
The value
is an integer which represents the percentage 0-100. For example given a basket price of £1.50, applying a percentage discount of value: 10
would result in a new basket price of £1.35.
Fixed Discounts
A discount with type: 'FIXED'
indicates that the product or basket price should be set to the given the price.
The value
is an integer which represents new price to set, in the lowest denomination of the currency.
For example given a basket price of £1.50, applying an fixed discount of value: 100
would result in a new basket price of £1.00.
🔐 Admin authorization required
Requests to this method must provide an Authorization
header containing a valid administrative token with update:rewards
scope. Non-compliant requests will be rejected.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the reward.
Individual Instruction ¶
Headers
X-Api-Key: $api_key
Authorization: Bearer $access_token
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {}
}
},
"required": [
"status",
"data"
]
}
Delete an Incentive InstructionDELETE/rewards/{rewardId}/discounts/{id}
Use this endpoint to delete a specific incentive instruction for the given reward.
- rewardId
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the reward.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the incentive instruction.
Event Types ¶
The Event Type Collection ¶
Headers
Content-Type: application/json
X-Api-Key: $api_key
Authorization: Bearer $access_token
Body
{
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "An example event type.",
"isPrivate": false,
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isPrivate": {
"type": "boolean"
},
"schema": {
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"omitFromUserActivity": {
"type": "boolean"
}
},
"required": [
"name",
"description",
"isPrivate"
]
}
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"id": "d7efcfb2-dfe3-47a7-b826-4ef8b9b0012f",
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "",
"isPrivate": false,
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"createdAt": "2018-06-08T08:57:47.198Z",
"updatedAt": "2018-06-08T08:57:47.198Z",
"omitFromUserActivity": false
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isPrivate": {
"type": "boolean"
},
"schema": {
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"omitFromUserActivity": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"description",
"isPrivate"
]
}
},
"required": [
"status",
"data"
]
}
Create an Event TypePOST/event_types
This method can be used to create a new event type.
Event types are a way to categorize the events which
will be sent to the API. There are two kinds of event type: public and private, this can be specified via the isPrivate
property during creation.
Public types
Public event types can be reported to the API by any authenticated user. These events are usually reported directly from the app or website where the user has an active interactive session. A public event type will always be associated with the user who submitted it.
Private types
Private event types can only be reported to the API by an entity which holds the event type’s secret key. These events are usually reported from a backend process reporting business data for use in the loyalty system. A private event type allows the reporter to specify which user (if any) the event should be associated with.
Schema
When creating an event type you can optionally also specify a schema with which to validate all event payloads reported for this event type. The event reporting API will reject any events of this type reported with a payload that does not match the schema. The schema should be specified in JSON Schema Draft 6 format.
Name
The event type name is how the type will be referred to throughout the system
including when reporting an event of this type on the API.
The defined type must follow the format shown in this regular expression:
/^[A-Z]+(_[A-Z]+)*$/
.
omitFromUserActivity
While authorized as an admin this flag is ignored and all events with this type
are returned, however when authorized as a user only events with omitFromUserActivity = false
will be returned. Omitting those events from the users activity.
Headers
X-Api-Key: $api_key
Authorization: Bearer $access_token
Headers
Content-Type: application/json; charset=utf-8
List All Event TypesGET/event_types{?limit,skip,sort,order,filter}
Get a list of all event types which your token is authorized to view.
- limit
number
(optional) Example: 10The number of items to retrieve.
- skip
number
(optional) Example: 0The number of items to skip before selecting.
- sort
string
(optional) Example: nameThe property to use for sorting.
Choices:
name
createdAt
updatedAt
- order
string
(optional) Example: ASCThe order to sort items.
Choices:
ASC
DESC
- filter
string
(optional) Example: createdAt:(gt:'2019-01-01T00:00:00')O-Rison encoded filter string
Individual Event Types ¶
Headers
X-Api-Key: $api_key
Authorization: Bearer $access_token
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"id": "d7efcfb2-dfe3-47a7-b826-4ef8b9b0012f",
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "",
"isPrivate": false,
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"createdAt": "2018-06-08T08:57:47.198Z",
"updatedAt": "2018-06-08T08:57:47.198Z",
"omitFromUserActivity": false
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isPrivate": {
"type": "boolean"
},
"schema": {
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"omitFromUserActivity": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"description",
"isPrivate"
]
}
},
"required": [
"status",
"data"
]
}
Retrieve an Event TypeGET/event_types/{id}
Retrieve the details of a particular event type.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the event type to retrieve.
Headers
Content-Type: application/json
Body
{
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "An example event type.",
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
}
}
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"id": "d7efcfb2-dfe3-47a7-b826-4ef8b9b0012f",
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "",
"isPrivate": false,
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"createdAt": "2018-06-08T08:57:47.198Z",
"updatedAt": "2018-06-08T08:57:47.198Z",
"omitFromUserActivity": false
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isPrivate": {
"type": "boolean"
},
"schema": {
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"omitFromUserActivity": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"description",
"isPrivate"
]
}
},
"required": [
"status",
"data"
]
}
Update an Event TypePATCH/event_types/{id}
Update the details of a particular event type. All properties are optional so it is only necessary to pass data for the property/properties you want to update.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the event type to update.
Individual Event Type Secret ¶
Headers
X-Api-Key: $api_key
Authorization: Bearer $access_token
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"secret": "this_would_be_a_hexidecimal_string"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"secret": {
"type": "string"
}
},
"required": [
"secret"
]
}
},
"required": [
"status",
"data"
]
}
Retrieve Event Type SecretGET/event_types/{identifier}/secret
Retrieve a specific event type’s secret. You specify either the UUID of the event type or the name of the event type in the URL.
🔒 Admin authorization required
Requests to this method must provide an Authorization
header containing a valid administrative token with read:event_types
scope. Non-compliant requests will be rejected.
- identifier
string
(required) Example: EXAMPLE_NAMEname or ID of the event type to retrieve.
Event Reactors ¶
The Event Reactor Collection ¶
Headers
Content-Type: application/json
Body
{
"name": "Wednesday Bonus",
"eventType": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
},
"constraint": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"activationContext": "TENANT",
"maxActivations": null,
"effectivity": {
"start": "2018-06-08T18:19:10.878Z",
"end": "2018-06-09T18:19:10.878Z"
},
"reactions": [
{
"type": "POINTS",
"points": {
"operation": "SUM",
"arguments": [
{
"type": "NUMBER",
"value": "12"
}
]
}
},
{
"type": "REWARD",
"reward": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
}
},
{
"type": "WEBHOOK",
"url": "http://example.com/handler",
"headers": null
}
]
}
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"name": "Wednesday Bonus",
"eventType": {
"id": "d7efcfb2-dfe3-47a7-b826-4ef8b9b0012f",
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "",
"isPrivate": false,
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"createdAt": "2018-06-08T08:57:47.198Z",
"updatedAt": "2018-06-08T08:57:47.198Z",
"omitFromUserActivity": false
},
"constraint": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"activationContext": "TENANT",
"maxActivations": null,
"effectivity": {
"start": "2018-06-08T18:19:10.878Z",
"end": "2018-06-09T18:19:10.878Z"
},
"reactions": [
{
"type": "POINTS",
"points": {
"operation": "SUM",
"arguments": [
{
"type": "NUMBER",
"value": "12"
}
]
}
},
{
"type": "REWARD",
"reward": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
}
},
{
"type": "WEBHOOK",
"url": "http://example.com/handler",
"headers": null
}
],
"id": "7fbfb45b-4ee0-471a-a464-67ca580eed7c",
"createdAt": "2019-04-09T10:02:37.515Z",
"updatedAt": "2019-04-09T10:02:37.515Z"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"eventType": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isPrivate": {
"type": "boolean"
},
"schema": {
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"omitFromUserActivity": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"description",
"isPrivate"
]
},
"constraint": {
"type": [
"object",
"null"
],
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"activationContext": {
"type": "string",
"enum": [
"TENANT",
"SUBJECT"
]
},
"maxActivations": {
"type": [
"number",
"null"
]
},
"effectivity": {
"type": "object",
"properties": {
"start": {
"type": "string"
},
"end": {
"type": "string"
}
}
},
"reactions": {
"type": "array"
},
"id": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
},
"required": [
"name",
"activationContext",
"effectivity",
"reactions",
"id"
]
}
},
"required": [
"status",
"data"
]
}
Create an Event ReactorPOST/event_reactor
This method can be used to create a new event reactor (hereafter “reactor”). Reactors are a way to define behaviour for how the platform should react to a particular kind of reported event. They consist of two key parts:
-
a specification of what kind of event will activate the reactor,
-
a specification of what reactions should be triggered if activated.
Constraints
Reactors can have multiple levels of constraint to specify exactly what events can activate the reactor.
Event Type
The event type is the most basic and only required constraint. It dictates which predefined event type the reactor will listen to. If a reported event is not of the specified type, the reactor will not activate.
This is specified on the API via the eventType
property which should contain
the ID of the event type to associate.
Payload Schema
The payload schema defines a set of rules for what event data payloads can cause the reactor to activate. The payload schema should be specified in JSON Schema Draft 6 format.
Usually, the schema will accept a subset of the payloads accepted by the
event type’s schema. For example the event type might allow a payload
status
property to be either accepted
or rejected
, while the reactor’s
schema might require status
to equal accepted
. This allows the creation
of complex branching logic.
The payload schema is specified on the API via the constraint
property.
Maximum Activations
The maximum activations constraint defines how many times the reactor can be activated before it deactivates itself. This can be defined in terms of the number of activations overall, or the number triggered by a specific user.
The maximum activations is specified on the API via the maxActivations
and activationContext
properties.
NOTE: SUBJECT level activation context ensures strongly consistent checks to ensure the max activation limit isn’t exceeded even for cases where multiple events are concurrently fired for the same subject. However, TENANT/GLOBAL level activation context is handled on a best-effort basis. This could cause cases where max activation limits are slightly exceeded in case of concurrent/batch events, though in practice this breaching of activation limits shouldn’t be too large.
Effectivity
The effectivity constraint defines the date and time interval between which the reactor is active. The reactor will not activate for an event reported before or after the defined interval of effectivity.
By default the reactor effectivity will be set to start at the time of
creation and remain active until further notice. This behaviour can be
overridden by specifying the effectivity
property.
Reactions
If all defined constraints pass for a given event, the reactor will activate. When a reactor activates, any defined reactions will be triggered. There are three kinds of reaction.
Points Reaction
Points reactions define a formula for how points should be awarded to the relevant user. This can be a static number or it can be derived from a value in the event payload.
Reward Reaction
Reward reactions grant a voucher for the defined reward to the relevant user. After the reaction has triggered the user will find the corresponding voucher in their wallet.
Webhook Reaction
Webhook reactions allow a URL (and optional headers) to be defined where the reactor should POST the event data. This provides support for simple integrations with third party services.
Headers
X-Api-Key: $api_key
Authorization: Bearer $access_token
Headers
Content-Type: application/json; charset=utf-8
List all Event ReactorsGET/event_reactor{?limit,skip,sort,order,filter}
Get a list of all event reactors which your token is authorized to view.
- limit
number
(optional) Example: 10The number of items to retrieve.
- skip
number
(optional) Example: 0The number of items to skip before selecting.
- sort
string
(optional) Example: nameThe property to use for sorting.
Choices:
name
createdAt
updatedAt
eventType
maxActivations
- order
string
(optional) Example: ASCThe order to sort items.
Choices:
ASC
DESC
- filter
string
(optional) Example: createdAt:(gt:'2019-01-01T00:00:00')O-Rison encoded filter string
Individual Event Reactors ¶
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"name": "Wednesday Bonus",
"eventType": {
"id": "d7efcfb2-dfe3-47a7-b826-4ef8b9b0012f",
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "",
"isPrivate": false,
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"createdAt": "2018-06-08T08:57:47.198Z",
"updatedAt": "2018-06-08T08:57:47.198Z",
"omitFromUserActivity": false
},
"constraint": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"activationContext": "TENANT",
"maxActivations": null,
"effectivity": {
"start": "2018-06-08T18:19:10.878Z",
"end": "2018-06-09T18:19:10.878Z"
},
"reactions": [
{
"type": "POINTS",
"points": {
"operation": "SUM",
"arguments": [
{
"type": "NUMBER",
"value": "12"
}
]
}
},
{
"type": "REWARD",
"reward": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
}
},
{
"type": "WEBHOOK",
"url": "http://example.com/handler",
"headers": null
}
],
"id": "7fbfb45b-4ee0-471a-a464-67ca580eed7c",
"createdAt": "2019-04-09T10:02:37.515Z",
"updatedAt": "2019-04-09T10:02:37.515Z"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"eventType": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isPrivate": {
"type": "boolean"
},
"schema": {
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"omitFromUserActivity": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"description",
"isPrivate"
]
},
"constraint": {
"type": [
"object",
"null"
],
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"activationContext": {
"type": "string",
"enum": [
"TENANT",
"SUBJECT"
]
},
"maxActivations": {
"type": [
"number",
"null"
]
},
"effectivity": {
"type": "object",
"properties": {
"start": {
"type": "string"
},
"end": {
"type": "string"
}
}
},
"reactions": {
"type": "array"
},
"id": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
},
"required": [
"name",
"activationContext",
"effectivity",
"reactions",
"id"
]
}
},
"required": [
"status",
"data"
]
}
Retrieve an Event ReactorGET/event_reactors/{id}
Retrieve the details of a single event reactor.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the event reactor.
Headers
Content-Type: application/json
Body
{
"name": "Wednesday Bonus",
"eventType": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
},
"constraint": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"activationContext": "TENANT",
"maxActivations": null,
"effectivity": {
"start": "2018-06-08T18:19:10.878Z",
"end": "2018-06-09T18:19:10.878Z"
},
"reactions": [
{
"type": "POINTS",
"points": {
"operation": "SUM",
"arguments": [
{
"type": "NUMBER",
"value": "12"
}
]
}
},
{
"type": "REWARD",
"reward": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
}
},
{
"type": "WEBHOOK",
"url": "http://example.com/handler",
"headers": null
}
]
}
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"name": "Wednesday Bonus",
"eventType": {
"id": "d7efcfb2-dfe3-47a7-b826-4ef8b9b0012f",
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "",
"isPrivate": false,
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"createdAt": "2018-06-08T08:57:47.198Z",
"updatedAt": "2018-06-08T08:57:47.198Z",
"omitFromUserActivity": false
},
"constraint": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"activationContext": "TENANT",
"maxActivations": null,
"effectivity": {
"start": "2018-06-08T18:19:10.878Z",
"end": "2018-06-09T18:19:10.878Z"
},
"reactions": [
{
"type": "POINTS",
"points": {
"operation": "SUM",
"arguments": [
{
"type": "NUMBER",
"value": "12"
}
]
}
},
{
"type": "REWARD",
"reward": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
}
},
{
"type": "WEBHOOK",
"url": "http://example.com/handler",
"headers": null
}
],
"id": "7fbfb45b-4ee0-471a-a464-67ca580eed7c",
"createdAt": "2019-04-09T10:02:37.515Z",
"updatedAt": "2019-04-09T10:02:37.515Z"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"eventType": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isPrivate": {
"type": "boolean"
},
"schema": {
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"omitFromUserActivity": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"description",
"isPrivate"
]
},
"constraint": {
"type": [
"object",
"null"
],
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"activationContext": {
"type": "string",
"enum": [
"TENANT",
"SUBJECT"
]
},
"maxActivations": {
"type": [
"number",
"null"
]
},
"effectivity": {
"type": "object",
"properties": {
"start": {
"type": "string"
},
"end": {
"type": "string"
}
}
},
"reactions": {
"type": "array"
},
"id": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
},
"required": [
"name",
"activationContext",
"effectivity",
"reactions",
"id"
]
}
},
"required": [
"status",
"data"
]
}
Update an Event ReactorPATCH/event_reactors/{id}
Update the details of a single event reactor. All properties are optional so it is only necessary to pass data for the property/properties you want to update.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the event reactor
Headers
Content-Type: application/json; charset=utf-8
Body
{
"status": "success",
"data": {
"name": "Wednesday Bonus",
"eventType": {
"id": "d7efcfb2-dfe3-47a7-b826-4ef8b9b0012f",
"name": "COMPLETED_EXAMPLE_ACTION",
"description": "",
"isPrivate": false,
"schema": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"createdAt": "2018-06-08T08:57:47.198Z",
"updatedAt": "2018-06-08T08:57:47.198Z",
"omitFromUserActivity": false
},
"constraint": {
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"properties": {},
"required": []
},
"activationContext": "TENANT",
"maxActivations": null,
"effectivity": {
"start": "2018-06-08T18:19:10.878Z",
"end": "2018-06-09T18:19:10.878Z"
},
"reactions": [
{
"type": "POINTS",
"points": {
"operation": "SUM",
"arguments": [
{
"type": "NUMBER",
"value": "12"
}
]
}
},
{
"type": "REWARD",
"reward": {
"id": "8d68cb91-202a-4c62-a867-8f9a8a1e2f50"
}
},
{
"type": "WEBHOOK",
"url": "http://example.com/handler",
"headers": null
}
],
"id": "7fbfb45b-4ee0-471a-a464-67ca580eed7c",
"createdAt": "2019-04-09T10:02:37.515Z",
"updatedAt": "2019-04-09T10:02:37.515Z"
}
}
Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"status": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"eventType": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"isPrivate": {
"type": "boolean"
},
"schema": {
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"omitFromUserActivity": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"description",
"isPrivate"
]
},
"constraint": {
"type": [
"object",
"null"
],
"properties": {
"$schema": {
"type": "string"
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {}
},
"required": {}
}
},
"activationContext": {
"type": "string",
"enum": [
"TENANT",
"SUBJECT"
]
},
"maxActivations": {
"type": [
"number",
"null"
]
},
"effectivity": {
"type": "object",
"properties": {
"start": {
"type": "string"
},
"end": {
"type": "string"
}
}
},
"reactions": {
"type": "array"
},
"id": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
},
"required": [
"name",
"activationContext",
"effectivity",
"reactions",
"id"
]
}
},
"required": [
"status",
"data"
]
}
Deactivate an Event ReactorDELETE/event_reactors/{id}
Event reactors are never completely deleted since they are used to derive the state of users’ wallets thereby providing deep accountability. However reactors can be deactivated so that they no longer listen for new events.
Internally, deactivation through this API method operates in the same way as updating the reactor so that its effectivity end is set to the current time.
- id
uuid
(required) Example: 5a79eb9e-52d8-44ea-abff-451edf08ed55ID of the event reactor to deactivate.
Generated by aglio on 08 Sep 2025