openapi: 3.1.0
info:
title: Integration API
version: ''
description: |
Use the Integration API to push data to and retrieve data from Talon.One in
real time.
For example, use it to apply promotional offers or loyalty rewards during customer interactions,
track customer behavior, or deliver personalized incentives based on customer activity.
For more background information about this API, see
[Integration API](https://docs.talon.one/docs/dev/integration-api/overview).
Ensure you authenticate to make requests to the API.
> [!note] **Are you looking for a different API?**
> - If you need the API to interact with the Campaign Manager for backoffice operations, see the [Management API](https://docs.talon.one/management-api).
> - If you need the API to integrate with Talon.One from a CEP or CDP platform, see the [Third-party API](https://docs.talon.one/third-party-api).
servers:
- url: https://yourbaseurl.talon.one
security:
- api_key_v1: []
tags:
- name: Achievements
description: |
Achievements allow you to reward a customer profile for performing a number of specific actions or reaching a transactional milestone within a defined period.
For example, you can use achievements to award your customers when they purchase five cups of coffee in one week or when they purchase items worth $3000 in three months.
- name: Audiences
description: |
Represents lists of customer profiles that allow you to target specific groups of customers in your campaigns.
Audiences can be synced from customer data platforms or created directly in Talon.One.
See the [docs](https://docs.talon.one/docs/product/audiences/overview).
- name: Campaigns
description: |
Represents the primary resource used to control the behavior of the Talon.One Rule Engine.
They combine rulesets, coupons, and limits into a single unit.
See the [docs](https://docs.talon.one/docs/product/campaigns/overview).
- name: Catalogs
description: |
Represents a catalog of cart items with unique SKUs. Cart item catalogs allow you to synchronize your entire inventory with Talon.One.
See the [docs](https://docs.talon.one/docs/product/account/dev-tools/managing-cart-item-catalogs).
- name: Coupons
description: |
Coupons are unique codes belonging to a particular campaign. They don't define any behavior on their own.
Instead the campaign ruleset can include rules that validate coupons and carry out particular effects.
See the [docs](https://docs.talon.one/docs/product/campaigns/coupons/coupon-page-overview).
- name: Customer profiles
description: |
Represents the customer's information. For instance, their contact information.
- name: Customer sessions
description: |
Represents the data related to a customer session. Typically, a customer session is the value and content of the customer's cart.
Sessions can be anonymous or linked to a customer profile and they have a life cycle from `open` to `closed`.
In general, a session is closed when the customer completes the checkout step.
Sessions are a key concept of Talon.One. We strongly recommend you read the [documentation about customer sessions](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions).
- name: Events
description: |
Represents a single occurrence of a specific customer action, for example, updating the cart or signing up for a newsletter.
There are 2 types of events:
- **Built-in events:** They are triggered by various endpoints, such as the [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2) endpoint. [Learn more](https://docs.talon.one/docs/dev/concepts/entities/events).
- **Custom events:** They are triggered by the [Track event](https://docs.talon.one/integration-api#tag/Events/operation/trackEventV2) endpoint.
- name: Loyalty
description: |
Represents loyalty programs or concepts related to them.
Loyalty programs can be _profile-based_ or _card-based_, depending on whether loyalty points are linked
to [customer profiles](https://docs.talon.one/docs/product/applications/displaying-customer-profiles) or [loyalty cards](https://docs.talon.one/docs/product/loyalty-programs/card-based/card-based-overview).
See [the Product docs](https://docs.talon.one/docs/product/loyalty-programs/overview) for more information.
- name: Loyalty cards
description: |
Represents loyalty cards.
[Loyalty cards](https://docs.talon.one/docs/product/loyalty-programs/card-based/card-based-overview) allow your customers to collect and spend loyalty points within a card-based loyalty program.
- name: Referrals
description: |
A referral is a code shared between a customer and a prospect.
A referral is defined by:
- an advocate: person who invited their friend via referral program.
- a friend: person who receives the invite from an advocate.
- a referral code: code to be redeemed by the advocate(s) once they referred their friend.
See the [docs](https://docs.talon.one/docs/product/campaigns/referrals/referral-overview).
paths:
/v2/customer_sessions/{customerSessionId}:
put:
operationId: updateCustomerSessionV2
summary: Update customer session
description: |
Update or create a [customer
session](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions).
The endpoint responds with the potential promotion rule
[effects](https://docs.talon.one/docs/dev/integration-api/api-effects) that
match the current cart.
For example, use this endpoint to share the contents of a customer's cart
with Talon.One.
> [!note] **Note**
> - The currency for the session and the cart items in it is the currency set for the Application linked to this session.
> - [Archived campaigns](https://docs.talon.one/docs/product/campaigns/managing-campaigns#archiving-a-campaign) are not considered for rule evaluation.
### Session management
To use this endpoint, start by learning about [customer
sessions](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions)
and their states and refer to the `state` parameter documentation the
request body schema docs below.
### Sessions and customer profiles
- To link a session to a customer profile, set the `profileId` parameter in
the request body to a customer profile's `integrationId`.
- While you can create an anonymous session with `profileId=""`, we
recommend you use a guest ID instead.
- A profile can be linked to simultaneous sessions in different
Applications. Either:
- Use unique session integration IDs or,
- Use the same session integration ID across all of the Applications.
> [!note] **Note**
> - If the specified profile does not exist, an empty profile is **created automatically**.
> You can update it with [Update customer profile](https://docs.talon.one/integration-api#tag/Customer-profiles/operation/updateCustomerProfileV2).
> - Updating a customer session returns a response with the new integration state. Use the `responseContent` property to save yourself extra API calls.
> For example, you can get the customer profile details directly without extra requests.
> - We recommend sending requests sequentially. See [Managing parallel requests](https://docs.talon.one/docs/dev/getting-started/integration-tutorial#managing-parallel-requests).
For more information, see:
- The introductory video in [Getting started](https://docs.talon.one/docs/dev/getting-started/overview).
- The [integration tutorial](https://docs.talon.one/docs/dev/tutorials/integrating-talon-one).
security:
- api_key_v1: []
tags:
- Customer sessions
parameters:
- name: dry
in: query
description: |
Indicates whether to persist the changes. Changes are ignored when `dry=true`.
When set to `true`:
- The endpoint considers **only** the payload that you pass when **closing** the session.
When you do not use the `dry` parameter, the endpoint behaves as a typical PUT endpoint. Each update builds upon the previous ones.
- You can use the `evaluableCampaignIds` body property to select specific campaigns to run.
[See the docs](https://docs.talon.one/docs/dev/integration-api/dry-requests).
example: false
required: false
schema:
type: boolean
- name: customerSessionId
in: path
required: true
description: |
The `integration ID` of the customer session. You set this ID when you create a customer session.
You can see existing customer session integration IDs in the Campaign Manager's **Sessions** menu, or via the
[List Application session](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationSessions) endpoint.
example: session1
schema:
type: string
- name: now
in: query
required: false
description: |
A timestamp value of a future date that acts as a current date when
included in the query.
Use this parameter, for example, to test campaigns that would be
evaluated for this customer session in the future (say, [scheduled
campaigns](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-schedule)).
> [!note] **Note**
> - It must be an RFC3339 timestamp string.
> - It can **only** be a date in the future.
> - It can **only** be used if the `dry` parameter in the query is set to `true`.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationRequest'
examples:
Full request:
summary: Full request
x-vertical: none
value:
customerSession:
profileId: URNGV8294NV
storeIntegrationId: STORE-001
evaluableCampaignIds:
- 10
- 12
couponCodes:
- XMAS-20-2021
referralCode: NT2K54D9
loyaltyCards:
- loyalty-card-1
state: open
cartItems:
- name: Air Glide
sku: SKU1241028
quantity: 1
price: 99.99
category: shoes
product:
name: sample_product
weight: 1130
height: 0
width: 0
length: 0
attributes:
image: 11.jpeg
material: leather
additionalCosts:
shipping:
price: 9
experimentVariantAllocations:
- experimentID: 1
variantID: 2
additionalCosts:
shipping:
price: 9
identifiers:
- d41306257915f83fe01e54092ae470f631161ea16fcf4415842eed41470386ea
attributes:
ShippingCity: Berlin
responseContent:
- customerSession
- customerProfile
eCommerce:
x-vertical: ecommerce
summary: 'Example: eCommerce'
description: |
Update a customer session with multiple cart items and attributes,
including SKUs, prices, and more.
value:
customerSession:
profileId: 382370BKDB946
cartItems:
- name: Wireless Bluetooth Headphones
sku: AUDIO-WH350
quantity: 1
price: 79.99
weight: 310
- name: USB-C Charging Cable
sku: CABLE-USBC-2M
quantity: 2
price: 15.99
weight: 40
responseContent:
- customerSession
- customerProfile
QSR & dining:
x-vertical: qsr
summary: 'Example: QSR & dining'
description: |
Update a customer session as a customer builds a combo meal, including
quantities, categories, and more.
value:
customerSession:
profileId: 382370BKDB946
cartItems:
- name: Cheeseburger
sku: BURGER-001
quantity: 1
price: 8.99
category: Main
- name: French Fries
sku: SIDE-002
quantity: 1
price: 3.49
category: Side
- name: Cola
sku: DRINK-003
quantity: 1
price: 2.49
category: Beverage
responseContent:
- customerSession
- customerProfile
- loyalty
Financial services:
x-vertical: finance
summary: 'Example: Financial services'
description: |
Update a customer session when a cardholder completes a purchase.
value:
customerSession:
profileId: customer-789
cartItems:
- name: Card Purchase - Electronics Store
sku: TXN-CC-001
quantity: 1
price: 250
attributes:
CardType: credit
MerchantCategory: electronics
TransactionType: card_payment
responseContent:
- customerSession
- customerProfile
- loyalty
Travel & hospitality:
x-vertical: travel
summary: 'Example: Travel & hospitality'
description: |
Update a customer session when a guest books a hotel stay to
automatically award bonus loyalty points for stays that exceed
the minimum night count.
value:
customerSession:
profileId: customer-321
cartItems:
- name: Deluxe Room - 5 nights
sku: HOTEL-ROOM-DLX
quantity: 5
price: 189
attributes:
CheckInDate: 2026-06-10
CheckOutDate: 2026-06-15
StayNights: 5
PropertyType: hotel
responseContent:
- customerSession
- customerProfile
- loyalty
description: body
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationStateV2'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'409':
description: Too many requests or limit reached - Avoid parallel requests. See the [docs](https://docs.talon.one/docs/dev/tutorials/integrating-talon-one#managing-parallel-requests).
content:
application/json:
schema:
properties:
message:
type: string
example: Too many requests are updating this session at the same time
errors:
type: array
items: {}
StatusCode:
type: integer
example: 409
get:
operationId: getCustomerSession
summary: Get customer session
description: |
Get the details of the given customer session.
You can get the same data via other endpoints that also apply changes, which can help you save requests and increase performance. See:
- [Update customer session](#tag/Customer-sessions/operation/updateCustomerSessionV2)
- [Update customer profile](#tag/Customer-profiles/operation/updateCustomerProfileV2)
security:
- api_key_v1: []
tags:
- Customer sessions
parameters:
- name: customerSessionId
in: path
required: true
description: |
The `integration ID` of the customer session. You set this ID when you create a customer session.
You can see existing customer session integration IDs in the Campaign Manager's **Sessions** menu, or via the
[List Application session](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationSessions) endpoint.
example: session1
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationCustomerSessionResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/customer_sessions/{customerSessionId}/returns:
post:
operationId: returnCartItems
summary: Return cart items
description: |
Create a new return request for the specified cart items.
This endpoint automatically changes the session state from `closed` to
`partially_returned`.
> [!note] This will roll back any effects associated with these cart items.
> For more information, see [our documentation on session
> states](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions#customer-session-states)
> and [this tutorial](https://docs.talon.one/docs/dev/tutorials/partially-returning-a-session).
> [!note] To make request processing idempotent for this endpoint, include the `Idempotency-Key` header with an idempotency key in requests. Also:
> - Requests with the `Idempotency-Key` header are logged in the Talon.One access logs.
> - Responses for idempotent requests are stored in the database and expire 24 hours after the request is sent.
> - Idempotency keys are typically UUID keys and should not exceed 255 characters in length.
security:
- api_key_v1: []
tags:
- Customer sessions
parameters:
- name: dry
in: query
description: |
Indicates whether to persist the changes. Changes are ignored when `dry=true`.
example: false
required: false
schema:
type: boolean
- name: customerSessionId
in: path
required: true
description: |
The `integration ID` of the customer session. You set this ID when you create a customer session.
You can see existing customer session integration IDs in the Campaign Manager's **Sessions** menu, or via the
[List Application session](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationSessions) endpoint.
example: session1
schema:
type: string
- name: runRuleEngine
in: query
description: |
When set to `true`, reevaluates the updated session after items are returned. Only reevaluates campaigns where `reevaluateOnReturn` is set to `true` and which produced an effect when the session was closed.
example: false
required: false
schema:
type: boolean
requestBody:
$ref: '#/components/requestBodies/ReturnIntegrationRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationStateV2'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/customer_sessions/{customerSessionId}/reopen:
put:
operationId: reopenCustomerSession
summary: Reopen customer session
description: |
Reopen a closed [customer
session](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions).
For example, if a session has been completed but still needs to be edited,
you can reopen it with this endpoint.
A reopen session is treated like a standard open session.
When reopening a session:
- The `talon_session_reopened` event is triggered. You can see it in the **Events** view in the Campaign Manager.
- The session state is updated to `open`.
- Any modified budgets and triggered effects are rolled back when the session closes.
- Depending on the [return policy](https://docs.talon.one/docs/product/loyalty-programs/managing-loyalty-programs#return-policy)
in your loyalty programs, points are rolled back in the following ways:
- Pending points are rolled back automatically.
- If **Active points deduction** setting is enabled, any points that were earned and activated when the session closed
are rolled back.
- If **Negative balance** is enabled, the rollback can create a negative points balance.
Effects and budgets unimpacted by a session reopening
The following effects and budgets remain in the state they were in when the session closed:
- Add free item effect
- Award giveaway
- Coupon and referral creation
- Coupon reservation
- Custom effect
- Update attribute value
- Update cart item attribute value
To see an example of a rollback, see the
[Cancelling a session with campaign budgets](https://docs.talon.one/docs/dev/tutorials/rolling-back-effects) tutorial.
> [!note] If your order workflow requires you to create a new session
> instead of reopening a session, use the
> [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)
> endpoint to cancel a closed session and create a new one.
security:
- api_key_v1: []
tags:
- Customer sessions
parameters:
- name: customerSessionId
in: path
required: true
description: |
The `integration ID` of the customer session. You set this ID when you create a customer session.
You can see existing customer session integration IDs in the Campaign Manager's **Sessions** menu, or via the
[List Application session](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationSessions) endpoint.
example: session1
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ReopenSessionResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/customer_profiles/{integrationId}:
put:
operationId: updateCustomerProfileV2
summary: Update customer profile
description: |
Update or create a [Customer
Profile](https://docs.talon.one/docs/dev/concepts/entities/customer-profiles).
This endpoint triggers the Rule Builder.
You can use this endpoint to:
- Set attributes on the given customer profile. Ensure you create the attributes in the Campaign Manager, first.
- Modify the audience the customer profile is a member of.
> [!note] **Note**
> - Updating a customer profile returns a response with the requested integration state.
> - You can use the `responseContent` property to save yourself extra API calls. For example, you can get
> the customer profile details directly without extra requests.
> - We recommend sending requests sequentially.
> See [Managing parallel requests](https://docs.talon.one/docs/dev/getting-started/integration-tutorial#managing-parallel-requests).
> - [Archived campaigns](https://docs.talon.one/docs/product/campaigns/managing-campaigns#archiving-a-campaign) are not considered in rule evaluation when `runRuleEngine` is `true`.
security:
- api_key_v1: []
tags:
- Customer profiles
parameters:
- in: path
required: true
name: integrationId
description: |
The integration identifier for this customer profile. Must be:
- Unique within the deployment.
- Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.
Once set, you cannot update this identifier.
example: customer1
schema:
type: string
- name: runRuleEngine
in: query
description: |
Indicates whether to run the Rule Engine.
If `true`, the response includes:
- The effects generated by the triggered campaigns are returned in the `effects` property.
- The created coupons and referral objects.
If `false`:
- The rules are not executed and the `effects` property is always empty.
- The response time improves.
- You cannot use `responseContent` in the body.
example: false
required: false
schema:
type: boolean
default: false
- name: dry
in: query
description: |
(Only works when `runRuleEngine=true`) Indicates whether to persist the changes. Changes are ignored when `dry=true`.
When set to `true`, you can use the `evaluableCampaignIds` body property to select specific campaigns to run.
example: false
required: false
schema:
type: boolean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerProfileIntegrationRequestV2'
examples:
Full request:
summary: Full request
x-vertical: none
value:
attributes:
Language: english
ShippingCountry: DE
evaluableCampaignIds:
- 10
- 12
responseContent:
- triggeredCampaigns
- customerProfile
audiencesChanges:
adds:
- 2
- 4
deletes:
- 7
eCommerce:
x-vertical: ecommerce
summary: 'Example: eCommerce'
description: Create a new customer with basic information and sign-up date.
value:
attributes:
Name: Chris Taylor
Email: chris.taylor@example.com
SignupDate: 2026-01-21T15:04:05+07:00
PaymentMethod: Bank transfer
QSR & dining:
x-vertical: qsr
summary: 'Example: QSR & dining'
description: |
Update a customer profile with dietary preferences and ordering behaviors to personalize offers.
value:
attributes:
Name: Jane Doe
Email: jane.doe@example.com
DietaryPreferences: vegetarian
Financial services:
x-vertical: finance
summary: 'Example: Financial services'
description: |
Update a customer profile with account type and card details to enable
personalized cashback campaigns.
value:
attributes:
Name: Alex Johnson
Email: alex.johnson@example.com
AccountType: premium_checking
PreferredCard: credit
Travel & hospitality:
x-vertical: travel
summary: 'Example: Travel & hospitality'
description: |
Update a traveler profile with a churn risk score to identify travelers who
haven't booked a flight in several months and offer time-sensitive rewards.
value:
attributes:
Name: Maria Chen
Email: maria.chen@example.com
ChurnRisk: 0.872
description: body
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerProfileIntegrationResponseV2'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'409':
description: Too many requests or limit reached - Avoid parallel requests. See the [docs](https://docs.talon.one/docs/dev/tutorials/integrating-talon-one#managing-parallel-requests).
content:
application/json:
schema:
properties:
message:
type: string
example: Too many requests are updating this profile at the same time
errors:
type: array
items: {}
StatusCode:
type: integer
example: 409
/v2/customer_profiles:
put:
operationId: updateCustomerProfilesV2
summary: Update multiple customer profiles
description: |
Update (or create) up to 1000 [customer
profiles](https://docs.talon.one/docs/dev/concepts/entities/customer-profiles)
in 1 request.
The `integrationId` must be any identifier that remains stable for
the customer. Do not use an ID that the customer can update
themselves. For example, you can use a database ID.
A customer profile [can be linked to one or more
sessions](https://docs.talon.one/integration-api#tag/Customer-sessions).
> [!note] This endpoint does not trigger the Rule Engine.
> To trigger the Rule Engine for customer profile updates,
> use the [Update customer profile](#tag/Customer-profiles/operation/updateCustomerProfileV2) endpoint.
security:
- api_key_v1: []
tags:
- Customer profiles
parameters:
- name: silent
in: query
description: |
Possible values: `yes` or `no`.
- `yes`: Increases the performance of the API call by returning a 204 response.
- `no`: Returns a 200 response that contains the updated customer profiles.
example: yes
required: false
schema:
type: string
default: yes
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MultipleCustomerProfileIntegrationRequest'
description: body
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MultipleCustomerProfileIntegrationResponseV2'
'204':
description: No content
content:
application/json:
schema:
type: string
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/audiences:
post:
operationId: createAudienceV2
summary: Create audience
description: |
Create an audience. The audience can be created directly from scratch or can
come from third party platforms.
> [!note] Audiences can also be created from scratch via the Campaign
Manager. See the [docs](https://docs.talon.one/docs/product/audiences/creating-audiences).
To create an audience from an existing audience from a [technology
partner](https://docs.talon.one/docs/dev/technology-partners/overview):
1. Set the `integration` property to `mparticle`, `segment` etc., depending
on a third-party platform.
1. Set `integrationId` to the ID of this audience in a third-party platform.
To create an audience from an existing audience in another platform:
1. Do not use the `integration` property.
1. Set `integrationId` to the ID of this audience in the 3rd-party platform.
To create an audience from scratch, only set the `name` property.
Once you create your first audience, audience-specific rule conditions are
enabled in the Rule Builder.
security:
- api_key_v1: []
tags:
- Audiences
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NewAudience'
examples:
Full request:
summary: Full request
x-vertical: none
value:
name: Travel audience
sandbox: true
description: Travel audience 18-27
subscribedApplicationsIds:
- 3
- 13
integration: mparticle
integrationId: 382370BKDB946
createdIn3rdParty: false
lastUpdate: 2022-04-26T11:02:38Z
eCommerce:
x-vertical: ecommerce
summary: 'Example: eCommerce'
description: Create an audience for high-value customers.
value:
name: VIP Customers
description: Customers with high lifetime value and frequent purchases
sandbox: false
createdIn3rdParty: false
QSR & dining:
x-vertical: qsr
summary: 'Example: QSR & dining'
description: |
Creating an audience for customers who frequently order breakfast items during morning hours.
This audience can be targeted with breakfast promotions, early-bird offers, or morning loyalty bonuses.
value:
name: Breakfast Regulars
description: Customers who order breakfast items 3+ times per week during weekday mornings
sandbox: false
createdIn3rdParty: false
Financial services:
x-vertical: finance
summary: 'Example: Financial services'
description: |
Create an audience for customers who recently opened an account to
target them with welcome bonuses or first-transaction cashback rewards.
value:
name: New Account Holders
description: Customers who opened an account within the last 30 days
sandbox: false
createdIn3rdParty: false
Travel & hospitality:
x-vertical: travel
summary: 'Example: Travel & hospitality'
description: |
Create an audience for luxury-oriented travelers so tour operators
can automatically trigger personalized offers, such as complimentary
spa vouchers, when they initiate a booking.
value:
name: Luxury Seekers
description: Travelers who consistently book premium accommodations and high-end tour packages
sandbox: false
createdIn3rdParty: false
description: body
required: true
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Audience'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'409':
description: Conflict. An Audience with this ID already exists for this integration.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/audiences/{audienceId}:
delete:
operationId: deleteAudienceV2
summary: Delete audience
description: |
Delete an audience created by a third-party integration.
> [!warning] This endpoint also removes any associations recorded between a
customer profile and this audience.
> [!note] Audiences can also be deleted via the Campaign Manager. See the
[docs](https://docs.talon.one/docs/product/audiences/managing-audiences#deleting-an-audience).
tags:
- Audiences
security:
- api_key_v1: []
parameters:
- name: audienceId
in: path
required: true
description: The ID of the audience.
example: 10
schema:
type: integer
responses:
'204':
description: No Content
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
put:
operationId: updateAudienceV2
summary: Update audience name
description: |
Update the name of the given audience created by a third-party integration. Sending a request to this endpoint does **not** trigger the Rule Engine.
To update the audience's members, use the [Update customer profile](#tag/Customer-profiles/operation/updateCustomerProfileV2) endpoint.
security:
- api_key_v1: []
tags:
- Audiences
parameters:
- name: audienceId
in: path
required: true
description: The ID of the audience.
example: 10
schema:
type: integer
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateAudience'
description: body
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Audience'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/audiences/{audienceId}/memberships:
delete:
operationId: deleteAudienceMembershipsV2
summary: Delete audience memberships
description: |
Remove all members from this audience.
security:
- api_key_v1: []
tags:
- Audiences
parameters:
- name: audienceId
in: path
required: true
description: The ID of the audience.
example: 10
schema:
type: integer
responses:
'204':
description: No Content
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/customer_audiences:
post:
operationId: updateCustomerProfileAudiences
summary: Update multiple customer profiles' audiences
description: |
Add customer profiles to or remove them from an audience.
The endpoint supports 1000 audience actions (`add` or `remove`) per request.
> [!note] You can also do this using the
> [Update audience](https://docs.talon.one/docs/product/rules/effects/using-effects#updating-an-audience)
> effect.
security:
- api_key_v1: []
tags:
- Audiences
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerProfileAudienceRequest'
description: body
required: true
responses:
'204':
description: No Content
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/audience_customers/{audienceId}/attributes:
put:
operationId: updateAudienceCustomersAttributes
summary: Update profile attributes for all customers in audience
description: |
Update the specified profile attributes to the provided values for all customers in the specified audience.
security:
- api_key_v1: []
tags:
- Audiences
parameters:
- name: audienceId
in: path
required: true
description: The ID of the audience.
example: 10
schema:
type: integer
requestBody:
$ref: '#/components/requestBodies/AttributeQuery'
responses:
'204':
description: No Content
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/link_profile:
post:
operationId: linkLoyaltyCardToProfile
summary: Link customer profile to card
description: |
[Loyalty cards](https://docs.talon.one/docs/product/loyalty-programs/card-based/card-based-overview)
allow customers to collect and spend loyalty points within a [card-based loyalty
program](https://docs.talon.one/docs/product/loyalty-programs/overview#loyalty-program-types).
They are useful to gamify loyalty programs and can be used with or without
customer profiles linked to them.
Link a customer profile to a given loyalty card for the card to be set as
**Registered**.
This affects how it can be used. See the
[docs](https://docs.talon.one/docs/product/loyalty-programs/card-based/managing-loyalty-cards#linking-customer-profiles-to-a-loyalty-card).
> [!note] You can link as many customer profiles to a given loyalty card as the
> [**card user limit**](https://docs.talon.one/docs/product/loyalty-programs/card-based/creating-cb-programs)
> allows.
tags:
- Loyalty cards
security:
- api_key_v1: []
parameters:
- name: loyaltyProgramId
in: path
description: |
Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
required: true
schema:
type: integer
- name: loyaltyCardId
in: path
description: |
Identifier of the loyalty card. You can get the identifier with
the [List loyalty
cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
endpoint.
**Important**: The loyalty card ID requires [URL
encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
contains special characters. For example, you must encode `NewCard2026%`
as `NewCard2026%25`.
example: summer-loyalty-card-0543
required: true
schema:
type: string
minLength: 4
maxLength: 108
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LoyaltyCardRegistration'
description: body
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LoyaltyCard'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/unlink_profile:
post:
operationId: unlinkLoyaltyCardFromProfile
summary: Unlink customer profile from a loyalty card
description: |
Unlink a customer profile from a [registered](https://docs.talon.one/docs/product/loyalty-programs/card-based/managing-loyalty-cards#linking-customer-profiles-to-a-loyalty-card) loyalty card.
To get the `integrationId` of a customer profile, you can use the
[Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)
endpoint.
tags:
- Loyalty cards
security:
- api_key_v1: []
parameters:
- name: loyaltyProgramId
in: path
description: |
The identifier of the card-based loyalty program containing the loyalty card. You can get this ID using the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
required: true
schema:
type: integer
- name: loyaltyCardId
in: path
description: |
The identifier of the loyalty card. You can get this ID using the [List loyalty
cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
endpoint.
**Important**: The loyalty card ID requires [URL
encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
contains special characters. For example, you must encode `NewCard2026%`
as `NewCard2026%25`.
example: summer-loyalty-card-0543
required: true
schema:
type: string
minLength: 4
maxLength: 108
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LoyaltyCardRegistration'
description: body
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LoyaltyCard'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/integration/campaigns:
get:
operationId: integrationGetAllCampaigns
summary: List all running campaigns
description: |
Retrieve all running campaigns for the specified Application. You
can filter the results by providing specific campaign IDs or a range of
start and end dates.
security:
- api_key_v1: []
tags:
- Campaigns
parameters:
- name: pageSize
in: query
required: false
description: The number of items in the response.
example: 50
schema:
type: integer
minimum: 1
maximum: 1000
default: 50
- $ref: '#/components/parameters/skip'
- name: campaignIds
in: query
required: false
description: |
Filter by one or more campaign IDs, separated by a comma.
**Note:** If no campaigns are specified, data for all the campaigns in
the Application is returned.
example:
- '11'
- '20'
style: form
explode: false
schema:
type: array
items:
type: string
- name: startAfter
in: query
description: |
Filter results to only include campaigns that start on or after
the specified timestamp.
**Note:**
- It must be an RFC3339 timestamp string.
- You can include a time component in your string, for example,
`T23:59:59` to specify the end of the day. The time zone setting
considered is `UTC`. If you do not include a time component, a default
time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: startBefore
in: query
description: |
Filter results to only include campaigns that start on or before
the specified timestamp.
**Note:**
- It must be an RFC3339 timestamp string.
- You can include a time component in your string, for example,
`T23:59:59` to specify the end of the day. The time zone setting
considered is `UTC`. If you do not include a time component, a default
time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: endAfter
in: query
description: |
Filter results to only include campaigns that end on or after
the specified timestamp.
**Note:**
- It must be an RFC3339 timestamp string.
- You can include a time component in your string, for example,
`T23:59:59` to specify the end of the day. The time zone setting
considered is `UTC`. If you do not include a time component, a default
time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: endBefore
in: query
description: |
Filter results to only include campaigns that end on or before
the specified timestamp.
**Note:**
- It must be an RFC3339 timestamp string.
- You can include a time component in your string, for example,
`T23:59:59` to specify the end of the day. The time zone setting
considered is `UTC`. If you do not include a time component, a default
time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- hasMore
- data
properties:
hasMore:
type: boolean
data:
type: array
items:
$ref: '#/components/schemas/IntegrationCampaign'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v2/events:
post:
operationId: trackEventV2
summary: Track event
description: |
Triggers a custom event.
To use this endpoint:
1. Define a [custom event](https://docs.talon.one/docs/dev/concepts/entities/events#creating-a-custom-event)
in the Campaign Manager.
1. Update or create a rule to check for this event.
1. Trigger the event with this endpoint. After you have successfully sent an
event to Talon.One, you can list the received events in the **Events** view
in the Campaign Manager.
Talon.One also offers a set of [built-in
events](https://docs.talon.one/docs/dev/concepts/entities/events). Ensure
you do not create a custom event when you can use a built-in event.
For example, use this endpoint to trigger an event when a customer shares a
link to a product.
See the [tutorial](https://docs.talon.one/docs/product/tutorials/referrals/incentivizing-product-link-sharing).
> [!note] **Note**
> - `profileId` is required even though the schema does not specify it.
> - If the customer profile ID is new, a new profile is automatically created but the `customer_profile_created` [built-in event ](https://docs.talon.one/docs/dev/concepts/entities/events) is **not** triggered.
> - We recommend sending requests sequentially. See [Managing parallel requests](https://docs.talon.one/docs/dev/getting-started/integration-tutorial#managing-parallel-requests).
> - [Archived campaigns](https://docs.talon.one/docs/product/campaigns/managing-campaigns#archiving-a-campaign) are not considered in rule evaluation.
security:
- api_key_v1: []
tags:
- Events
parameters:
- name: silent
in: query
description: |
Possible values: `yes` or `no`.
- `yes`: Increases the performance of the API call by returning a 204 response.
- `no`: Returns a 200 response that contains the updated customer profiles.
example: yes
required: false
schema:
type: string
default: yes
- name: dry
in: query
description: |
Indicates whether to persist the changes. Changes are ignored when `dry=true`.
example: false
required: false
schema:
type: boolean
- name: forceCompleteEvaluation
in: query
description: |
Forces evaluation for all matching campaigns regardless of the [campaign evaluation mode](https://docs.talon.one/docs/product/applications/managing-campaign-evaluation#setting-campaign-evaluation-mode). Requires `dry=true`.
example: false
required: false
schema:
type: boolean
default: false
requestBody:
$ref: '#/components/requestBodies/IntegrationEventV2Request'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEventV2Response'
'204':
description: No content
content:
application/json:
schema:
type: string
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'409':
description: Too many requests or limit reached - Avoid parallel requests. See the [docs](https://docs.talon.one/docs/dev/tutorials/integrating-talon-one#managing-parallel-requests).
content:
application/json:
schema:
properties:
message:
type: string
example: Too many requests are updating this profile at the same time
errors:
type: array
items: {}
StatusCode:
type: integer
example: 409
/v1/referrals:
post:
operationId: createReferral
summary: Create referral code for an advocate
description: |
Creates a referral code for an advocate. The code will be valid for the
referral campaign for which is created, indicated in the `campaignId`
parameter, and will be associated with the profile specified in the
`advocateProfileIntegrationId` parameter as the advocate's profile.
> [!note] Any [referral limits](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-budgets#referral-limits)
> set are ignored when you use this endpoint.
security:
- api_key_v1: []
tags:
- Referrals
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NewReferral'
description: body
required: true
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Referral'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/referrals_for_multiple_advocates:
post:
operationId: createReferralsForMultipleAdvocates
summary: Create referral codes for multiple advocates
description: |
Creates unique referral codes for multiple advocates. The code will be valid
for the referral campaign for which it is created, indicated in the
`campaignId` parameter, and one referral code will be associated with one
advocate using the profile specified in the `advocateProfileIntegrationId`
parameter as the advocate's profile.
> [!note] Any [referral limits](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-budgets#referral-limits)
> set are ignored when you use this endpoint.
security:
- api_key_v1: []
tags:
- Referrals
parameters:
- name: silent
in: query
description: |
Possible values: `yes` or `no`.
- `yes`: Increases the performance of the API call by returning a 204 response.
- `no`: Returns a 200 response that contains the updated customer profiles.
example: yes
required: false
schema:
type: string
default: yes
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NewReferralsForMultipleAdvocates'
description: body
required: true
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
required:
- totalResultSize
- data
properties:
totalResultSize:
type: integer
example: 1
data:
type: array
items:
$ref: '#/components/schemas/Referral'
'204':
description: No Content
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/customer_data/{integrationId}:
delete:
operationId: deleteCustomerData
summary: Delete customer's personal data
description: |
Delete all attributes on the customer profile and on entities that reference
this customer profile.
> [!warning] **Warning**
> - Customer data is deleted from all Applications in the
> [environment](https://docs.talon.one/docs/product/applications/overview#application-environments)
> that the API key belongs to. For example, if you use this endpoint with an API key that belongs
> to a sandbox Application, customer data will be deleted from all sandbox Applications.
> This is because customer data is shared between Applications from the same environment.
> - To preserve performance, we recommend avoiding deleting customer data
> during peak-traffic hours.
security:
- api_key_v1: []
tags:
- Customer profiles
parameters:
- name: integrationId
in: path
required: true
description: |
The integration ID of the customer profile. You can get the `integrationId` of a profile using:
- A customer session integration ID with the [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2) endpoint.
- The Management API with the [List application's customers](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationCustomers) endpoint.
example: customer1
schema:
type: string
responses:
'204':
description: No Content
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/coupon_reservations/{couponValue}:
post:
operationId: createCouponReservation
summary: Create coupon reservation
description: |
Create a coupon reservation for the specified customer profiles on the
specified coupon.
You can also create a reservation via the Campaign Manager using the
[Create coupon code
reservation](https://docs.talon.one/docs/product/rules/effects/using-effects#reserving-a-coupon-code)
effect.
> [!note] **Note**
> - If the **Reservation mandatory** option was selected when creating the
> specified coupon, the endpoint creates a **hard** reservation, meaning only users who have
> this coupon code reserved can redeem it.
>
> Otherwise, the endpoint creates a **soft** reservation, meaning the coupon
> is associated with the specified customer profiles (they show up when using
> the [List customer data](https://docs.talon.one/integration-api#tag/Customer-profiles/operation/getCustomerInventory)
> endpoint), but any user can redeem it.
>
> This can be useful, for example, to display a _coupon wallet_ for customers
> when they visit your store.
> - If the **Coupon visibility** option was selected when creating the
> specified coupon, the coupon code is implicitly soft-reserved for all customers, and the code
> will be returned for all customer profiles in the [List customer
> data](https://docs.talon.one/integration-api#tag/Customer-profiles/operation/getCustomerInventory) endpoint.
> - This endpoint overrides the coupon reservation limit set when
> [the coupon is created](https://docs.talon.one/docs/product/campaigns/coupons/creating-coupons).
To ensure that coupons cannot be reserved after the reservation limit is
reached, use the [Create coupon code
reservation](https://docs.talon.one/docs/product/rules/effects/using-effects#reserving-a-coupon-code)
effect in the Rule Builder and the [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)
endpoint.
To delete a reservation, use the
[Delete reservation](https://docs.talon.one/integration-api#tag/Coupons/operation/deleteCouponReservation) endpoint.
security:
- api_key_v1: []
tags:
- Coupons
parameters:
- name: couponValue
in: path
description: |
The code of the coupon.
**Important:** The coupon code requires [URL encoding](https://www.w3schools.com/tags//ref_urlencode.asp)
if it contains special characters.
For example, you must encode `SUMMER25%OFF` as `SUMMER25%25OFF`.
example: SUMMER10
required: true
schema:
type: string
requestBody:
$ref: '#/components/requestBodies/CouponReservations'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Coupon'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
delete:
operationId: deleteCouponReservation
summary: Delete coupon reservations
description: |
Remove all the coupon reservations from the provided customer profile integration IDs and the provided
coupon code.
security:
- api_key_v1: []
tags:
- Coupons
parameters:
- name: couponValue
in: path
description: |
The code of the coupon.
**Important:** The coupon code requires [URL encoding](https://www.w3schools.com/tags//ref_urlencode.asp)
if it contains special characters.
For example, you must encode `SUMMER25%OFF` as `SUMMER25%25OFF`.
example: SUMMER10
required: true
schema:
type: string
requestBody:
$ref: '#/components/requestBodies/CouponReservations'
responses:
'204':
description: No Content
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/coupon_reservations/customerprofiles/{couponValue}:
get:
operationId: getReservedCustomers
summary: List customers that have this coupon reserved
description: |
Return all customers that have this coupon marked as reserved. This includes hard and soft reservations.
security:
- api_key_v1: []
tags:
- Coupons
parameters:
- name: couponValue
in: path
description: |
The code of the coupon.
**Important:** The coupon code requires [URL encoding](https://www.w3schools.com/tags//ref_urlencode.asp)
if it contains special characters.
For example, you must encode `SUMMER25%OFF` as `SUMMER25%25OFF`.
example: SUMMER10
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- totalResultSize
- data
properties:
totalResultSize:
type: integer
example: 1
data:
type: array
items:
$ref: '#/components/schemas/CustomerProfile'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/customer_profiles/{integrationId}/inventory:
get:
operationId: getCustomerInventory
summary: List customer data
description: |
Return the customer inventory regarding entities referencing this customer profile's `integrationId`.
Typical entities returned are: customer profile information, referral codes, loyalty points, loyalty cards and reserved coupons.
Reserved coupons also include redeemed coupons.
security:
- api_key_v1: []
tags:
- Customer profiles
parameters:
- name: integrationId
in: path
required: true
description: |
The integration ID of the customer profile. You can get the `integrationId` of a profile using:
- A customer session integration ID with the [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2) endpoint.
- The Management API with the [List application's customers](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationCustomers) endpoint.
example: customer1
schema:
type: string
- name: profile
in: query
required: false
description: Set to `true` to include customer profile information in the response.
example: false
schema:
type: boolean
- name: referrals
in: query
required: false
description: Set to `true` to include referral information in the response.
example: false
schema:
type: boolean
- name: coupons
in: query
required: false
description: Set to `true` to include coupon information in the response.
example: false
schema:
type: boolean
- name: loyalty
in: query
required: false
description: Set to `true` to include loyalty information in the response.
example: false
schema:
type: boolean
- name: giveaways
in: query
required: false
description: Set to `true` to include giveaways information in the response.
example: false
schema:
type: boolean
- name: achievements
in: query
required: false
description: Set to `true` to include achievement information in the response.
example: false
schema:
type: boolean
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerInventory'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/customer_profiles/{integrationId}/achievements:
get:
operationId: getCustomerAchievements
summary: List customer's available achievements
description: |
Retrieve all the achievements available to a given customer and their progress in them.
security:
- api_key_v1: []
tags:
- Achievements
parameters:
- in: path
required: true
name: integrationId
description: |
The integration identifier for this customer profile. Must be:
- Unique within the deployment.
- Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.
Once set, you cannot update this identifier.
example: customer1
schema:
type: string
- name: campaignIds
in: query
required: false
description: |
Filter by one or more Campaign IDs, separated by a comma.
**Note:** If no campaigns are specified, data for all the campaigns in the Application is returned.
example:
- '11'
- '20'
style: form
explode: false
schema:
type: array
items:
type: string
- name: achievementIds
in: query
required: false
description: |
Filter by one or more Achievement IDs, separated by a comma.
**Note:** If no achievements are specified, data for all the achievements in the Application is returned.
example:
- '11'
- '20'
style: form
explode: false
schema:
type: array
items:
type: string
- name: achievementStatus
in: query
required: false
description: |
Filter by status of the achievement.
**Note:** If the achievement status is not specified, only data for all active achievements in the Application is returned.
style: form
explode: false
schema:
type: array
items:
type: string
enum:
- active
- scheduled
example:
- active
- scheduled
- name: currentProgressStatus
in: query
required: false
description: |
Filter by customer progress status in the achievement.
style: form
explode: false
schema:
type: array
items:
type: string
enum:
- inprogress
- completed
- not_started
example:
- inprogress
- completed
- $ref: '#/components/parameters/pageSize'
- $ref: '#/components/parameters/skip'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- totalResultSize
- data
properties:
totalResultSize:
type: integer
example: 1
data:
type: array
items:
$ref: '#/components/schemas/AchievementStatusEntry'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/customer_profiles/{integrationId}/achievements/{achievementId}:
get:
operationId: getCustomerAchievementHistory
summary: List customer's achievement history
description: |
Retrieve all progress history of a given customer in the given achievement.
security:
- api_key_v1: []
tags:
- Achievements
parameters:
- in: path
required: true
name: integrationId
description: |
The integration identifier for this customer profile. Must be:
- Unique within the deployment.
- Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.
Once set, you cannot update this identifier.
example: customer1
schema:
type: string
- in: path
required: true
name: achievementId
description: |
The achievement identifier.
example: 321
schema:
type: integer
- name: progressStatus
in: query
required: false
description: |
Filter by customer progress status in the achievement.
style: form
explode: false
schema:
type: array
items:
type: string
enum:
- inprogress
- completed
- expired
example:
- inprogress
- completed
- name: startDate
description: Timestamp that filters the results to only contain achievements created on or after the start date.
in: query
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: endDate
description: Timestamp that filters the results to only contain achievements created before or on the end date.
in: query
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- $ref: '#/components/parameters/pageSize'
- $ref: '#/components/parameters/skip'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- totalResultSize
- data
properties:
totalResultSize:
type: integer
example: 1
data:
type: array
items:
$ref: '#/components/schemas/AchievementProgress'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/balances:
get:
operationId: getLoyaltyCardBalances
summary: Get card's point balances
description: |
Retrieve loyalty balances for the given loyalty card in the specified loyalty program with filtering options applied.
If no filtering options are applied, all loyalty balances for the given loyalty card are returned.
security:
- api_key_v1: []
tags:
- Loyalty cards
parameters:
- name: loyaltyProgramId
in: path
description: |
Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
required: true
schema:
type: integer
- name: loyaltyCardId
in: path
description: |
Identifier of the loyalty card. You can get the identifier with
the [List loyalty
cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
endpoint.
**Important**: The loyalty card ID requires [URL
encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
contains special characters. For example, you must encode `NewCard2026%`
as `NewCard2026%25`.
example: summer-loyalty-card-0543
required: true
schema:
type: string
minLength: 4
maxLength: 108
- name: endDate
in: query
required: false
description: |
Used to return expired, active, and pending loyalty balances before this
timestamp. You can enter any past, present, or future timestamp value.
> [!note] **Note**
> - This must be an RFC3339 timestamp string.
> - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
> considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: subledgerId
in: query
required: false
description: Filter results by one or more subledger IDs. Must be exact match.
example:
- subledger1
- subledger2
style: form
explode: true
schema:
type: array
items:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LoyaltyCardBalances'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/balances:
get:
operationId: getLoyaltyBalances
summary: Get customer's loyalty balances
description: |
Retrieve loyalty ledger balances for the given Integration ID in the
specified loyalty program.
You can filter balances by date and subledger ID, and include tier-related
information in the response.
> [!note] If no filtering options are applied, you retrieve all loyalty
> balances on the current date for the given integration ID.
Loyalty balances are calculated when Talon.One receives your request using
the points stored in our database, so retrieving a large number of balances
at once can impact performance.
For more information, see:
- [Managing card-based loyalty program data](https://docs.talon.one/docs/product/loyalty-programs/card-based/managing-loyalty-cards)
- [Managing profile-based loyalty program data](https://docs.talon.one/docs/product/loyalty-programs/profile-based/managing-pb-lp-data)
security:
- api_key_v1: []
tags:
- Loyalty
parameters:
- name: loyaltyProgramId
in: path
required: true
description: |
Identifier of the profile-based loyalty program. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
schema:
type: integer
- in: path
required: true
name: integrationId
description: |
The integration identifier for this customer profile. Must be:
- Unique within the deployment.
- Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.
Once set, you cannot update this identifier.
example: customer1
schema:
type: string
- name: endDate
in: query
required: false
description: |
Used to return expired, active, and pending loyalty balances before this
timestamp. You can enter any past, present, or future timestamp value.
> [!note] **Note**
> - This must be an RFC3339 timestamp string.
> - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
> considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: subledgerId
in: query
required: false
description: The ID of the subledger by which we filter the data.
example: subledger1
schema:
type: string
- name: includeTiers
in: query
required: false
description: |
Indicates whether tier information is included in the response.
When set to `true`, the response includes information about the current tier and the number of points required to move to next tier.
example: false
schema:
type: boolean
default: false
- name: includeProjectedTier
in: query
required: false
description: |
Indicates whether the customer's projected tier information is included in the response.
When set to `true`, the response includes information about the customer's active points and the name of the projected tier.
**Note** We recommend filtering by `subledgerId` for better performance.
example: false
schema:
type: boolean
default: false
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LoyaltyBalancesWithTiers'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/transactions:
get:
operationId: getLoyaltyCardTransactions
summary: List card's transactions
description: |
Retrieve loyalty transaction logs for the given loyalty card in the specified loyalty program with filtering options applied.
If no filtering options are applied, the last 50 loyalty transactions for the given loyalty card are returned.
security:
- api_key_v1: []
tags:
- Loyalty cards
parameters:
- name: loyaltyProgramId
in: path
description: |
Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
required: true
schema:
type: integer
- name: loyaltyCardId
in: path
description: |
Identifier of the loyalty card. You can get the identifier with
the [List loyalty
cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
endpoint.
**Important**: The loyalty card ID requires [URL
encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
contains special characters. For example, you must encode `NewCard2026%`
as `NewCard2026%25`.
example: summer-loyalty-card-0543
required: true
schema:
type: string
minLength: 4
maxLength: 108
- name: subledgerId
in: query
required: false
description: Filter results by one or more subledger IDs. Must be exact match.
example:
- subledger1
- subledger2
style: form
explode: true
schema:
type: array
items:
type: string
- name: loyaltyTransactionType
in: query
required: false
description: |
Filter results by loyalty transaction type:
- `manual`: Loyalty transaction that was done manually.
- `session`: Loyalty transaction that resulted from a customer session.
- `import`: Loyalty transaction that was imported from a CSV file.
example: manual
schema:
type: string
enum:
- manual
- session
- import
- name: startDate
in: query
required: false
description: |
Date and time from which results are returned. Results are filtered by
transaction creation date.
> [!note] **Note**
> - This must be an RFC3339 timestamp string.
> - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
> considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: endDate
in: query
required: false
description: |
Date and time by which results are returned. Results are filtered by
transaction creation date.
> [!note] **Note**
> - This must be an RFC3339 timestamp string.
> - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
> considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: customerSessionIDs
in: query
required: false
description: |
Filter the results by a list of customer session IDs.
To include multiple IDs, repeat the parameter for each one, for example,
`?customerSessionIDs=id1&customerSessionIDs=id2`.
The response contains only data associated with the specified sessions.
example:
- session_integration_id_1
- session_integration_id_1
schema:
type: array
items:
type: string
- name: transactionUUIDs
in: query
required: false
description: |
Filter the results by a list of transaction UUIDs.
To include multiple IDs, repeat the parameter for each one, for example,
`?transactionUUIDs=uuid1&transactionUUIDs=uuid2`.
The response contains only data associated with the specified transactions.
example:
- dc608634-0100-40d9-b371-e964476bbe0f
- 9e829590-05cf-407b-b4c0-5f28468a81e1
schema:
type: array
items:
type: string
- name: pageSize
in: query
required: false
description: The number of items in the response.
example: 50
schema:
type: integer
minimum: 1
maximum: 1000
default: 50
- $ref: '#/components/parameters/skip'
- name: awaitsActivation
in: query
required: false
description: |
If `true`: Filters results to include only point transactions that have action-based activation and have not expired.
If `false`: Returns a `400` response.
example: true
schema:
type: boolean
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- hasMore
- data
properties:
hasMore:
type: boolean
example: true
data:
type: array
items:
$ref: '#/components/schemas/CardLedgerTransactionLogEntryIntegrationAPI'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/transactions:
get:
operationId: getLoyaltyProgramProfileTransactions
summary: List customer's loyalty transactions
description: |
Retrieve paginated results of loyalty transaction logs for the given
Integration ID in the specified loyalty program.
You can filter transactions by date. If no filters are applied, the last 50
loyalty transactions for the given integration ID are returned.
> [!note] To retrieve all loyalty program transaction logs in a given
> loyalty program, use the [List loyalty program transactions](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyProgramTransactions)
> endpoint.
security:
- api_key_v1: []
tags:
- Loyalty
parameters:
- name: loyaltyProgramId
in: path
required: true
description: |
Identifier of the profile-based loyalty program. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
schema:
type: integer
- in: path
required: true
name: integrationId
description: |
The integration identifier for this customer profile. Must be:
- Unique within the deployment.
- Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.
Once set, you cannot update this identifier.
example: customer1
schema:
type: string
- name: customerSessionIDs
in: query
required: false
description: |
Filter the results by a list of customer session IDs.
To include multiple IDs, repeat the parameter for each one, for example,
`?customerSessionIDs=id1&customerSessionIDs=id2`.
The response contains only data associated with the specified sessions.
example:
- session_integration_id_1
- session_integration_id_1
schema:
type: array
items:
type: string
- name: transactionUUIDs
in: query
required: false
description: |
Filter the results by a list of transaction UUIDs.
To include multiple IDs, repeat the parameter for each one, for example,
`?transactionUUIDs=uuid1&transactionUUIDs=uuid2`.
The response contains only data associated with the specified transactions.
example:
- dc608634-0100-40d9-b371-e964476bbe0f
- 9e829590-05cf-407b-b4c0-5f28468a81e1
schema:
type: array
items:
type: string
- name: subledgerId
in: query
required: false
description: The ID of the subledger by which we filter the data.
example: subledger1
schema:
type: string
- name: loyaltyTransactionType
in: query
required: false
description: |
Filter results by loyalty transaction type:
- `manual`: Loyalty transaction that was done manually.
- `session`: Loyalty transaction that resulted from a customer session.
- `import`: Loyalty transaction that was imported from a CSV file.
example: manual
schema:
type: string
enum:
- manual
- session
- import
- name: startDate
in: query
required: false
description: |
Date and time from which results are returned. Results are filtered by
transaction creation date.
> [!note] **Note**
> - This must be an RFC3339 timestamp string.
> - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
> considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: endDate
in: query
required: false
description: |
Date and time by which results are returned. Results are filtered by
transaction creation date.
> [!note] **Note**
> - This must be an RFC3339 timestamp string.
> - You can include a time component in your string, for example, `T23:59:59` to specify the end of the day. The time zone setting
> considered is `UTC`. If you do not include a time component, a default time value of `T00:00:00` (midnight) in `UTC` is considered.
example: 2024-05-29T15:04:05+07:00
schema:
type: string
format: date-time
- name: pageSize
in: query
required: false
description: The number of items in the response.
example: 50
schema:
type: integer
minimum: 1
maximum: 1000
default: 50
- $ref: '#/components/parameters/skip'
- name: awaitsActivation
in: query
required: false
description: |
If `true`: Filters results to include only point transactions that have action-based activation and have not expired.
If `false`: Returns a `400` response.
example: true
schema:
type: boolean
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- hasMore
- data
properties:
hasMore:
type: boolean
example: true
data:
type: array
items:
$ref: '#/components/schemas/LedgerTransactionLogEntryIntegrationAPI'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/delete_transactions:
post:
operationId: deleteLoyaltyTransactionsFromLedgers
summary: Delete customer's transactions from loyalty ledgers
description: |
Delete a customer's transactions in all loyalty ledgers or a specified ledger.
> [!note] To retrieve loyalty transaction logs for a specific customer in a given loyalty program,
> use the [List customer's loyalty transactions](https://docs.talon.one/integration-api#tag/Loyalty/operation/getLoyaltyProgramProfileTransactions)
> endpoint.
security:
- api_key_v1: []
tags:
- Loyalty
parameters:
- name: loyaltyProgramId
in: path
required: true
description: |
Identifier of the profile-based loyalty program. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
schema:
type: integer
- name: integrationId
in: path
required: true
description: |
The integration ID of the customer profile. You can get the `integrationId` of a profile using:
- A customer session integration ID with the [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2) endpoint.
- The Management API with the [List application's customers](https://docs.talon.one/management-api#tag/Customer-data/operation/getApplicationCustomers) endpoint.
example: customer1
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteLoyaltyTransactionsRequest'
responses:
'204':
description: No Content
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/cards/{loyaltyCardId}/points:
get:
operationId: getLoyaltyCardPoints
summary: List card's unused loyalty points
description: |
Get paginated results of loyalty points for a given loyalty card identifier in a card-based loyalty program. This endpoint returns only the balances of unused points on a loyalty card.
You can filter points by status:
- `active`: Points ready to be redeemed.
- `pending`: Points with a start date in the future.
- `expired`: Points with an expiration date in the past.
security:
- api_key_v1: []
tags:
- Loyalty cards
parameters:
- name: loyaltyProgramId
in: path
description: |
Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
required: true
schema:
type: integer
- name: loyaltyCardId
in: path
description: |
Identifier of the loyalty card. You can get the identifier with
the [List loyalty
cards](https://docs.talon.one/management-api#tag/Loyalty-cards/operation/getLoyaltyCards)
endpoint.
**Important**: The loyalty card ID requires [URL
encoding](https://www.w3schools.com/tags//ref_urlencode.asp) if it
contains special characters. For example, you must encode `NewCard2026%`
as `NewCard2026%25`.
example: summer-loyalty-card-0543
required: true
schema:
type: string
minLength: 4
maxLength: 108
- name: status
in: query
required: false
description: Filter points based on their status.
example: active
schema:
type: string
enum:
- active
- pending
- expired
default: active
- name: subledgerId
in: query
required: false
description: Filter results by one or more subledger IDs. Must be exact match.
example:
- subledger1
- subledger2
style: form
explode: true
schema:
type: array
items:
type: string
- name: customerSessionIDs
in: query
required: false
description: |
Filter the results by a list of customer session IDs.
To include multiple IDs, repeat the parameter for each one, for example,
`?customerSessionIDs=id1&customerSessionIDs=id2`.
The response contains only data associated with the specified sessions.
example:
- session_integration_id_1
- session_integration_id_1
schema:
type: array
items:
type: string
- name: transactionUUIDs
in: query
required: false
description: |
Filter the results by a list of transaction UUIDs.
To include multiple IDs, repeat the parameter for each one, for example,
`?transactionUUIDs=uuid1&transactionUUIDs=uuid2`.
The response contains only data associated with the specified transactions.
example:
- dc608634-0100-40d9-b371-e964476bbe0f
- 9e829590-05cf-407b-b4c0-5f28468a81e1
schema:
type: array
items:
type: string
- name: pageSize
in: query
required: false
description: The number of items in the response.
example: 50
schema:
type: integer
minimum: 1
maximum: 1000
default: 50
- $ref: '#/components/parameters/skip'
- name: sort
in: query
required: false
description: |
The field by which results should be sorted. You can enter one of the following values:
- `startDate`: Sorts the results by the start date of the points.
- `expiryDate`: Sorts the results by the expiry date of the points.
By default, results are sorted in ascending order.
To sort them in descending order, prefix the field name with `-`.
**Note:** You can only sort by one field at a time.
example: startDate
schema:
type: string
enum:
- startDate
- expiryDate
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- hasMore
- data
properties:
hasMore:
type: boolean
example: true
data:
type: array
items:
$ref: '#/components/schemas/CardLedgerPointsEntryIntegrationAPI'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/profile/{integrationId}/points:
get:
operationId: getLoyaltyProgramProfilePoints
summary: List customer's unused loyalty points
description: |
Get paginated results of loyalty points for a given Integration ID in the specified profile-based loyalty program. This endpoint returns only the balances of unused points linked to a customer profile.
You can filter points by status:
- `active`: Points ready to be redeemed.
- `pending`: Points with a start date in the future.
- `expired`: Points with an expiration date in the past.
security:
- api_key_v1: []
tags:
- Loyalty
parameters:
- name: loyaltyProgramId
in: path
required: true
description: |
Identifier of the profile-based loyalty program. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
schema:
type: integer
- in: path
required: true
name: integrationId
description: |
The integration identifier for this customer profile. Must be:
- Unique within the deployment.
- Stable for the customer. Do not use an ID that the customer can update themselves. For example, you can use a database ID.
Once set, you cannot update this identifier.
example: customer1
schema:
type: string
- name: status
in: query
required: false
description: Filter points based on their status.
example: active
schema:
type: string
enum:
- active
- pending
- expired
default: active
- name: subledgerId
in: query
required: false
description: The ID of the subledger by which we filter the data.
example: subledger1
schema:
type: string
- name: customerSessionIDs
in: query
required: false
description: |
Filter the results by a list of customer session IDs.
To include multiple IDs, repeat the parameter for each one, for example,
`?customerSessionIDs=id1&customerSessionIDs=id2`.
The response contains only data associated with the specified sessions.
example:
- session_integration_id_1
- session_integration_id_1
schema:
type: array
items:
type: string
- name: transactionUUIDs
in: query
required: false
description: |
Filter the results by a list of transaction UUIDs.
To include multiple IDs, repeat the parameter for each one, for example,
`?transactionUUIDs=uuid1&transactionUUIDs=uuid2`.
The response contains only data associated with the specified transactions.
example:
- dc608634-0100-40d9-b371-e964476bbe0f
- 9e829590-05cf-407b-b4c0-5f28468a81e1
schema:
type: array
items:
type: string
- name: pageSize
in: query
required: false
description: The number of items in the response.
example: 50
schema:
type: integer
minimum: 1
maximum: 1000
default: 50
- $ref: '#/components/parameters/skip'
- name: sort
in: query
required: false
description: |
The field by which results should be sorted. You can enter one of the following values:
- `startDate`: Sorts the results by the start date of the points.
- `expiryDate`: Sorts the results by the expiry date of the points.
By default, results are sorted in ascending order.
To sort them in descending order, prefix the field name with `-`.
**Note:** You can only sort by one field at a time.
example: startDate
schema:
type: string
enum:
- startDate
- expiryDate
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- hasMore
- data
properties:
hasMore:
type: boolean
example: true
data:
type: array
items:
$ref: '#/components/schemas/LedgerPointsEntryIntegrationAPI'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/activate_points:
post:
operationId: activateLoyaltyPoints
summary: Activate loyalty points
description: |
Activate points when a defined action occurs.
You can activate pending points using one of the following parameters:
- `sessionId`: Activates all points earned in the specified session.
- `transactionUUIDs`: Activates points earned in the transactions specified by the
given UUIDs.
tags:
- Loyalty
security:
- api_key_v1: []
parameters:
- name: loyaltyProgramId
in: path
description: |
The identifier for the loyalty program. You can get the ID with the [List loyalty
programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms)
endpoint.
example: 33
required: true
schema:
type: integer
requestBody:
$ref: '#/components/requestBodies/ActivateLoyaltyPoints'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ActivateLoyaltyPointsResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/loyalty_programs/{loyaltyProgramId}/cards:
post:
operationId: generateLoyaltyCard
summary: Generate loyalty card
description: |
Generate a loyalty card in a specified [card-based loyalty
program](https://docs.talon.one/docs/product/loyalty-programs/card-based/card-based-overview).
To link the card to one or more customer profiles, use the
`customerProfileIds` parameter in the request body.
> [!note] **Note**
> - The number of customer profiles linked to the loyalty card cannot exceed
> the loyalty program's `usersPerCardLimit`. To find the program's limit, use
> the [Get loyalty program](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyProgram)
> endpoint.
> - If the loyalty program has a defined code format, it will be used for the
> loyalty card identifier.
security:
- api_key_v1: []
tags:
- Loyalty cards
parameters:
- name: loyaltyProgramId
in: path
description: |
Identifier of the card-based loyalty program containing the loyalty card. You can get the ID with
the [List loyalty programs](https://docs.talon.one/management-api#tag/Loyalty/operation/getLoyaltyPrograms) endpoint.
example: 33
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GenerateLoyaltyCard'
description: body
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LoyaltyCard'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
/v1/best_prior_price:
post:
operationId: bestPriorPrice
summary: Fetch best prior price
x-scalar-stability: experimental
description: |
Returns the best prior price based on historical pricing data for the specified SKUs within a defined timeframe.
tags:
- Catalogs
requestBody:
$ref: '#/components/requestBodies/BestPriorPrice'
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/BestPriorPriceResponse'
/v1/catalogs/{catalogId}/sync:
put:
operationId: syncCatalog
summary: Sync cart item catalog
description: |
Perform the following actions for a given cart item catalog:
- Add an item to the catalog.
- Add multiple items to the catalog.
- Update the attributes of an item in the catalog.
- Update the attributes of multiple items in the catalog.
- Remove an item from the catalog.
- Remove multiple items from the catalog.
You can either add, update, or delete up to 1000 cart items in a single
request. Each item synced to a catalog must have a unique `SKU`.
> [!important] You can perform only one type of action in a single sync
request. Syncing items with duplicate `SKU` values in a single request
returns an error message with a `400` status code.
For more information, read [managing cart item
catalogs](https://docs.talon.one/docs/product/account/dev-tools/managing-cart-item-catalogs).
### Filtering cart items
Use [cart item attributes](https://docs.talon.one/docs/product/account/dev-tools/managing-attributes)
to filter items and select the ones you want to edit or delete when editing
or deleting more than one item at a time.
The `filters` array contains an object with the following properties:
- `attr`: A [cart item attribute](https://docs.talon.one/docs/product/account/dev-tools/managing-attributes)
connected to the catalog. It is applied to all items in the catalog.
- `op`: The filtering operator indicating the relationship between the value
of each cart item in the catalog and the value of the `value` property for the attribute selected
in `attr`.
The value of `op` can be one of the following:
- `EQ`: Equal to `value`
- `LT`: Less than `value`
- `LE`: Less than or equal to `value`
- `GT`: Greater than `value`
- `GE`: Greater than or equal to `value`
- `IN`: One of the comma-separated values that `value` is set to.
**Note:** `GE`, `LE`, `GT`, `LT` are for numeric values only.
- `value`: The value of the attribute selected in `attr`.
### Payload examples
Synchronization actions are sent as `PUT` requests. See the structure for
each action:
Adding an item to the catalog
```json
{
"actions": [
{
"payload": {
"attributes": {
"color": "Navy blue",
"type": "shoes"
},
"replaceIfExists": true,
"sku": "SKU1241028",
"price": 100,
"product": {
"name": "sneakers"
}
},
"type": "ADD"
}
]
}
```
Adding multiple items to the catalog
```json
{
"actions": [
{
"payload": {
"attributes": {
"color": "Navy blue",
"type": "shoes"
},
"replaceIfExists": true,
"sku": "SKU1241027",
"price": 100,
"product": {
"name": "sneakers"
}
},
"type": "ADD"
},
{
"payload": {
"attributes": {
"color": "Navy blue",
"type": "shoes"
},
"replaceIfExists": true,
"sku": "SKU1241028",
"price": 100,
"product": {
"name": "sneakers"
}
},
"type": "ADD"
}
]
}
```
Updating the attributes of an item in the catalog
```json
{
"actions": [
{
"payload": {
"attributes": {
"age": 11,
"origin": "germany"
},
"createIfNotExists": false,
"sku": "SKU1241028",
"product": {
"name": "sneakers"
}
},
"type": "PATCH"
}
]
}
```
Updating the attributes of multiple items in the catalog
```json
{
"actions": [
{
"payload": {
"attributes": {
"color": "red"
},
"filters": [
{
"attr": "color",
"op": "EQ",
"value": "blue"
}
]
},
"type": "PATCH_MANY"
}
]
}
```
Removing an item from the catalog
```json
{
"actions": [
{
"payload": {
"sku": "SKU1241028"
},
"type": "REMOVE"
}
]
}
```
Removing multiple items from the catalog
```json
{
"actions": [
{
"payload": {
"filters": [
{
"attr": "color",
"op": "EQ",
"value": "blue"
}
]
},
"type": "REMOVE_MANY"
}
]
}
```
Removing shoes of sizes above 45 from the catalog
Let's imagine that we have a shoe store and we have decided to stop selling
shoes larger than size 45. We can remove from the catalog all the shoes of sizes above 45
with a single action:
```json
{
"actions": [
{
"payload": {
"filters": [
{
"attr": "size",
"op": "GT",
"value": "45"
}
]
},
"type": "REMOVE_MANY"
}
]
}
```
tags:
- Catalogs
security:
- api_key_v1: []
parameters:
- name: catalogId
description: The ID of the catalog. You can find the ID in the Campaign Manager in **Account** > **Tools** > **Cart item catalogs**.
example: 30
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CatalogSyncRequest'
description: body
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Catalog'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized - Invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseWithStatus'
webhooks: {}
components:
securitySchemes:
api_key_v1:
type: apiKey
name: Authorization
in: header
description: |
To authenticate with the Integration API, generate an API key in the Campaign Manager
and prefix it with `ApiKey-v1`.
To generate an API key:
1. Sign in to the Campaign Manager and open the Application of your choice, or create one.
1. Click **Settings** > **Integration API Keys**.
1. Click **Create API Key** and give it a name and an expiration date, then click **Create API Key**.
**Tip**: Avoid choosing expiration dates that fall at the end of
the year or during other high-traffic periods.
You can now use the API key in the HTTP header, prefixing it with `ApiKey-v1`:
```
Authorization: ApiKey-v1 dbc644d33aa74d582bd9479c59e16f970fe13bf3
```
Or use it inside [an SDK](https://docs.talon.one/docs/dev/sdks/overview), for example, with the JAVA SDK:
```
iApi.getApiClient().setApiKeyPrefix("ApiKey-v1");
iApi.getApiClient().setApiKey("dbc644d33aa74d582bd9479c59e16f970fe13bf3");
```
schemas:
Entity:
type: object
required:
- id
- created
properties:
id:
type: integer
description: The internal ID of this entity.
example: 6
created:
type: string
format: date-time
description: The time this entity was created.
example: 2020-06-10T09:05:27.993483Z
IntegrationEntity:
type: object
required:
- integrationId
- created
properties:
integrationId:
type: string
format: string
example: URNGV8294NV
maxLength: 1000
description: The integration ID set by your integration layer.
created:
type: string
format: date-time
description: The time this entity was created.
example: 2020-02-07T08:15:22Z
ApplicationEntity:
type: object
required:
- applicationId
properties:
applicationId:
type: integer
description: The ID of the Application that owns this entity.
example: 322
IntegrationProfileEntity:
type: object
properties:
profileId:
type: string
description: |
ID of the customer profile set by your integration layer.
**Note:** If the customer does not yet have a known `profileId`, we recommend you use a guest `profileId`.
example: URNGV8294NV
IntegrationStoreEntity:
type: object
properties:
storeIntegrationId:
type: string
minLength: 1
maxLength: 1000
description: The integration ID of the store. You choose this ID when you create a store.
example: STORE-001
EvaluableCampaignIds:
type: object
properties:
evaluableCampaignIds:
type: array
items:
type: integer
description: |
When using the `dry` query parameter, use this property to list the campaign to be evaluated by the Rule Engine.
These campaigns will be evaluated, even if they are disabled, allowing you to test specific campaigns before activating them.
title: Campaigns to evaluate
example:
- 10
- 12
Product:
type: object
description: The specific properties of the product this item belongs to, if available.
required:
- name
properties:
name:
type: string
description: The product the item belongs to.
example: sample_product
AdditionalCost:
type: object
required:
- price
properties:
price:
title: Price of additional cost
type: number
example: 4.5
PriceDetail:
type: object
properties:
price:
type: number
format: float
description: The value of this price type.
example: 90
adjustmentContextId:
type: string
description: The context identifier of the selected price adjustment.
example: summer25
adjustmentReferenceId:
type: string
format: uuid
description: The reference identifier of the selected price adjustment for this SKU.
example: 68851723-e6fa-488f-ace9-112581e6c19b
adjustmentEffectiveFrom:
type: string
format: date-time
description: The date and time from which the price adjustment is effective.
example: 2025-05-25T00:00:00Z
adjustmentEffectiveUntil:
type: string
format: date-time
description: The date and time until which the price adjustment is effective.
example: 2025-05-30T00:00:00Z
CartItem:
type: object
required:
- sku
- quantity
properties:
name:
title: Name of item
type: string
description: Name of item.
example: Air Glide
sku:
title: SKU of item
type: string
description: Stock keeping unit of item.
minLength: 1
example: SKU1241028
quantity:
title: Quantity of item
type: integer
description: |
Number of units of this item. Due to [cart item flattening](https://docs.talon.one/docs/product/rules/understanding-cart-item-flattening),
if you provide a quantity greater than 1, the item will be split in as many items as the provided quantity.
This will impact the number of **per-item** effects triggered from your campaigns.
minimum: 1
example: 1
returnedQuantity:
title: Returned quantity of item
type: integer
readOnly: true
description: Number of returned items, calculated internally based on returns of this item.
example: 1
remainingQuantity:
title: Remaining quantity of item
type: integer
readOnly: true
description: Remaining quantity of the item, calculated internally based on returns of this item.
example: 1
price:
title: Price of item
type: number
description: |
Price of the item in the currency defined by your Application. This field is required if this item is not part of a [catalog](https://docs.talon.one/docs/product/account/dev-tools/managing-cart-item-catalogs). If it is part of a catalog, setting a price here overrides the price from the catalog.
example: 99.99
category:
title: Item category
type: string
description: Type, group or model of the item.
example: shoes
product:
$ref: '#/components/schemas/Product'
title: Item product
weight:
title: Weight of item
type: number
description: Weight of item in grams.
example: 1130
height:
title: Height of item
type: number
description: Height of item in mm.
width:
title: Width of item
type: number
description: Width of item in mm.
length:
title: Length of item
type: number
description: Length of item in mm.
position:
title: Position of Cart Item
type: number
readOnly: true
description: Position of the Cart Item in the Cart (calculated internally).
attributes:
title: Item attributes
type: object
description: |
Use this property to set a value for the attributes of your choice. [Attributes](https://docs.talon.one/docs/dev/concepts/attributes) represent any information to attach to this cart item.
Custom _cart item_ attributes must be created in the Campaign Manager before you set them with this property.
**Note:** Any previously defined attributes that you do not include in the array will be removed.
example:
image: 11.jpeg
material: leather
additionalCosts:
type: object
description: |
Use this property to set a value for the additional costs of this item, such as a shipping cost. They must be created in the Campaign Manager
before you set them with this property. See [Managing additional costs](https://docs.talon.one/docs/product/account/dev-tools/managing-additional-costs).
additionalProperties:
$ref: '#/components/schemas/AdditionalCost'
example:
shipping:
price: 9
catalogItemID:
title: The catalog item ID
type: integer
readOnly: true
description: The catalog item ID.
selectedPriceType:
title: Price Type
type: string
readOnly: true
description: The selected price type for this cart item (e.g. the price for members only).
example: member
adjustmentReferenceId:
title: Price Adjustment ID
type: string
format: uuid
readOnly: true
description: The reference ID of the selected price adjustment for this cart item. Only returned if the selected price resulted from a price adjustment.
example: 68851723-e6fa-488f-ace9-112581e6c19b
adjustmentEffectiveFrom:
title: Price Adjustment Start Date
type: string
format: date-time
readOnly: true
description: The date and time from which the price adjustment is effective. Only returned if the selected price resulted from a price adjustment that contains this field.
example: 2021-09-12T10:12:42Z
adjustmentEffectiveUntil:
title: Price Adjustment Expiry Date
type: string
format: date-time
readOnly: true
description: The date and time until which the price adjustment is effective. Only returned if the selected price resulted from a price adjustment that contains this field.
example: 2021-09-12T10:12:42Z
prices:
readOnly: true
type: object
description: |
A map of keys and values representing the price types and related price adjustment details for this cart item.
The keys correspond to the `priceType` names.
additionalProperties:
$ref: '#/components/schemas/PriceDetail'
example:
member:
price: 90
adjustmentReferenceId: 68851723-e6fa-488f-ace9-112581e6c19b
effectiveFrom: 2025-05-25T00:00:00Z
effectiveUntil: 2025-05-30T00:00:00Z
base:
price: 100
ExperimentVariantAllocation:
type: object
required:
- experimentID
- variantID
properties:
experimentID:
description: The ID of the experiment.
type: integer
example: 1
variantID:
description: The ID of the variant to be allocated.
type: integer
example: 2
NewCustomerSessionV2:
description: The representation of the customer session.
allOf:
- $ref: '#/components/schemas/IntegrationProfileEntity'
- $ref: '#/components/schemas/IntegrationStoreEntity'
- $ref: '#/components/schemas/EvaluableCampaignIds'
- type: object
properties:
couponCodes:
type: array
items:
type: string
maxLength: 100
description: |
Any coupon codes entered.
**Important - for requests only**:
- If you [create a coupon budget](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-budgets/#budget-types) for your campaign, ensure the session contains a coupon code by the time you close it.
- In requests where `dry=false`, providing an empty array discards any previous coupons. To avoid this, omit the parameter entirely.
title: Coupons entered in session
example:
- XMAS-20-2021
referralCode:
type: string
description: |
Any referral code entered.
**Important - for requests only**:
- If you [create a referral budget](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-budgets/#budget-types) for your campaign, ensure the session contains a referral code by the time you close it.
- In requests where `dry=false`, providing an empty value discards the previous referral code. To avoid this, omit the parameter entirely.
title: Referral code entered in session
maxLength: 100
example: NT2K54D9
loyaltyCards:
type: array
maxItems: 1
items:
type: string
description: Identifier of a loyalty card.
example:
- loyalty-card-1
state:
type: string
enum:
- open
- closed
- partially_returned
- cancelled
default: open
example: open
description: |
Indicates the current state of the session. Sessions can be created as `open` or `closed`. The state transitions are:
1. `open` → `closed`
2. `open` → `cancelled`
3. Either:
- `closed` → `cancelled` (**only** via [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)) or
- `closed` → `partially_returned` (**only** via [Return cart items](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/returnCartItems))
- `closed` → `open` (**only** via [Reopen customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/reopenCustomerSession))
4. `partially_returned` → `cancelled`
For more information, see [Customer session states](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions).
title: Customer's session state
cartItems:
type: array
description: |
The items to add to this session. **Do not exceed 1000 items** and ensure the sum of all cart item's `quantity` **does not exceed 10.000** per request.
title: Customer session's cart items
items:
$ref: '#/components/schemas/CartItem'
experimentVariantAllocations:
type: array
description: |
The experiment variant allocations to add to this session.
title: Experiment variant allocations
items:
$ref: '#/components/schemas/ExperimentVariantAllocation'
additionalCosts:
type: object
description: |
Use this property to set a value for the additional costs of this session, such as a shipping cost.
They must be created in the Campaign Manager
before you set them with this property. See [Managing additional costs](https://docs.talon.one/docs/product/account/dev-tools/managing-additional-costs).
additionalProperties:
$ref: '#/components/schemas/AdditionalCost'
example:
shipping:
price: 9
identifiers:
type: array
maxItems: 5
items:
type: string
title: Session identifiers
description: |
Session custom identifiers that you can set limits on or use inside your rules.
For example, you can use IP addresses as identifiers to potentially identify devices
and limit discounts abuse in case of customers creating multiple accounts.
See the [tutorial](https://docs.talon.one/docs/dev/tutorials/using-identifiers).
**Important**: Ensure the session contains an identifier by the time you close it if:
- You [create a unique identifier budget](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-budgets/#budget-types)
for your campaign.
- Your campaign has [coupons](https://docs.talon.one/docs/product/campaigns/coupons/coupon-page-overview).
- We recommend passing an anonymized (hashed) version of the identifier value.
example:
- d41306257915f83fe01e54092ae470f631161ea16fcf4415842eed41470386ea
attributes:
type: object
additionalProperties: true
description: |
Use this property to set a value for the attributes of your choice. Attributes represent any information to attach to your session, like the shipping city.
You can use [built-in attributes](https://docs.talon.one/docs/dev/concepts/attributes#built-in-attributes) or [custom ones](https://docs.talon.one/docs/dev/concepts/attributes#custom-attributes).
Custom attributes must be created in the Campaign Manager before you set them with this property.
example:
ShippingCity: Berlin
CustomerSessionV2:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/IntegrationEntity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/NewCustomerSessionV2'
- type: object
properties:
firstSession:
type: boolean
description: Indicates whether this is the first session for the customer's profile. It's always `true` for anonymous sessions.
title: First session ever?
example: true
updateCount:
type: integer
description: The number of times the session was updated. When the session is created, this value is initialized to `1`.
title: Update count
example: 3
total:
type: number
title: Session Total
description: The total value of cart items and additional costs in the session, before any discounts are applied.
example: 119.99
cartItemTotal:
type: number
title: Cart Items Total
description: The total value of cart items, before any discounts are applied.
example: 99.99
additionalCostTotal:
type: number
title: Additional Costs Total
description: The total value of additional costs, before any discounts are applied.
example: 20
updated:
type: string
format: date-time
description: Timestamp of the most recent event received on this session.
title: Last activity on the session
example: 2020-02-08T14:15:22Z
required:
- profileId
- firstSession
- updateCount
- coupon
- referral
- state
- cartItems
- integrationId
- applicationId
- attributes
- total
- cartItemTotal
- additionalCostTotal
- updated
EffectEntity:
type: object
description: Definition of all properties that are present on all effects, independent of their type.
required:
- campaignId
- rulesetId
- ruleIndex
- ruleName
- effectType
properties:
experimentId:
type: integer
description: The ID of the experiment that campaign belongs to.
example: 12
campaignId:
type: integer
description: The ID of the campaign that triggered this effect.
example: 244
rulesetId:
type: integer
description: The ID of the ruleset that was active in the campaign when this effect was triggered.
example: 73
ruleIndex:
type: integer
description: The position of the rule that triggered this effect within the ruleset.
example: 2
ruleName:
type: string
description: The name of the rule that triggered this effect.
example: Give 20% discount
effectType:
type: string
description: The type of effect that was triggered. See [API effects](https://docs.talon.one/docs/dev/integration-api/api-effects).
example: rejectCoupon
triggeredByCoupon:
type: integer
example: 4928
description: The ID of the coupon that was being evaluated when this effect was triggered.
triggeredForCatalogItem:
type: integer
example: 786
description: The ID of the catalog item that was being evaluated when this effect was triggered.
conditionIndex:
type: integer
example: 786
description: The index of the condition that was triggered.
evaluationGroupID:
type: integer
example: 3
description: The ID of the evaluation group. For more information, see [Managing campaign evaluation](https://docs.talon.one/docs/product/applications/managing-campaign-evaluation).
evaluationGroupMode:
type: string
example: stackable
description: The evaluation mode of the evaluation group. For more information, see [Managing campaign evaluation](https://docs.talon.one/docs/product/applications/managing-campaign-evaluation).
campaignRevisionId:
type: integer
example: 1
description: The revision ID of the campaign that was used when triggering the effect.
campaignRevisionVersionId:
type: integer
example: 5
description: The revision version ID of the campaign that was used when triggering the effect.
selectedPriceType:
type: string
example: member
description: The selected price type for the SKU targeted by this effect.
selectedPrice:
type: number
example: 100
description: The value of the selected price type to apply to the SKU targeted by this effect, before any discounts are applied.
adjustmentReferenceId:
type: string
format: uuid
example: 68851723-e6fa-488f-ace9-112581e6c19b
description: The reference identifier of the selected price adjustment for this SKU. This is only returned if the `selectedPrice` resulted from a price adjustment.
AcceptCouponEffectProps:
type: object
description: The properties specific to the "acceptCoupon" effect. This gets triggered whenever the coupon is valid and all other conditions in the rules of its campaign are met.
required:
- value
properties:
value:
type: string
description: The coupon code that was accepted.
AcceptReferralEffectProps:
type: object
description: The properties specific to the "acceptReferral" effect. TThis gets triggered whenever the referral code is valid and all other conditions in the rules of its campaign are met.
required:
- value
properties:
value:
type: string
description: The referral code that was accepted.
RedeemReferralEffectProps:
type: object
description: |
This effect is **deprecated**. The properties specific to the "redeemReferral" effect.
This gets triggered whenever the referral code is valid, and a rule was triggered that contains a "redeem referral" effect.
required:
- id
- value
properties:
id:
type: integer
description: The id of the referral code that was redeemed.
value:
type: string
description: The referral code that was redeemed.
RejectCouponEffectProps:
type: object
description: The properties specific to the "rejectCoupon" effect. This gets triggered whenever the coupon was rejected. See rejectionReason for more info on why.
required:
- value
- rejectionReason
properties:
value:
type: string
description: The coupon code that was rejected.
rejectionReason:
type: string
description: The reason why this coupon was rejected.
conditionIndex:
type: integer
description: The index of the condition that caused the rejection of the coupon.
effectIndex:
type: integer
description: The index of the effect that caused the rejection of the coupon.
details:
type: string
description: More details about the failure.
campaignExclusionReason:
type: string
example: CampaignGaveLowerDiscount
description: The reason why the campaign was not applied.
RejectReferralEffectProps:
type: object
description: The properties specific to the "rejectReferral" effect. This gets triggered whenever the referral code was rejected. See rejectionReason for more info on why.
required:
- value
- rejectionReason
properties:
value:
type: string
description: The referral code that was rejected.
rejectionReason:
type: string
description: The reason why this referral code was rejected.
conditionIndex:
type: integer
description: The index of the condition that caused the rejection of the referral.
effectIndex:
type: integer
description: The index of the effect that caused the rejection of the referral.
details:
type: string
description: More details about the failure.
campaignExclusionReason:
type: string
example: CampaignGaveLowerDiscount
description: The reason why the campaign was not applied.
CouponCreatedEffectProps:
type: object
description: The properties specific to the "couponCreated" effect. This gets triggered whenever a validated rule contained a "create coupon" effect, and a coupon was created for a customer. See "createdCoupons" on the response for all details of this coupon.
required:
- value
- profileId
properties:
value:
type: string
description: The coupon code that was created.
profileId:
type: string
description: The integration identifier of the customer for whom this coupon was created.
ReferralCreatedEffectProps:
type: object
description: The properties specific to the "referralCreated" effect. This gets triggered whenever a validated rule contained a "create referral" effect, and a referral code was created for a customer. See "createdReferrals" on the response for all details of this referral code.
required:
- value
properties:
value:
type: string
description: The referral code that was created.
SetDiscountEffectProps:
type: object
description: The properties specific to the "setDiscount" effect. This gets triggered whenever a validated rule contained a "set discount" effect. This is a discount that should be applied on the scope of defined with it.
required:
- name
- value
properties:
name:
type: string
description: The name / description of this discount
value:
type: number
description: The total monetary value of the discount.
scope:
type: string
description: The scope which the discount was applied on, can be one of (cartItems,additionalCosts,sessionTotal).
desiredValue:
type: number
description: The original value of the discount.
SetDiscountPerItemEffectProps:
type: object
description: |
The properties specific to the `setDiscountPerItem` effect, triggered whenever a validated rule contained a
"set per item discount" effect.
This is a discount that will be applied either on a specific item, on a specific item + additional cost or on all additional costs per item.
This depends on the chosen scope.
required:
- name
- value
- position
properties:
name:
type: string
description: |
The name of the discount. Contains a hashtag character indicating the index of the position of the item the discount applies
to. It is identical to the value of the `position` property.
value:
type: number
description: The total monetary value of the discount.
position:
type: number
description: The index of the item in the cart items list on which this discount should be applied.
subPosition:
type: number
description: |
For cart items with `quantity` > 1, the sub position indicates which item the discount applies to.
desiredValue:
type: number
description: The original value of the discount.
scope:
type: string
description: |
The scope of the discount:
- `additionalCosts`: The discount applies to all the additional costs of the item.
- `itemTotal`: The discount applies to the price of the item + the additional costs of the item.
- `price`: The discount applies to the price of the item.
totalDiscount:
type: number
description: The total discount given if this effect is a result of a prorated discount.
desiredTotalDiscount:
type: number
description: The original total discount to give if this effect is a result of a prorated discount.
bundleIndex:
type: integer
description: The position of the bundle in a list of item bundles created from the same bundle definition.
bundleName:
type: string
description: The name of the bundle definition.
targetedItemPosition:
type: number
description: The index of the targeted bundle item on which the applied discount is based.
targetedItemSubPosition:
type: number
description: |
The sub-position of the targeted bundle item on which the applied discount is based.
excludedFromPriceHistory:
type: boolean
description: When set to `true`, the applied discount is excluded from the item's price history.
SetDiscountPerAdditionalCostEffectProps:
type: object
description: The properties specific to the "setDiscountPerAdditionalCost" effect. This gets triggered whenever a validated rule contained a "set per additional cost discount" effect. This is a discount that should be applied on a specific additional cost.
required:
- name
- value
- additionalCostId
- additionalCost
properties:
name:
type: string
description: The name / description of this discount
additionalCostId:
type: integer
description: The ID of the additional cost.
additionalCost:
type: string
description: The name of the additional cost.
value:
type: number
description: The total monetary value of the discount.
desiredValue:
type: number
description: The original value of the discount.
TriggerWebhookEffectProps:
type: object
description: The properties specific to the "triggerWebhook" effect. This gets triggered whenever a validated rule contained a "trigger webhook" effect. This is communicated as an FYI and should usually not require action on your side.
required:
- webhookId
- webhookName
properties:
webhookId:
type: number
description: The ID of the webhook that was triggered.
webhookName:
type: string
description: The name of the webhook that was triggered.
LoyaltyCardIdentifier:
type: string
description: |
The identifier of the loyalty card, which must match the regular expression `^[A-Za-z0-9._%+@-]+$`.
maxLength: 108
minLength: 4
pattern: ^[A-Za-z0-9._%+@-]+$
example: summer-loyalty-card-0543
AddLoyaltyPointsEffectProps:
type: object
description: |
The properties specific to the "addLoyaltyPoints" effect. This gets triggered whenever a validated rule contained an "add loyalty" effect. These points are automatically stored and managed inside Talon.One.
required:
- name
- programId
- subLedgerId
- value
- recipientIntegrationId
- transactionUUID
properties:
name:
type: string
description: The name / description of this loyalty point addition.
programId:
type: integer
description: The ID of the loyalty program where these points were added.
subLedgerId:
type: string
description: The ID of the subledger within the loyalty program where these points were added.
value:
type: number
description: The amount of points that were added.
desiredValue:
type: number
description: The original amount of loyalty points to be awarded.
recipientIntegrationId:
type: string
maxLength: 1000
description: The user for whom these points were added.
example: URNGV8294NV
startDate:
type: string
format: date-time
description: Date after which points will be valid.
expiryDate:
type: string
format: date-time
description: Date after which points will expire.
transactionUUID:
type: string
description: The identifier of this addition in the loyalty ledger.
cartItemPosition:
type: number
description: The index of the item in the cart items list on which the loyal points addition should be applied.
cartItemSubPosition:
type: number
description: |
For cart items with `quantity` > 1, the sub position indicates to which item the loyalty points addition is applied.
cardIdentifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
description: The card on which these points were added.
bundleIndex:
type: integer
description: The position of the bundle in a list of item bundles created from the same bundle definition.
bundleName:
type: string
description: The name of the bundle definition.
awaitsActivation:
type: boolean
description: |
If `true`, the loyalty points remain pending until a specific action is complete. The `startDate` parameter automatically sets to `on_action`.
validityDuration:
type: string
description: |
The duration for which the points remain active, calculated relative to the
activation date.
**Note**: This value is returned only if `awaitsActivation` is `true`
and `expiryDate` is not set.
DeductLoyaltyPointsEffectProps:
type: object
description: The properties specific to the "deductLoyaltyPoints" effect. This gets triggered whenever a validated rule contained a condition to only trigger when the given number of loyalty points could be deduced. These points are automatically stored and managed inside Talon.One.
required:
- ruleTitle
- programId
- subLedgerId
- value
- transactionUUID
- name
properties:
ruleTitle:
type: string
description: The title of the rule that contained triggered this points deduction.
programId:
type: integer
description: The ID of the loyalty program where these points were added.
subLedgerId:
type: string
description: The ID of the subledger within the loyalty program where these points were added.
value:
type: number
description: The amount of points that were deducted.
transactionUUID:
type: string
description: The identifier of this deduction in the loyalty ledger.
name:
type: string
description: |
The name property gets one of the following two values. It can be the loyalty program name or it can represent a reason for the respective deduction of loyalty points. The latter is an optional value defined in a deduction rule.
cardIdentifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
description: The card on which these points were added.
ChangeLoyaltyTierLevelEffectProps:
type: object
description: |
The properties specific to the "changeLoyaltyTierLevel" effect.
This is triggered whenever the user's loyalty tier is upgraded due to a validated rule that contained an "addLoyaltyPoints" effect.
required:
- ruleTitle
- programId
- subLedgerId
- newTierName
properties:
ruleTitle:
type: string
description: The title of the rule that triggered the tier upgrade.
programId:
type: integer
description: The ID of the loyalty program where these points were added.
subLedgerId:
type: string
description: The ID of the subledger within the loyalty program where these points were added.
previousTierName:
type: string
description: The name of the tier from which the user was upgraded.
newTierName:
type: string
description: The name of the tier to which the user has been upgraded.
expiryDate:
type: string
format: date-time
description: The expiration date of the new tier.
AddFreeItemEffectProps:
type: object
description: The properties specific to the "addFreeItem" effect. This gets triggered whenever a validated rule contained an "add free item" effect.
required:
- sku
- name
properties:
sku:
type: string
description: SKU of the item that needs to be added.
example: SKU1241028
name:
type: string
description: The name / description of the effect
desiredQuantity:
type: integer
description: The original quantity in case a partial reward was applied.
ShowNotificationEffectProps:
type: object
description: The properties specific to the "showNotification" effect. This gets triggered whenever a validated rule contained a "show notification" effect.
required:
- notificationType
- title
- body
properties:
notificationType:
type: string
description: The type of notification that should be shown (e.g. error/warning/info).
title:
type: string
description: Title of the notification.
body:
type: string
description: Body of the notification.
UpdateAttributeEffectProps:
type: object
description: The properties specific to the "updateAttribute" effect. This gets triggered whenever a validated rule contained an "update an attribute" effect.
required:
- path
- value
properties:
path:
type: string
description: The exact path of the attribute that was updated.
value:
description: |
The new value of this attribute. The value can be of the following types:
- boolean
- location
- number
- string
- time
- list of any of those types
RollbackCouponEffectProps:
type: object
description: The properties specific to the "rollbackCoupon" effect. This gets triggered whenever previously closed session is now cancelled and a coupon redemption was cancelled on our internal usage limit counters.
required:
- value
properties:
value:
type: string
description: The coupon code whose usage has been rolled back.
RollbackReferralEffectProps:
type: object
description: The properties specific to the "rollbackReferral" effect. This gets triggered whenever previously closed session is now cancelled and a referral redemption was cancelled on our internal usage limit counters.
required:
- value
properties:
value:
type: string
description: The referral code whose usage has been rolled back.
RollbackDiscountEffectProps:
type: object
description: The properties specific to the "rollbackDiscount" effect. This gets triggered whenever previously closed session is now cancelled or partially returned and a setDiscount effect was cancelled on our internal discount limit counters.
required:
- name
- value
properties:
name:
type: string
description: The name of the "setDiscount" effect that was rolled back.
value:
type: number
description: The value of the discount that was rolled back.
cartItemPosition:
type: number
description: The index of the item in the cart items for which the discount was rolled back.
cartItemSubPosition:
type: number
description: |
For cart items with `quantity` > 1, the subposition returns the index of the item unit in its line item.
additionalCostId:
type: integer
description: The ID of the additional cost that was rolled back.
additionalCost:
type: string
description: The name of the additional cost that was rolled back.
scope:
type: string
description: |
The scope of the rolled back discount
- For a discount per session, it can be one of `cartItems`, `additionalCosts` or `sessionTotal`
- For a discount per item, it can be one of `price`, `additionalCosts` or `itemTotal`
RollbackAddedLoyaltyPointsEffectProps:
type: object
description: The properties specific to the "rollbackAddedLoyaltyPoints" effect. This gets triggered whenever previously a closed session with an addLoyaltyPoints effect is cancelled.
required:
- programId
- subLedgerId
- value
- recipientIntegrationId
- transactionUUID
properties:
programId:
type: integer
description: The ID of the loyalty program where the points were originally added.
subLedgerId:
type: string
description: The ID of the subledger within the loyalty program where these points were originally added.
value:
type: number
description: The amount of points that were rolled back.
recipientIntegrationId:
type: string
maxLength: 1000
description: The user for whom these points were originally added.
example: URNGV8294NV
transactionUUID:
type: string
description: The identifier of 'deduction' entry added to the ledger as the `addLoyaltyPoints` effect is rolled back.
cartItemPosition:
type: number
description: The index of the item in the cart items for which the loyalty points were rolled back.
cartItemSubPosition:
type: number
description: |
For cart items with `quantity` > 1, the sub-position indicates to which item the loyalty points were rolled back.
cardIdentifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
description: The card on which these points were originally added.
RollbackDeductedLoyaltyPointsEffectProps:
type: object
description: The properties specific to the "rollbackDeductedLoyaltyPoints" effect. This effect is triggered whenever a previously closed session is cancelled and a deductLoyaltyPoints effect was revoked.
required:
- programId
- subLedgerId
- value
- recipientIntegrationId
- transactionUUID
properties:
programId:
type: integer
description: The ID of the loyalty program where these points were reimbursed.
subLedgerId:
type: string
description: The ID of the subledger within the loyalty program where these points were reimbursed.
value:
type: number
description: The amount of reimbursed points that were added.
recipientIntegrationId:
type: string
maxLength: 1000
description: The user for whom these points were reimbursed.
example: URNGV8294NV
startDate:
type: string
format: date-time
description: Date after which the reimbursed points will be valid.
expiryDate:
type: string
format: date-time
description: Date after which the reimbursed points will expire.
transactionUUID:
type: string
description: The identifier of 'addition' entries added to the ledger as the `deductLoyaltyPoints` effect is rolled back.
cardIdentifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
description: The card on which these points were added.
ShowBundleMetadataEffectProps:
type: object
description: |
This effect is **deprecated**.
The properties specific to the "ShowBundleMetadata" effect. This effect contains information that allows you to associate the discounts from a rule in a bundle campaign with specific cart items. This way you can distinguish from "normal" discounts that were not the result of a product bundle.
required:
- description
- bundleAttributes
- itemsIndices
properties:
description:
type: string
description: Description of the product bundle.
bundleAttributes:
type: array
items:
type: string
description: The cart item attributes that determined which items are being bundled together.
itemsIndices:
type: array
items:
type: number
description: The indices in the cart items array of the bundled items.
AwardGiveawayEffectProps:
type: object
description: The properties specific to the "awardGiveaway" effect. This effect contains information on the giveaway item, and which profile it was awarded to.
required:
- poolId
- poolName
- recipientIntegrationId
- giveawayId
- code
properties:
poolId:
type: integer
description: The ID of the giveaways pool the code was taken from.
example: 2
poolName:
type: string
description: The name of the giveaways pool the code was taken from.
example: My pool
recipientIntegrationId:
type: string
maxLength: 1000
description: The integration ID of the profile that was awarded the giveaway.
example: URNGV8294NV
giveawayId:
type: integer
description: The internal ID for the giveaway that was awarded.
example: 5
code:
type: string
description: The giveaway code that was awarded.
example: 57638t-67439hty
WillAwardGiveawayEffectProps:
type: object
description: The properties specific to the "awardGiveaway" effect when the session is not closed yet. This effect replaces "awardGiveaway" only when updating a session with any state other than "closed". This is to ensure no giveaway codes are leaked when they are still not guaranteed to be awarded.
required:
- poolId
- poolName
- recipientIntegrationId
properties:
poolId:
type: integer
description: The ID of the giveaways pool the code will be taken from.
example: 2
poolName:
type: string
description: The name of the giveaways pool the code will be taken from.
example: My pool
recipientIntegrationId:
type: string
maxLength: 1000
description: The integration ID of the profile that will be awarded the giveaway.
example: URNGV8294NV
ErrorEffectProps:
type: object
description: Whenever an error occurred during evaluation, we return an error effect. This should never happen for rules created in the rule builder.
required:
- message
properties:
message:
type: string
description: The error message.
CustomEffectProps:
type: object
description: Effect containing custom payload.
required:
- effectId
- name
- payload
properties:
effectId:
type: integer
description: The ID of the custom effect that was triggered.
example: 1
name:
type: string
description: The type of the custom effect.
example: my_custom_effect
cartItemPosition:
type: number
description: The index of the item in the cart item list to which the custom effect is applied.
example: 1
cartItemSubPosition:
type: number
description: |
For cart items with quantity > 1, the sub position indicates to which item unit the custom effect is applied.
example: 2
bundleIndex:
type: integer
description: The position of the bundle in a list of item bundles created from the same bundle definition.
example: 1
bundleName:
type: string
description: The name of the bundle definition.
example: my_bundle
payload:
description: The JSON payload of the custom effect.
type: object
x-arbitraryJSON: true
SetDiscountPerAdditionalCostPerItemEffectProps:
type: object
description: The properties specific to the "setDiscountPerAdditionalCostPerItem" effect. This gets triggered whenever a validated rule contained a "set discount per additional cost per item" effect. This is a discount that should be applied on a specific additional cost in a specific item.
required:
- name
- value
- additionalCostId
- additionalCost
- position
properties:
name:
type: string
description: The name / description of this discount
additionalCostId:
type: integer
description: The ID of the additional cost.
value:
type: number
description: The total monetary value of the discount.
position:
type: number
description: The index of the item in the cart item list containing the additional cost to be discounted.
subPosition:
type: number
description: |
For cart items with `quantity` > 1, the sub position indicates which item the discount applies to.
additionalCost:
type: string
description: The name of the additional cost.
desiredValue:
type: number
description: |
Only with [partial discounts enabled](https://docs.talon.one/docs/product/campaigns/campaign-evaluation/#partial-discounts).
Represents the monetary value of the discount to be applied to additional discount without considering budget limitations.
ReserveCouponEffectProps:
type: object
description: The properties specific to the "reserveCoupon" effect. This gets triggered whenever a validated rule contained a "reserve coupon" effect. This reserves the coupon currently on scope to the profile on scope.
required:
- couponValue
- profileIntegrationId
- isNewReservation
properties:
couponValue:
type: string
description: The value of the coupon currently on scope.
profileIntegrationId:
type: string
description: The ID of this customer profile in the third-party integration.
isNewReservation:
type: boolean
description: Indicates whether this is a new coupon reservation or not.
AddToAudienceEffectProps:
type: object
description: The properties specific to the "addToAudience" effect. This gets triggered whenever a validated rule contains an "addToAudience" effect.
properties:
audienceId:
type: integer
description: The internal ID of the audience.
example: 10
audienceName:
type: string
description: The name of the audience.
example: My audience
profileIntegrationId:
type: string
description: The ID of the customer profile in the third-party integration platform.
example: URNGV8294NV
profileId:
type: integer
description: The internal ID of the customer profile.
example: 150
RemoveFromAudienceEffectProps:
type: object
description: The properties specific to the "removeFromAudience" effect. This gets triggered whenever a validated rule contains a "removeFromAudience" effect.
properties:
audienceId:
type: integer
description: The internal ID of the audience.
example: 10
audienceName:
type: string
description: The name of the audience.
example: My audience
profileIntegrationId:
type: string
description: The ID of the customer profile in the third-party integration platform.
example: URNGV8294NV
profileId:
type: integer
description: The internal ID of the customer profile.
example: 150
IncreaseAchievementProgressEffectProps:
type: object
description: The properties specific to the "increaseAchievementProgress" effect. This gets triggered whenever a validated rule contained an "increase customer progress" effect.
required:
- achievementId
- achievementName
- delta
- value
- target
- isJustCompleted
properties:
achievementId:
type: integer
description: The internal ID of the achievement.
example: 10
achievementName:
type: string
description: The name of the achievement.
example: FreeCoffee10Orders
progressTrackerId:
type: integer
description: The internal ID of the achievement progress tracker.
delta:
type: number
description: The value by which the customer's current progress in the achievement is increased.
value:
type: number
description: The current progress of the customer in the achievement.
target:
type: number
description: The target value to complete the achievement.
isJustCompleted:
type: boolean
description: Indicates if the customer has completed the achievement in the current session.
RollbackIncreasedAchievementProgressEffectProps:
type: object
description: The properties specific to the "rollbackIncreasedAchievementProgress" effect. This gets triggered whenever a closed session where the `increaseAchievementProgress` effect was triggered is cancelled. This is applicable only when the customer has not completed the achievement.
required:
- achievementId
- achievementName
- progressTrackerId
- decreaseProgressBy
- currentProgress
- target
properties:
achievementId:
type: integer
description: The internal ID of the achievement.
example: 10
achievementName:
type: string
description: The name of the achievement.
example: FreeCoffee10Orders
progressTrackerId:
type: integer
description: The internal ID of the achievement progress tracker.
decreaseProgressBy:
type: number
description: The value by which the customer's current progress in the achievement is decreased.
currentProgress:
type: number
description: The current progress of the customer in the achievement.
target:
type: number
description: The target value to complete the achievement.
LoyaltyLedgerEntryExpiryDateChange:
type: object
description: The properties specific to effects for changing the expiry dates of loyalty ledger entries.
required:
- transactionUUID
- newExpiryDate
properties:
transactionUUID:
type: string
format: uuid
description: The identifier of the transaction affected by the extension or update.
previousExpiryDate:
type: string
format: date-time
description: Expiry date of the transactions before applying the extension or update.
newExpiryDate:
type: string
format: date-time
description: Expiry date of the transaction after applying the extension or update.
ExtendLoyaltyPointsExpiryDateEffectProps:
type: object
description: |
The properties specific to the "extendLoyaltyPointsExpiryDate" effect. This gets triggered when a validated rule contains the "extend expiry date" effect. The current expiry date gets extended by the time frame given in the effect.
required:
- programId
- subLedgerId
- extensionDuration
- previousExpirationDate
properties:
programId:
type: integer
description: ID of the loyalty program that contains these points.
subLedgerId:
type: string
description: API name of the loyalty program subledger that contains these points. added.
extensionDuration:
type: string
description: |
Time frame by which the expiry date extends.
The time format is either:
- immediate, or
- an **integer** followed by a letter indicating the time unit.
Examples: `immediate`, `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`.
Available units:
- `s`: seconds
- `m`: minutes
- `h`: hours
- `D`: days
- `W`: weeks
- `M`: months
- `Y`: years
You can round certain units up or down:
- `_D` for rounding down days only. Signifies the start of the day.
- `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.
example: 12h
affectedTransactions:
type: array
description: List of transactions affected by the expiry date update.
items:
$ref: '#/components/schemas/LoyaltyLedgerEntryExpiryDateChange'
Effect:
allOf:
- $ref: '#/components/schemas/EffectEntity'
- type: object
description: A generic effect that is fired by a triggered campaign. The props property will contain information specific to the specific effect type.
required:
- props
properties:
props:
oneOf:
- $ref: '#/components/schemas/AcceptCouponEffectProps'
- $ref: '#/components/schemas/AcceptReferralEffectProps'
- $ref: '#/components/schemas/RedeemReferralEffectProps'
- $ref: '#/components/schemas/RejectCouponEffectProps'
- $ref: '#/components/schemas/RejectReferralEffectProps'
- $ref: '#/components/schemas/CouponCreatedEffectProps'
- $ref: '#/components/schemas/ReferralCreatedEffectProps'
- $ref: '#/components/schemas/SetDiscountEffectProps'
- $ref: '#/components/schemas/SetDiscountPerItemEffectProps'
- $ref: '#/components/schemas/SetDiscountPerAdditionalCostEffectProps'
- $ref: '#/components/schemas/TriggerWebhookEffectProps'
- $ref: '#/components/schemas/AddLoyaltyPointsEffectProps'
- $ref: '#/components/schemas/DeductLoyaltyPointsEffectProps'
- $ref: '#/components/schemas/ChangeLoyaltyTierLevelEffectProps'
- $ref: '#/components/schemas/AddFreeItemEffectProps'
- $ref: '#/components/schemas/ShowNotificationEffectProps'
- $ref: '#/components/schemas/UpdateAttributeEffectProps'
- $ref: '#/components/schemas/RollbackCouponEffectProps'
- $ref: '#/components/schemas/RollbackReferralEffectProps'
- $ref: '#/components/schemas/RollbackDiscountEffectProps'
- $ref: '#/components/schemas/RollbackAddedLoyaltyPointsEffectProps'
- $ref: '#/components/schemas/RollbackDeductedLoyaltyPointsEffectProps'
- $ref: '#/components/schemas/ShowBundleMetadataEffectProps'
- $ref: '#/components/schemas/AwardGiveawayEffectProps'
- $ref: '#/components/schemas/WillAwardGiveawayEffectProps'
- $ref: '#/components/schemas/ErrorEffectProps'
- $ref: '#/components/schemas/CustomEffectProps'
- $ref: '#/components/schemas/SetDiscountPerAdditionalCostPerItemEffectProps'
- $ref: '#/components/schemas/ReserveCouponEffectProps'
- $ref: '#/components/schemas/AddToAudienceEffectProps'
- $ref: '#/components/schemas/RemoveFromAudienceEffectProps'
- $ref: '#/components/schemas/IncreaseAchievementProgressEffectProps'
- $ref: '#/components/schemas/RollbackIncreasedAchievementProgressEffectProps'
- $ref: '#/components/schemas/ExtendLoyaltyPointsExpiryDateEffectProps'
IntegrationCustomerSessionResponse:
type: object
properties:
customerSession:
$ref: '#/components/schemas/CustomerSessionV2'
effects:
type: array
description: |
The returned effects.
**Note:** This endpoint returns only the effects that are valid after any rollback effects and their corresponding non-rollback effects are removed.
items:
$ref: '#/components/schemas/Effect'
ErrorSource:
type: object
description: |
The source of the current error, exactly one of `pointer`, `parameter` or `line` will be defined.
properties:
pointer:
type: string
description: Pointer to the path in the payload that caused this error.
parameter:
type: string
description: Query parameter that caused this error.
line:
type: string
description: Line number in uploaded multipart file that caused this error. 'N/A' if unknown.
resource:
type: string
description: Pointer to the resource that caused this error.
APIError:
type: object
required:
- source
- title
properties:
title:
type: string
description: Short description of the problem.
details:
type: string
description: Longer description of this specific instance of the problem.
source:
$ref: '#/components/schemas/ErrorSource'
ErrorResponse:
type: object
required:
- message
properties:
message:
type: string
description: A message describing the error.
errors:
type: array
description: An array of individual problems encountered during the request.
items:
$ref: '#/components/schemas/APIError'
ErrorResponseWithStatus:
type: object
properties:
message:
type: string
errors:
type: array
description: An array of individual problems encountered during the request.
items:
$ref: '#/components/schemas/APIError'
StatusCode:
type: integer
description: The error code
IntegrationRequest:
type: object
description: The body of a V2 integration API request (customer session update). Next to the customer session details, this contains an optional listing of extra properties that should be returned in the response.
required:
- customerSession
properties:
customerSession:
$ref: '#/components/schemas/NewCustomerSessionV2'
description: The customer session update details.
responseContent:
type: array
description: |
Extends the response with the chosen data entities. Use this property to get as much data
as you need in one _Update customer session_ request instead of sending extra requests to other endpoints.
**Note:** To retrieve loyalty card details, your request must include a loyalty card ID.
example:
- customerSession
- customerProfile
items:
type: string
enum:
- customerSession
- customerProfile
- coupons
- triggeredCampaigns
- referral
- loyalty
- event
- awardedGiveaways
- ruleFailureReasons
- previousReturns
- campaignEligibility
CustomerProfileEntity:
type: object
required:
- id
- created
properties:
id:
type: integer
description: The internal ID of the customer profile.
example: 6
created:
type: string
format: date-time
description: The time the customer profile was created.
example: 2020-06-10T09:05:27.993483Z
NewCustomerProfile:
type: object
properties:
attributes:
type: object
additionalProperties: true
description: Arbitrary properties associated with this item.
example:
Language: english
ShippingCountry: DE
LoyaltyMembership:
type: object
required:
- loyaltyProgramId
properties:
joined:
type: string
format: date-time
title: Loyalty program joined at
description: The moment in which the loyalty program was joined.
example: 2012-03-20T14:15:22Z
loyaltyProgramId:
type: integer
title: Loyalty program ID
description: The ID of the loyalty program belonging to this entity.
example: 323414846
AudienceMembership:
type: object
required:
- id
- name
properties:
id:
type: integer
title: Audience ID
description: The ID of the audience belonging to this entity.
example: 2
name:
type: string
title: Audience Name
description: The Name of the audience belonging to this entity.
example: Travel audience
CustomerProfile:
allOf:
- $ref: '#/components/schemas/CustomerProfileEntity'
- $ref: '#/components/schemas/IntegrationEntity'
- $ref: '#/components/schemas/NewCustomerProfile'
- type: object
properties:
accountId:
type: integer
title: Profile belongs to Account
description: The ID of the Talon.One account that owns this profile.
example: 31
closedSessions:
type: integer
title: Closed sessions
description: The total number of closed sessions. Does not include closed sessions that have been cancelled or reopened. See the [docs](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions#customer-session-states).
example: 3
totalSales:
type: number
description: |
The total amount of money spent by the customer **before** discounts are applied.
The total sales amount excludes the following:
- Cancelled or reopened sessions.
- Returned items.
example: 299.99
title: Total Sales
loyaltyMemberships:
type: array
description: |
**DEPRECATED. Always returns `null`.** A list of loyalty programs joined by the customer.
items:
$ref: '#/components/schemas/LoyaltyMembership'
title: Loyalty programed joined
example: null
audienceMemberships:
type: array
description: The audiences the customer belongs to.
items:
$ref: '#/components/schemas/AudienceMembership'
title: Audience memberships
lastActivity:
type: string
format: date-time
title: Last activity
description: |
Timestamp of the most recent event received from this customer.
This field is updated on calls that trigger the Rule Engine and that are
not [dry requests](https://docs.talon.one/docs/dev/integration-api/dry-requests/#overlay).
For example, [reserving a coupon](https://docs.talon.one/integration-api#tag/Coupons/operation/createCouponReservation)
for a customer doesn't impact this field.
example: 2020-02-08T14:15:20Z
sandbox:
type: boolean
description: |
An indicator of whether the customer is part of a sandbox or live Application. See the [docs](https://docs.talon.one/docs/product/applications/overview#application-environments).
title: Sandbox
example: false
required:
- accountId
- closedSessions
- totalSales
- lastActivity
- attributes
LoyaltyProgramEntity:
type: object
required:
- programID
properties:
programID:
type: integer
description: The ID of the loyalty program that owns this entity.
example: 125
programName:
type: string
description: The integration name of the loyalty program that owns this entity.
example: Loyalty_program
programTitle:
type: string
description: The Campaign Manager-displayed name of the loyalty program that owns this entity.
example: Loyalty program
UpdateLoyaltyCard:
type: object
required:
- status
properties:
status:
type: string
description: |
Status of the loyalty card. Can be `active` or `inactive`.
example: active
blockReason:
type: string
description: |
Reason for transferring and blocking the loyalty card.
example: Current card lost. Customer needs a new card.
LoyaltyCardProfileRegistration:
type: object
required:
- integrationId
- timestamp
properties:
integrationId:
type: string
maxLength: 1000
description: Integration ID of the customer profile linked to the card.
example: R195412
timestamp:
type: string
format: date-time
description: Timestamp the customer profile was linked to the card.
example: 2021-09-12T10:12:42Z
LoyaltyProgramBalance:
type: object
required:
- currentBalance
- pendingBalance
- expiredBalance
- spentBalance
- tentativeCurrentBalance
description: The balance in a Loyalty Program for some Customer.
properties:
currentBalance:
type: number
title: Current balance
description: Sum of currently active points.
example: 100
pendingBalance:
type: number
title: Pending balance
description: Sum of pending points.
example: 10
negativeBalance:
type: number
title: Negative balance
description: Sum of negative points. This implies that `currentBalance` is `0`.
example: 10
expiredBalance:
type: number
title: Expired balance
description: |
**DEPRECATED** Value is shown as 0.
example: 0
spentBalance:
type: number
title: Spent balance
description: |
**DEPRECATED** Value is shown as 0.
example: 0
tentativeCurrentBalance:
type: number
title: Tentative current balance
description: |
The tentative points balance, reflecting the `currentBalance` and all point additions and deductions within the current open customer session. When the session is closed, the effects are applied and the `currentBalance` is updated to this value.
**Note:** Tentative balances are specific to the current session and do not take into account other open sessions for the given customer.
example: 100
tentativePendingBalance:
type: number
title: Tentative pending balance
description: |
The tentative points balance, reflecting the `pendingBalance` and all point additions with a future activation date within the current open customer session. When the session is closed, the effects are applied and the `pendingBalance` is updated to this value.
**Note:** Tentative balances are specific to the current session and do not take into account other open sessions for the given customer.
example: 20
tentativeNegativeBalance:
type: number
title: Tentative negative balance
description: |
The tentative negative balance after all additions and deductions from the current customer session are applied to `negativeBalance`. When the session is closed, the tentative effects are applied and `negativeBalance` is updated to this value.
**Note:** Tentative balances are specific to the current session and do not take into account other open sessions for the given customer.
example: 100
Tier:
type: object
required:
- id
- name
properties:
id:
type: integer
description: The internal ID of the tier.
example: 11
name:
type: string
description: The name of the tier.
example: bronze
startDate:
type: string
format: date-time
description: Date and time when the customer moved to this tier. This value uses the loyalty program's time zone setting.
example: 2021-05-03T12:32:00Z07:00
expiryDate:
type: string
format: date-time
description: Date when tier level expires in the RFC3339 format (in the Loyalty Program's timezone).
example: 2022-08-02T15:04:05Z07:00
downgradePolicy:
type: string
enum:
- one_down
- balance_based
description: |
The policy that defines how customer tiers are downgraded in the loyalty program after tier reevaluation.
- `one_down`: If the customer doesn't have enough points to stay in the current tier, they are downgraded by one tier.
- `balance_based`: The customer's tier is reevaluated based on the amount of active points they have at the moment.
LedgerInfo:
allOf:
- $ref: '#/components/schemas/LoyaltyProgramBalance'
- type: object
properties:
currentTier:
$ref: '#/components/schemas/Tier'
description: Tier for which the ledger is eligible.
example: bronze
pointsToNextTier:
type: number
description: Points required to move up a tier.
example: 20
nextTierName:
type: string
description: |
The name of the next higher tier level in the loyalty program.
**Note**:
- Returns `null` if the customer has reached the highest available tier.
- Returns the lowest level tier name if the customer is not currently assigned to any tier.
example: Silver
LoyaltyCard:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/LoyaltyProgramEntity'
- $ref: '#/components/schemas/UpdateLoyaltyCard'
- type: object
required:
- identifier
- usersPerCardLimit
properties:
identifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
usersPerCardLimit:
type: integer
minimum: 0
example: 111
description: |
The max amount of customer profiles that can be linked to the card. 0 means unlimited.
profiles:
type: array
description: Integration IDs of the customers profiles linked to the card.
items:
$ref: '#/components/schemas/LoyaltyCardProfileRegistration'
ledger:
$ref: '#/components/schemas/LedgerInfo'
description: Displays point balances of the card in the main ledger of the loyalty program.
subledgers:
type: object
description: Displays point balances of the card in the subledgers of the loyalty program.
additionalProperties:
$ref: '#/components/schemas/LedgerInfo'
modified:
type: string
format: date-time
description: Timestamp of the most recent update of the loyalty card.
example: 2021-09-12T10:12:42Z
oldCardIdentifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
description: The identifier of the card from which the points were transferred.
example: summer-loyalty-card-0543
newCardIdentifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
description: The identifier of the card to which the points were transferred.
example: autumn-loyalty-card-5822
batchId:
description: The ID of the batch in which the loyalty card was created.
type: string
example: wdefpov
LoyaltyProgramLedgers:
type: object
description: Customer-specific information about loyalty points.
required:
- ledger
- title
- name
- id
properties:
id:
type: integer
description: The internal ID of loyalty program.
example: 5
title:
description: Visible name of loyalty program.
type: string
example: My loyalty program
name:
description: Internal name of loyalty program.
type: string
example: program1
joinDate:
description: |
The date on which the customer joined the loyalty program in RFC3339.
**Note**: This is in the loyalty program's time zone.
type: string
format: date-time
example: 2024-04-30T15:04:05Z07:00
ledger:
$ref: '#/components/schemas/LedgerInfo'
title: Customer's current loyalty program status
description: Information about the main ledger in the loyalty program.
subLedgers:
type: object
description: A map containing information about each loyalty subledger.
additionalProperties:
$ref: '#/components/schemas/LedgerInfo'
Loyalty:
type: object
description: Customer-specific information about loyalty points.
required:
- programs
properties:
cards:
title: Point balances of the loyalty cards used.
description: Displays information about the balances of the loyalty cards.
type: array
items:
$ref: '#/components/schemas/LoyaltyCard'
programs:
type: object
title: Customer's current loyalty program balance.
description: Displays information about point balances in profile-based programs.
additionalProperties:
$ref: '#/components/schemas/LoyaltyProgramLedgers'
EntityWithTalangVisibleID:
type: object
required:
- id
- created
properties:
id:
type: integer
description: Unique ID for this entity.
example: 4
created:
type: string
format: date-time
description: The exact moment this entity was created.
example: 2020-06-10T09:05:27.993483Z
UserEntity:
type: object
required:
- userId
properties:
userId:
type: integer
description: The ID of the user associated with this entity.
example: 388
CodeGeneratorSettings:
type: object
properties:
validCharacters:
type: array
description: |
List of characters used to generate the random parts of a code.
example:
- A
- B
- C
- D
- E
- F
- G
- H
- I
- J
- K
- L
- M
- N
- O
- P
- Q
- R
- S
- T
- U
- V
- W
- X
- Y
- Z
- '0'
- '1'
- '2'
- '3'
- '4'
- '5'
- '6'
- '7'
- '8'
- '9'
items:
type: string
couponPattern:
type: string
description: |
The pattern used to generate codes, such as coupon codes, referral codes, and loyalty cards. The character `#` is a placeholder and is replaced by a random character from the `validCharacters` set.
maxLength: 100
minLength: 3
pattern: ^[A-Za-z0-9._%+@#-]+$
example: SUMMER-####-####
additionalProperties: false
required:
- couponPattern
- validCharacters
LimitConfig:
type: object
required:
- action
- limit
- entities
properties:
action:
type: string
description: |
The limitable action to which this limit applies. For example:
- `setDiscount`
- `setDiscountEffect`
- `redeemCoupon`
- `createCoupon`
example: createCoupon
limit:
type: number
minimum: 0
example: 1000
description: The value to set for the limit.
period:
description: The period on which the budget limit recurs.
type: string
enum:
- daily
- weekly
- monthly
- yearly
example: yearly
entities:
type: array
description: The entity that this limit applies to.
example:
- Coupon
items:
type: string
enum:
- Coupon
- Referral
- Profile
- Identifier
- Store
- Session
BaseCampaign:
type: object
properties:
name:
type: string
title: Campaign Name
description: A user-facing name for this campaign.
minLength: 1
example: Summer promotions
description:
type: string
title: Campaign Description
description: A detailed description of the campaign.
example: Campaign for all summer 2021 promotions
startTime:
type: string
format: date-time
description: Timestamp when the campaign will become active.
example: 2021-07-20T22:00:00Z
endTime:
type: string
format: date-time
description: Timestamp when the campaign will become inactive.
example: 2021-09-22T22:00:00Z
attributes:
type: object
description: Arbitrary properties associated with this campaign.
state:
type: string
enum:
- enabled
- disabled
- archived
default: enabled
example: enabled
description: |
A disabled or archived campaign is not evaluated for rules or coupons.
activeRulesetId:
type: integer
description: |
[ID of Ruleset](https://docs.talon.one/management-api#tag/Campaigns/operation/getRulesets) this
campaign applies on customer session evaluation.
example: 6
tags:
type: array
description: A list of tags for the campaign.
example:
- summer
maxItems: 50
items:
type: string
minLength: 1
maxLength: 50
reevaluateOnReturn:
type: boolean
title: Reevaluate on return
description: Indicates whether this campaign should be reevaluated when a customer returns an item.
example: true
features:
type: array
description: The features enabled in this campaign.
example:
- coupons
- referrals
items:
type: string
enum:
- coupons
- referrals
- loyalty
- giveaways
- strikethrough
- achievements
couponSettings:
$ref: '#/components/schemas/CodeGeneratorSettings'
referralSettings:
$ref: '#/components/schemas/CodeGeneratorSettings'
limits:
type: array
description: |
The set of [budget limits](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-budgets) for this campaign.
items:
$ref: '#/components/schemas/LimitConfig'
campaignGroups:
type: array
description: |
The IDs of the [campaign groups](https://docs.talon.one/docs/product/account/managing-campaign-groups) this campaign belongs to.
example:
- 1
- 3
items:
type: integer
type:
type: string
title: Type
enum:
- cartItem
- advanced
default: advanced
example: advanced
description: |
The campaign type. Possible type values:
- `cartItem`: Type of campaign that can apply effects only to cart items.
- `advanced`: Type of campaign that can apply effects to customer sessions and cart items.
linkedStoreIds:
type: array
description: |
A list of store IDs that you want to link to the campaign.
**Note:** Campaigns with linked store IDs will only be evaluated when there is a
[customer session update](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2)
that references a linked store.
items:
type: integer
example:
- 1
- 2
- 3
couponAttributes:
type: object
description: Arbitrary properties associated with coupons in this campaign.
required:
- name
- state
- tags
- limits
- features
CampaignBudget:
type: object
required:
- action
- limit
- counter
properties:
action:
type: string
description: |
The limitable action to which this limit applies. For example:
- `setDiscount`
- `setDiscountEffect`
- `redeemCoupon`
- `createCoupon`
example: createCoupon
limit:
type: number
minimum: 0
example: 1000
description: The value to set for the limit.
counter:
type: number
minimum: 0
example: 42
description: The number of occurrences of the limited action in the context of the campaign.
AdditionalCampaignProperties:
type: object
properties:
budgets:
type: array
items:
$ref: '#/components/schemas/CampaignBudget'
description: |
A list of all the budgets that are defined by this campaign and their usage.
**Note:** Budgets that are not defined do not appear in this list and their usage is
not counted until they are defined.
couponRedemptionCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Number of coupons redeemed in the campaign.
example: 163
referralRedemptionCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Number of referral codes redeemed in the campaign.
example: 3
discountCount:
type: number
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total amount of discounts redeemed in the campaign.
example: 288
discountEffectCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of times discounts were redeemed in this campaign.
example: 343
couponCreationCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of coupons created by rules in this campaign.
example: 16
customEffectCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of custom effects triggered by rules in this campaign.
example: 0
referralCreationCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of referrals created by rules in this campaign.
example: 8
addFreeItemEffectCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of times the [add free item effect](https://docs.talon.one/docs/dev/integration-api/api-effects#addfreeitem) can be triggered in this campaign.
example: 0
awardedGiveawaysCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of giveaways awarded by rules in this campaign.
example: 9
createdLoyaltyPointsCount:
type: number
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of loyalty points created by rules in this campaign.
example: 9
createdLoyaltyPointsEffectCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of loyalty point creation effects triggered by rules in this campaign.
example: 2
redeemedLoyaltyPointsCount:
type: number
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of loyalty points redeemed by rules in this campaign.
example: 8
redeemedLoyaltyPointsEffectCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of loyalty point redemption effects triggered by rules in this campaign.
example: 9
callApiEffectCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of webhooks triggered by rules in this campaign.
example: 0
reservecouponEffectCount:
type: integer
description: |
This property is **deprecated**. The count should be available under *budgets* property.
Total number of reserve coupon effects triggered by rules in this campaign.
example: 9
lastActivity:
type: string
format: date-time
example: 2022-11-10T23:00:00Z
description: Timestamp of the most recent event received by this campaign.
updated:
type: string
format: date-time
example: 2022-10-97T35:00:00Z
description: |
Timestamp of the most recent update to the campaign's property. Updates to external entities used in this campaign
are **not** registered by this property, such as collection or coupon updates.
createdBy:
type: string
description: Name of the user who created this campaign if available.
example: John Doe
updatedBy:
type: string
description: Name of the user who last updated this campaign if available.
example: Jane Doe
templateId:
type: integer
description: The ID of the Campaign Template this Campaign was created from.
example: 3
frontendState:
type: string
description: The campaign state displayed in the Campaign Manager.
enum:
- expired
- scheduled
- running
- disabled
- archived
- staged
example: running
storesImported:
type: boolean
description: Indicates whether the linked stores were imported via a CSV file.
example: true
valueMapsIds:
type: array
description: A list of value map IDs for the campaign.
items:
type: integer
example:
- 100
- 215
experimentId:
type: integer
description: The ID of the Experiment this Campaign is part of.
example: 1
required:
- state
- description
- type
- frontendState
- storesImported
CampaignVersions:
type: object
properties:
revisionFrontendState:
type: string
description: The campaign revision state displayed in the Campaign Manager.
enum:
- revised
- pending
example: revised
activeRevisionId:
type: integer
description: |
ID of the revision that was last activated on this campaign.
example: 6
activeRevisionVersionId:
type: integer
description: |
ID of the revision version that is active on the campaign.
example: 6
version:
type: integer
description: |
Incrementing number representing how many revisions have been activated on this campaign, starts from 0 for a new campaign.
example: 6
currentRevisionId:
type: integer
description: |
ID of the revision currently being modified for the campaign.
example: 6
currentRevisionVersionId:
type: integer
description: |
ID of the latest version applied on the current revision.
example: 6
stageRevision:
type: boolean
description: |
Flag for determining whether we use current revision when sending requests with staging API key.
example: false
default: false
Campaign:
allOf:
- $ref: '#/components/schemas/EntityWithTalangVisibleID'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/UserEntity'
- $ref: '#/components/schemas/BaseCampaign'
- $ref: '#/components/schemas/AdditionalCampaignProperties'
- $ref: '#/components/schemas/CampaignVersions'
- type: object
required:
- reevaluateOnReturn
IntegrationCampaignBase:
allOf:
- $ref: '#/components/schemas/ApplicationEntity'
- type: object
required:
- id
- name
- state
- tags
- features
properties:
id:
type: integer
description: Unique ID of Campaign.
example: 4
name:
type: string
title: Campaign Name
description: The name of the campaign.
minLength: 1
example: Summer promotions
description:
type: string
title: Campaign Description
description: A detailed description of the campaign.
example: Campaign for all summer 2021 promotions
startTime:
type: string
format: date-time
description: Timestamp when the campaign will become active.
example: 2021-07-20T22:00:00Z
endTime:
type: string
format: date-time
description: Timestamp when the campaign will become inactive.
example: 2021-09-22T22:00:00Z
attributes:
type: object
description: Arbitrary properties associated with this campaign.
state:
type: string
enum:
- enabled
default: enabled
example: enabled
description: |
The state of the campaign.
tags:
type: array
description: A list of tags for the campaign.
example:
- summer
maxItems: 50
items:
type: string
minLength: 1
maxLength: 50
features:
type: array
description: The features enabled in this campaign.
example:
- coupons
- referrals
items:
type: string
enum:
- coupons
- referrals
- loyalty
- giveaways
- strikethrough
- achievements
CampaignEligibilityFailureDetails:
type: object
description: The details about why the customer was not eligible for the campaign in the current session.
required:
- failureCode
properties:
failureCode:
type: string
description: A code identifying why the customer was not eligible for the campaign.
enum:
- ALL_RULES_FAILED
- SKIPPED
- AUDIENCE_NOT_MATCHED
CampaignEligibilityDetails:
type: object
required:
- passed
properties:
passed:
type: boolean
description: Indicates whether the customer was eligible for the campaign in the current session.
couponCode:
type: string
description: The coupon code used to check a customer's eligibility for the campaign in the current session, if applicable.
details:
$ref: '#/components/schemas/CampaignEligibilityFailureDetails'
description: The details about why the customer was not eligible for the campaign in the current session. Only returned when `passed` is `false`.
RuleMetadata:
type: object
required:
- title
properties:
title:
type: string
description: A short description of the rule.
example: Give discount via coupon
displayName:
type: string
description: A customer-facing name for the rule.
example: 20% off all shoes!
displayDescription:
type: string
description: |
A customer-facing description that explains the details of the rule.
For example, this property can contain details about eligibility requirements, reward timelines, or terms and conditions.
example: Get a 20% discount on all shoes during Thanksgiving! Offer valid till Dec 5 only.
relatedData:
type: string
description: |
Any additional data associated with the rule, such as an image URL, vendor name, or a content management system (CMS) ID.
example: https://example.com/discounts/20-off-shoes.png
RuleEligibilityFailureDetails:
type: object
description: The details about why the customer was not eligible for the rule in the current session.
required:
- failureCode
- details
properties:
failureCode:
type: string
description: A code identifying why the customer was not eligible for the rule in the current session.
enum:
- CONDITION_NOT_MET
- EFFECT_FAILED
couponID:
type: integer
description: |
The ID of the coupon that was being evaluated when the rule failed.
example: 4928
couponValue:
type: string
description: |
The coupon code that was being evaluated when the rule failed.
referralID:
type: integer
description: |
The ID of the referral that was being evaluated when the rule failed.
referralValue:
type: string
description: |
The referral code that was being evaluated when the rule failed.
conditionIndex:
type: integer
description: The index of the condition that caused the rule to fail.
effectIndex:
type: integer
description: The index of the effect that caused the rule to fail.
details:
type: string
description: Additional details about the failure.
RuleEligibility:
type: object
description: The customer's eligibility for a rule in the current session, based on whether all of the rule's conditions were met.
required:
- passed
properties:
passed:
type: boolean
description: Indicates whether the customer was eligible for the rule in the current session, based on whether all of the rule's conditions were met.
example: true
couponCode:
type: string
description: The coupon code used to check a customer's eligibility for the rule in the current session, if applicable.
details:
$ref: '#/components/schemas/RuleEligibilityFailureDetails'
description: The details about why the customer was not eligible for the rule in the current session. Only returned when `passed` is `false`.
RuleMetadataEligibility:
allOf:
- $ref: '#/components/schemas/RuleMetadata'
- type: object
required:
- eligibility
properties:
eligibility:
type: array
items:
$ref: '#/components/schemas/RuleEligibility'
CampaignEligibility:
allOf:
- $ref: '#/components/schemas/IntegrationCampaignBase'
- type: object
description: |
A list of campaigns and their evaluation status for the current customer session.
**Note**:
- This response can **only** be included if the `dry` parameter in the query is set to `true`.
- Do not include `triggeredCampaigns` or `ruleFailureReasons` in `responseContent` to avoid duplicate results.
required:
- eligibility
- rules
properties:
eligibility:
type: array
description: The customer's eligibility for each campaign in the current customer session.
items:
$ref: '#/components/schemas/CampaignEligibilityDetails'
rules:
type: array
description: A list of rules containing customer-facing details of the rewards defined in the campaign.
items:
$ref: '#/components/schemas/RuleMetadataEligibility'
RuleFailureReason:
type: object
description: Details about why a rule failed.
required:
- campaignID
- campaignName
- rulesetID
- ruleIndex
- ruleName
properties:
campaignID:
type: integer
description: The ID of the campaign that contains the rule that failed.
campaignName:
type: string
description: The name of the campaign that contains the rule that failed.
rulesetID:
type: integer
description: The ID of the ruleset that contains the rule that failed.
couponID:
type: integer
description: The ID of the coupon that was being evaluated at the time of the rule failure.
example: 4928
couponValue:
type: string
description: The code of the coupon that was being evaluated at the time of the rule failure.
referralID:
type: integer
description: The ID of the referral that was being evaluated at the time of the rule failure.
referralValue:
type: string
description: The code of the referral that was being evaluated at the time of the rule failure.
ruleIndex:
type: integer
description: The index of the rule that failed within the ruleset.
ruleName:
type: string
description: The name of the rule that failed within the ruleset.
conditionIndex:
type: integer
description: The index of the condition that failed.
effectIndex:
type: integer
description: The index of the effect that failed.
details:
type: string
description: More details about the failure.
evaluationGroupID:
type: integer
example: 3
description: The ID of the evaluation group. For more information, see [Managing campaign evaluation](https://docs.talon.one/docs/product/applications/managing-campaign-evaluation).
evaluationGroupMode:
type: string
example: stackable
description: The evaluation mode of the evaluation group. For more information, see [Managing campaign evaluation](https://docs.talon.one/docs/product/applications/managing-campaign-
CouponEntity:
type: object
required:
- id
- created
properties:
id:
type: integer
description: The internal ID of the coupon.
example: 6
created:
type: string
format: date-time
description: The time the coupon was created.
example: 2020-06-10T09:05:27.993483Z
CampaignEntity:
type: object
required:
- campaignId
properties:
campaignId:
type: integer
title: Campaign ID
description: The ID of the campaign that owns this entity.
example: 211
CouponValue:
type: object
properties:
value:
type: string
title: Coupon Code
description: The coupon code.
minLength: 4
example: XMAS-20-2021
CouponConstraints:
type: object
properties:
usageLimit:
type: integer
minimum: 0
maximum: 999999
example: 100
description: |
The number of times the coupon code can be redeemed. `0` means unlimited redemptions but any campaign usage limits will still apply.
discountLimit:
type: number
minimum: 0
maximum: 1000000000000000
example: 30
description: |
The total discount value that the code can give. Typically used to represent a gift card value.
reservationLimit:
type: integer
minimum: 0
maximum: 999999
example: 45
description: |
The number of reservations that can be made with this coupon code.
startDate:
type: string
format: date-time
example: 2020-01-24T14:15:22Z
description: Timestamp at which point the coupon becomes valid.
expiryDate:
type: string
format: date-time
example: 2023-08-24T14:15:22Z
description: Expiration date of the coupon. Coupon never expires if this is omitted.
CouponLimitConfigs:
type: object
properties:
limits:
type: array
description: |
Limits configuration for a coupon. These limits will override the limits
set from the campaign.
**Note:** Only usable when creating a single coupon which is not tied to a specific recipient.
Only per-profile limits are allowed to be configured.
items:
$ref: '#/components/schemas/LimitConfig'
Coupon:
allOf:
- $ref: '#/components/schemas/CouponEntity'
- $ref: '#/components/schemas/CampaignEntity'
- $ref: '#/components/schemas/CouponValue'
- $ref: '#/components/schemas/CouponConstraints'
- $ref: '#/components/schemas/CouponLimitConfigs'
- type: object
required:
- value
- usageCounter
- usageLimit
properties:
usageCounter:
type: integer
title: Total coupon redemptions
example: 10
description: The number of times the coupon has been successfully redeemed.
discountCounter:
type: number
title: Discounts Given
description: The amount of discounts given on rules redeeming this coupon. Only usable if a coupon discount budget was set for this coupon.
example: 10
discountRemainder:
type: number
title: Coupon Discount Remainder
description: The remaining discount this coupon can give.
example: 5
reservationCounter:
type: number
title: Number of reservations
description: The number of times this coupon has been reserved.
example: 1
attributes:
type: object
title: Attributes of coupon
description: Custom attributes associated with this coupon.
referralId:
type: integer
title: Advocate ID
description: The integration ID of the referring customer (if any) for whom this coupon was created as an effect.
example: 326632952
recipientIntegrationId:
title: Recipient ID
example: URNGV8294NV
type: string
maxLength: 1000
description: The Integration ID of the customer that is allowed to redeem this coupon.
importId:
title: Import ID
type: integer
description: The ID of the Import which created this coupon.
example: 4
reservation:
title: Reservation Type
type: boolean
example: false
description: |
Defines the reservation type:
- `true`: The coupon can be reserved for multiple customers.
- `false`: The coupon can be reserved only for one customer. It is a personal code.
default: true
batchId:
title: Batch ID
type: string
description: The id of the batch the coupon belongs to.
example: 32535-43255
isReservationMandatory:
title: Is reservation mandatory
type: boolean
example: false
description: An indication of whether the code can be redeemed only if it has been reserved first.
default: false
implicitlyReserved:
title: Is coupon implicitly reserved for all customers
description: An indication of whether the coupon is implicitly reserved for all customers.
type: boolean
example: false
ReferralConstraints:
type: object
properties:
startDate:
type: string
format: date-time
title: Referral code valid from
description: Timestamp at which point the referral code becomes valid.
example: 2020-11-10T23:00:00Z
expiryDate:
type: string
format: date-time
title: Referral code valid until
description: Expiration date of the referral code. Referral never expires if this is omitted.
example: 2021-11-10T23:00:00Z
usageLimit:
type: integer
title: Referral code Usage Limit
description: |
The number of times a referral code can be used. `0` means no limit but any campaign usage limits will still apply.
minimum: 0
maximum: 999999
example: 1
NewReferral:
allOf:
- $ref: '#/components/schemas/ReferralConstraints'
- type: object
required:
- campaignId
- advocateProfileIntegrationId
properties:
campaignId:
type: integer
title: Referral's Campaign ID
description: ID of the campaign from which the referral received the referral code.
example: 78
advocateProfileIntegrationId:
type: string
title: Advocate's Profile ID
description: The Integration ID of the Advocate's Profile.
maxLength: 1000
example: URNGV8294NV
friendProfileIntegrationId:
type: string
title: Friend's Profile ID
description: An optional Integration ID of the Friend's Profile.
example: BZGGC2454PA
attributes:
type: object
description: Arbitrary properties associated with this item.
example:
channel: web
ImportEntity:
type: object
properties:
importId:
type: integer
description: The ID of the Import which created this referral.
example: 4
Referral:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewReferral'
- $ref: '#/components/schemas/ImportEntity'
- type: object
required:
- code
- usageCounter
- usageLimit
properties:
code:
type: string
title: Referral code
description: The referral code.
minLength: 4
example: 27G47Y54VH9L
usageCounter:
type: integer
title: Referral code Usages
description: The number of times this referral code has been successfully used.
example: 1
batchId:
type: string
title: Batch ID
description: The ID of the batch the referrals belong to.
example: tqyrgahe
Giveaway:
allOf:
- $ref: '#/components/schemas/Entity'
- type: object
required:
- id
- created
- code
- poolId
properties:
code:
type: string
description: The code value of this giveaway.
example: GIVEAWAY1
poolId:
type: integer
description: The ID of the pool to return giveaway codes from.
example: 1
startDate:
format: date-time
description: Timestamp at which point the giveaway becomes valid.
type: string
example: 2022-01-02T15:04:05Z07:00
endDate:
format: date-time
description: Timestamp at which point the giveaway becomes invalid.
type: string
example: 2023-01-02T15:04:05Z07:00
attributes:
type: object
description: Arbitrary properties associated with this giveaway.
used:
type: boolean
description: Indicates whether this giveaway code was given before.
example: true
importId:
type: integer
description: The ID of the Import which created this giveaway.
example: 4
profileIntegrationId:
type: string
description: The third-party integration ID of the customer profile that was awarded the giveaway, if the giveaway was awarded.
example: R195412
profileId:
type: integer
description: The internal ID of the customer profile that was awarded the giveaway, if the giveaway was awarded and an internal ID exists.
example: 1
IntegrationResponse:
type: object
description: |
Contains entities that might be valuable in Talon.One integrations.
required:
- effects
- createdCoupons
- createdReferrals
properties:
customerProfile:
$ref: '#/components/schemas/CustomerProfile'
description: The customer profile associated with the event.
loyalty:
$ref: '#/components/schemas/Loyalty'
description: The loyalty program status of the customer.
triggeredCampaigns:
type: array
description: The campaigns that were triggered as a result of processing the event.
items:
$ref: '#/components/schemas/Campaign'
campaignEligibility:
type: array
description: |
A list of campaigns and their evaluation status for the current customer session.
**Note**:
- This response can **only** be included if the `dry` parameter in the query is set to `true`.
- Do not include `triggeredCampaigns` or `ruleFailureReasons` in `responseContent` to avoid duplicate results.
items:
$ref: '#/components/schemas/CampaignEligibility'
effects:
type: array
description: The effects generated by the rules in your running campaigns. See [API effects](https://docs.talon.one/docs/dev/integration-api/api-effects).
items:
$ref: '#/components/schemas/Effect'
ruleFailureReasons:
description: |
The reasons why certain rules were not triggered during the event
processing.
type: array
items:
$ref: '#/components/schemas/RuleFailureReason'
createdCoupons:
type: array
description: The coupons that were created during the event processing.
items:
$ref: '#/components/schemas/Coupon'
createdReferrals:
type: array
description: The referrals that were created during the event processing.
items:
$ref: '#/components/schemas/Referral'
awardedGiveaways:
type: array
description: The giveaways that were awarded during the event processing.
items:
$ref: '#/components/schemas/Giveaway'
InventoryReferral:
allOf:
- $ref: '#/components/schemas/Referral'
- type: object
required:
- referredCustomers
properties:
referredCustomers:
type: array
description: An array of referred customers.
items:
type: string
IntegrationCoupon:
allOf:
- $ref: '#/components/schemas/Coupon'
- type: object
required:
- profileRedemptionCount
properties:
profileRedemptionCount:
type: integer
title: Coupon redemptions for the profile
description: The number of times the coupon was redeemed by the profile.
example: 5
IntegrationEvent:
allOf:
- $ref: '#/components/schemas/IntegrationProfileEntity'
- $ref: '#/components/schemas/IntegrationStoreEntity'
- type: object
properties:
type:
type: string
title: Event Type
description: A string representing the event. Must not be a reserved event name.
minLength: 1
example: pageViewed
attributes:
type: object
description: Arbitrary additional JSON data associated with the event.
example:
myAttribute: myValue
required:
- type
- attributes
LedgerEntry:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/IntegrationProfileEntity'
- type: object
description: Entry in the point ledger.
required:
- eventId
- accountId
- profileId
- loyaltyProgramId
- amount
- reason
- expiryDate
properties:
accountId:
type: integer
description: The ID of the Talon.One account that owns this profile.
loyaltyProgramId:
type: integer
description: ID of the ledger.
example: 323414846
eventId:
type: integer
description: ID of the related event.
example: 3
amount:
type: integer
description: Amount of loyalty points.
example: 100
reason:
type: string
description: reason for awarding/deducting points.
example: Customer appeasement.
expiryDate:
type: string
format: date-time
description: Expiration date of the points.
example: 2022-04-26T11:02:38Z
referenceId:
type: integer
description: The ID of the balancing ledgerEntry.
CouponRejectionReason:
description: Holds a reference to the campaign, the coupon and the reason for which that coupon was rejected. Should only be present when there is a 'rejectCoupon' effect.
type: object
required:
- campaignId
- couponId
- reason
properties:
campaignId:
type: integer
example: 244
couponId:
type: integer
example: 4928
reason:
type: string
enum:
- CouponNotFound
- CouponPartOfNotRunningCampaign
- CampaignLimitReached
- ProfileLimitReached
- CouponRecipientDoesNotMatch
- CouponExpired
- CouponStartDateInFuture
- CouponRejectedByCondition
- EffectCouldNotBeApplied
- CouponPartOfNotTriggeredCampaign
- CouponReservationRequired
- ProfileRequired
example: CouponNotFound
ReferralRejectionReason:
description: Holds a reference to the campaign, the referral and the reason for which that referral was rejected. Should only be present when there is a 'rejectReferral' effect.
type: object
required:
- campaignId
- referralId
- reason
properties:
campaignId:
type: integer
referralId:
type: integer
reason:
type: string
enum:
- ReferralNotFound
- ReferralRecipientIdSameAsAdvocate
- ReferralPartOfNotRunningCampaign
- ReferralLimitReached
- CampaignLimitReached
- ProfileLimitReached
- ReferralRecipientDoesNotMatch
- ReferralExpired
- ReferralStartDateInFuture
- ReferralRejectedByCondition
- EffectCouldNotBeApplied
- ReferralPartOfNotTriggeredCampaign
example: ReferralNotFound
Meta:
type: object
properties:
campaigns:
description: Maps each evaluated campaign ID to a key-value list of that campaigns attributes. Campaigns without attributes will be omitted.
type: object
coupons:
description: Maps the coupon value to a key-value list of that coupons attributes.
type: object
couponRejectionReason:
$ref: '#/components/schemas/CouponRejectionReason'
referralRejectionReason:
$ref: '#/components/schemas/ReferralRejectionReason'
warnings:
description: Contains warnings about possible misuse.
type: object
Event:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/IntegrationEvent'
- type: object
required:
- effects
properties:
sessionId:
type: string
title: Session ID of Event
description: The ID of the session that this event occurred in.
example: 175KJPS947296
effects:
type: array
description: |
An array of effects generated by the rules of the enabled campaigns of the Application.
You decide how to apply them in your system. See the list of [API effects](https://docs.talon.one/docs/dev/integration-api/api-effects).
items:
type: array
items: {}
ledgerEntries:
type: array
description: Ledger entries for the event.
items:
$ref: '#/components/schemas/LedgerEntry'
meta:
$ref: '#/components/schemas/Meta'
IntegrationProfileEntityV3:
type: object
required:
- profileId
properties:
profileId:
type: string
description: |
ID of the customer profile set by your integration layer.
**Note:** If the customer does not yet have a known `profileId`, we recommend you use a guest `profileId`.
example: URNGV8294NV
EventV3:
allOf:
- $ref: '#/components/schemas/IntegrationProfileEntityV3'
- $ref: '#/components/schemas/IntegrationStoreEntity'
- $ref: '#/components/schemas/EvaluableCampaignIds'
- type: object
required:
- integrationId
- type
properties:
integrationId:
type: string
description: |
The unique ID of the current event. Only one event with this ID could be activated, duplicated events are forbidden.
minLength: 1
example: 175KJPS947296
type:
type: string
title: Event Type
description: |
A string representing the event name. Must not be a reserved event name. You create this value when you [create an attribute](https://docs.talon.one/docs/dev/concepts/entities/events#creating-a-custom-event) of type `event` in the Campaign Manager.
minLength: 1
example: pageViewed
attributes:
type: object
description: Arbitrary additional JSON properties associated with the event. They must be created in the Campaign Manager before setting them with this property. See [creating custom attributes](https://docs.talon.one/docs/product/account/dev-tools/managing-attributes#creating-a-custom-attribute).
example:
myAttribute: myValue
connectedSessionID:
type: string
description: The ID of the session that happened in the past.
minLength: 1
example: 175KJPS947296
previousEventID:
type: string
description: The unique identifier of the event that happened in the past.
minLength: 1
example: 175KJPS947296
AccountEntity:
type: object
required:
- accountId
properties:
accountId:
type: integer
description: The ID of the account that owns this entity.
example: 3886
ReturnedCartItem:
type: object
properties:
position:
description: The index of the cart item in the provided customer session's `cartItems` property.
type: integer
example: 2
quantity:
description: |
Number of cart items to return.
type: integer
example: 1
sku:
description: The SKU of the cart item in the provided customer session's `cartItems` property.
type: string
example: SKU1241028
minLength: 1
NewReturn:
type: object
required:
- returnedCartItems
properties:
returnedCartItems:
type: array
description: List of cart items to be returned.
items:
$ref: '#/components/schemas/ReturnedCartItem'
Return:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/NewReturn'
- type: object
required:
- eventId
- sessionId
- sessionIntegrationId
properties:
eventId:
title: Event ID
type: integer
description: The event ID of that was generated for this return.
example: 123
sessionId:
title: Session ID
type: integer
description: The internal ID of the session this return was requested on.
example: 123
sessionIntegrationId:
title: Session Integration ID
type: string
maxLength: 1000
description: The integration ID of the session this return was requested on.
example: 0c0e0207-eb30-4e06-a56c-2b7c8a64953c
profileId:
title: Profile ID
type: integer
description: The internal ID of the profile this return was requested on.
example: 123
profileIntegrationId:
title: Profile Integration ID
type: string
maxLength: 1000
description: The integration ID of the profile this return was requested on.
example: 0c0e0207-eb30-4e06-a56c-2b7c8a64953c
createdBy:
title: Created By
type: integer
description: ID of the user who requested this return.
example: 123
IntegrationStateV2:
allOf:
- $ref: '#/components/schemas/IntegrationResponse'
- type: object
description: |
Contains all entities that might interest Talon.One integrations.
properties:
referral:
$ref: '#/components/schemas/InventoryReferral'
description: The referral that was processed.
coupons:
type: array
description: The coupons that were processed.
items:
$ref: '#/components/schemas/IntegrationCoupon'
event:
$ref: '#/components/schemas/Event'
description: The event that was processed.
advancedEvent:
$ref: '#/components/schemas/EventV3'
description: The advanced event that was processed.
customerSession:
$ref: '#/components/schemas/CustomerSessionV2'
description: The session that was processed.
return:
$ref: '#/components/schemas/Return'
description: The return that was processed.
previousReturns:
type: array
description: The previous returns associated with the event.
items:
$ref: '#/components/schemas/Return'
ReturnIntegrationRequest:
type: object
description: The body of a return integration API request. Next to the cart items details, this contains an optional listing of extra properties that should be returned in the response.
required:
- return
properties:
return:
$ref: '#/components/schemas/NewReturn'
description: The returned cart items details.
responseContent:
type: array
description: |
Extends the response with the chosen data entities. Use this property to get as much data
as you need in one _Update customer session_ request instead of sending extra requests to other endpoints.
example:
- customerSession
- customerProfile
items:
type: string
enum:
- customerSession
- customerProfile
- coupons
- triggeredCampaigns
- referral
- loyalty
- event
- previousReturns
ReopenSessionResponse:
type: object
description: |
This is the response type returned by the Reopen customer sessions endpoint. It contains the rolled back effects.
required:
- effects
properties:
effects:
type: array
description: The effects generated by the rules in your running campaigns. See [API effects](https://docs.talon.one/docs/dev/integration-api/api-effects).
items:
$ref: '#/components/schemas/Effect'
ResponseContentObject:
type: object
properties:
responseContent:
type: array
description: |
Extends the response with the chosen data entities. Use this property to get as much data back as needed from one request instead of sending extra requests to other endpoints.
example:
- triggeredCampaigns
- customerProfile
items:
type: string
enum:
- customerProfile
- triggeredCampaigns
- loyalty
- event
- awardedGiveaways
- ruleFailureReasons
- campaignEligibility
ProfileAudiencesChanges:
type: object
required:
- adds
- deletes
properties:
adds:
title: Audiences to join
type: array
items:
type: integer
description: The IDs of the audiences for the customer to join.
example:
- 2
- 4
deletes:
title: Audiences to leave
type: array
items:
type: integer
description: The IDs of the audiences for the customer to leave.
example:
- 7
CustomerProfileIntegrationRequestV2:
allOf:
- $ref: '#/components/schemas/NewCustomerProfile'
- $ref: '#/components/schemas/EvaluableCampaignIds'
- $ref: '#/components/schemas/ResponseContentObject'
- type: object
description: The body of a V2 integration API request (customer profile update). Next to the customer profile details, this contains an optional listing of extra properties that should be returned in the response.
properties:
audiencesChanges:
$ref: '#/components/schemas/ProfileAudiencesChanges'
type: object
description: Audiences memberships changes for this profile.
CustomerProfileIntegrationResponseV2:
type: object
description: |
This is the response type returned by the updateCustomerProfileV2 endpoint.
required:
- effects
- createdCoupons
- createdReferrals
properties:
customerProfile:
$ref: '#/components/schemas/CustomerProfile'
event:
$ref: '#/components/schemas/Event'
loyalty:
$ref: '#/components/schemas/Loyalty'
triggeredCampaigns:
type: array
items:
$ref: '#/components/schemas/Campaign'
ruleFailureReasons:
type: array
items:
$ref: '#/components/schemas/RuleFailureReason'
campaignEligibility:
type: array
items:
$ref: '#/components/schemas/CampaignEligibility'
awardedGiveaways:
type: array
items:
$ref: '#/components/schemas/Giveaway'
effects:
type: array
description: The effects generated by the rules in your running campaigns. See [API effects](https://docs.talon.one/docs/dev/integration-api/api-effects).
items:
$ref: '#/components/schemas/Effect'
createdCoupons:
type: array
items:
$ref: '#/components/schemas/Coupon'
createdReferrals:
type: array
items:
$ref: '#/components/schemas/Referral'
MultipleCustomerProfileIntegrationRequestItem:
allOf:
- $ref: '#/components/schemas/NewCustomerProfile'
- type: object
description: |
The body of a V2 integration API request (customer profile update).
Next to the customer profile details, this contains an optional listing of extra properties that should be returned in the response.
required:
- integrationId
properties:
integrationId:
description: |
The identifier of this profile, set by your integration layer. It must be unique within the account.
To get the `integrationId` of the profile from a `sessionId`, use the
[Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2).
type: string
example: R195412
maxLength: 1000
MultipleCustomerProfileIntegrationRequest:
type: object
properties:
customerProfiles:
type: array
items:
$ref: '#/components/schemas/MultipleCustomerProfileIntegrationRequestItem'
CustomerProfileUpdateV2Response:
type: object
description: |
Contains the updated customer profiles entities. This is the response type returned by the V2 PUT customer_profiles endpoint
required:
- customerProfile
properties:
customerProfile:
$ref: '#/components/schemas/CustomerProfile'
MultipleCustomerProfileIntegrationResponseV2:
type: object
properties:
integrationStates:
type: array
items:
$ref: '#/components/schemas/CustomerProfileUpdateV2Response'
NewInternalAudience:
type: object
required:
- name
properties:
name:
type: string
minLength: 1
description: The human-friendly display name for this audience.
example: Travel audience
sandbox:
type: boolean
description: Indicates if this is a live or sandbox Application.
example: true
description:
type: string
description: A description of the audience.
example: Travel audience 18-27
subscribedApplicationsIds:
type: array
description: A list of the IDs of the Applications that are connected to this audience.
uniqueItems: true
items:
type: integer
example:
- 3
- 13
NewAudience:
allOf:
- $ref: '#/components/schemas/NewInternalAudience'
- type: object
required:
- name
properties:
integration:
type: string
description: |
The Talon.One-supported [3rd-party platform](https://docs.talon.one/docs/dev/technology-partners/overview) that this audience was created in.
For example, `mParticle`, `Segment`, `Shopify`, `Braze`, or `Iterable`.
**Note:** If you do not integrate with any of these platforms, do not use this property.
example: mparticle
integrationId:
type: string
minLength: 1
maxLength: 1000
description: |
The ID of this audience in the third-party integration.
**Note:** To create an audience that doesn't come from a 3rd party platform, do not use this property.
example: 382370BKDB946
createdIn3rdParty:
type: boolean
description: Determines if this audience is a 3rd party audience or not.
example: false
lastUpdate:
type: string
format: date-time
description: The last time that the audience memberships changed.
example: 2022-04-26T11:02:38Z
Audience:
allOf:
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewAudience'
UpdateAudience:
type: object
required:
- name
properties:
name:
type: string
minLength: 1
description: The human-friendly display name for this audience.
example: Travel audience
subscribedApplicationsIds:
type: array
description: A list of the IDs of the Applications that are connected to this audience.
items:
type: integer
uniqueItems: true
example:
- 3
- 13
CustomerProfileAudienceRequestItem:
type: object
required:
- action
- profileIntegrationId
- audienceId
properties:
action:
type: string
enum:
- add
- delete
description: |
Defines the action to perform:
- `add`: Adds the customer profile to the audience.
**Note**: If the customer profile does not exist, it will be created. The profile will not be visible in any Application
until a session or profile update is received for that profile.
- `delete`: Removes the customer profile from the audience.
example: add
profileIntegrationId:
type: string
description: The ID of this customer profile in the third-party integration.
example: R195412
maxLength: 1000
audienceId:
type: integer
description: The ID of the audience. You get it via the `id` property when [creating an audience](#tag/Audiences/operation/createAudienceV2).
example: 748
CustomerProfileAudienceRequest:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/CustomerProfileAudienceRequestItem'
AttributeQuery:
type: object
description: Object representing a set of of attributes and their respective values.
example:
my_attribute_1: some value
my_attribute_2: some other value
my_attribute_3: some other value
LoyaltyCardRegistration:
type: object
required:
- integrationId
properties:
integrationId:
type: string
title: Customer Profile ID
description: The integrationId of the customer profile.
example: R195412
IntegrationCampaign:
allOf:
- $ref: '#/components/schemas/IntegrationCampaignBase'
- type: object
required:
- rules
properties:
rules:
type: array
description: A list of rules containing customer-facing details of the rewards defined in the campaign.
items:
$ref: '#/components/schemas/RuleMetadata'
InventoryCoupon:
allOf:
- $ref: '#/components/schemas/Coupon'
- type: object
required:
- state
- profileRedemptionCount
properties:
profileRedemptionCount:
type: integer
title: Number of coupon usages per profile
description: The number of times the coupon was redeemed by the profile.
example: 5
state:
type: string
example: active
description: |
Can be:
- `active`: The coupon can be used. It is a reserved coupon that is not pending, used, or expired, and it has a non-exhausted limit counter.
**Note:** This coupon state is returned for [scheduled campaigns](https://docs.talon.one/docs/product/campaigns/settings/managing-campaign-schedule), but the coupon cannot be used until the campaign is **running**.
- `used`: The coupon has been redeemed and cannot be used again. It is not pending and has reached its redemption limit or was redeemed by the profile before expiration.
- `expired`: The coupon was never redeemed, and it is now expired. It is non-pending, non-active, and non-used by the profile.
- `pending`: The coupon will be usable in the future.
- `disabled`: The coupon is part of a non-active campaign.
EventAttributesEntity:
type: object
required:
- type
properties:
type:
type: string
title: Event Type
description: |
A string representing the event name. Must not be a reserved event name. You create this value when you [create an attribute](https://docs.talon.one/docs/dev/concepts/entities/events#creating-a-custom-event) of type `event` in the Campaign Manager.
minLength: 1
example: pageViewed
attributes:
type: object
description: Arbitrary additional JSON properties associated with the event. They must be created in the Campaign Manager before setting them with this property. See [creating custom attributes](https://docs.talon.one/docs/product/account/dev-tools/managing-attributes#creating-a-custom-attribute).
example:
myAttribute: myValue
EventV2:
allOf:
- $ref: '#/components/schemas/IntegrationProfileEntity'
- $ref: '#/components/schemas/IntegrationStoreEntity'
- $ref: '#/components/schemas/EvaluableCampaignIds'
- $ref: '#/components/schemas/EventAttributesEntity'
IntegrationEventV2Request:
allOf:
- $ref: '#/components/schemas/EventV2'
- $ref: '#/components/schemas/ResponseContentObject'
- type: object
properties:
loyaltyCards:
type: array
maxItems: 1
items:
type: string
description: Identifiers of the loyalty cards used during this event.
example:
- loyalty-card-1
MutableEntity:
type: object
required:
- modified
properties:
modified:
type: string
format: date-time
description: The time this entity was last modified.
example: 2021-09-12T10:12:42Z
AudienceIntegrationID:
type: object
properties:
integrationId:
type: string
minLength: 1
maxLength: 1000
description: The ID of this audience in the third-party integration.
example: 382370BKDB946
IntegrationEventV2Response:
allOf:
- $ref: '#/components/schemas/IntegrationResponse'
- type: object
description: |
This is the response type returned by the trackEventV2 endpoint.
properties:
event:
$ref: '#/components/schemas/Event'
description: The event that was processed.
NewReferralsForMultipleAdvocates:
allOf:
- $ref: '#/components/schemas/ReferralConstraints'
- type: object
required:
- campaignId
- advocateProfileIntegrationIds
- usageLimit
properties:
campaignId:
type: integer
title: Referral's Campaign ID
description: The ID of the campaign from which the referral received the referral code.
example: 45
advocateProfileIntegrationIds:
type: array
title: Advocate Profile List
description: An array containing all the respective advocate profiles.
example:
- URNGV8294NV
- DRPVV9476AF
items:
type: string
maxItems: 1000
minItems: 1
attributes:
type: object
description: Arbitrary properties associated with this referral code.
example:
channel: web
validCharacters:
type: array
description: |
List of characters used to generate the random parts of a code. By default, the list of characters
is equivalent to the `[A-Z, 0-9]` regular expression.
example:
- A
- B
- C
- D
- E
- F
- G
- H
- I
- J
- K
- L
- M
- N
- O
- P
- Q
- R
- S
- T
- U
- V
- W
- X
- Y
- Z
items:
type: string
referralPattern:
type: string
description: |
The pattern used to generate referrals. The character `#` is a placeholder and is replaced by a random character from the `validCharacters` set.
example: REF-###-###
maxLength: 100
minLength: 3
CouponReservations:
type: object
required:
- integrationIDs
properties:
integrationIDs:
type: array
description: List of customer integration IDs.
example:
- URNGV8294NV
- BZGGC2454PA
maxItems: 1000
items:
type: string
AchievementProgress:
type: object
description: The current progress of the customer in the achievement.
required:
- status
- progress
properties:
status:
type: string
enum:
- inprogress
- completed
- expired
- not_started
example: completed
description: The status of the achievement.
progress:
type: number
example: 10
description: The current progress of the customer in the achievement.
startDate:
format: date-time
description: Timestamp at which the customer started the achievement.
type: string
example: 2024-01-01T15:04:05Z07:00
completionDate:
format: date-time
description: Timestamp at which point the customer completed the achievement.
type: string
example: 2024-01-15T15:04:05Z07:00
endDate:
format: date-time
description: Timestamp at which point the achievement ends and resets for the customer.
type: string
example: 2024-02-01T15:04:05Z07:00
AchievementProgressWithDefinition:
allOf:
- $ref: '#/components/schemas/AchievementProgress'
- type: object
required:
- achievementId
- name
- title
- description
- achievementRecurrencePolicy
- achievementActivationPolicy
- campaignId
properties:
achievementId:
type: integer
example: 3
description: The internal ID of the achievement.
name:
type: string
pattern: ^[a-zA-Z]\w+$
example: FreeCoffee10Orders
maxLength: 1000
minLength: 1
description: |
The internal name of the achievement used in API requests.
title:
type: string
description: The display name of the achievement in the Campaign Manager.
example: 50% off on 50th purchase.
description:
type: string
format: string
description: The description of the achievement in the Campaign Manager.
example: 50% off for every 50th purchase in a year.
campaignId:
type: integer
description: The ID of the campaign the achievement belongs to.
example: 3
target:
type: number
example: 10
description: The required number of actions or the transactional milestone to complete the achievement.
achievementRecurrencePolicy:
type: string
enum:
- no_recurrence
- on_expiration
- on_completion
example: no_recurrence
description: |
The policy that determines if and how the achievement recurs.
- `no_recurrence`: The achievement can be completed only once.
- `on_expiration`: The achievement resets after it expires and becomes available again.
- `on_completion`: When the customer progress status reaches `completed`, the achievement resets and becomes available again.
achievementActivationPolicy:
type: string
enum:
- user_action
- fixed_schedule
example: fixed_schedule
description: |
The policy that determines how the achievement starts, ends, or resets.
- `user_action`: The achievement ends or resets relative to when the customer started the achievement.
- `fixed_schedule`: The achievement starts, ends, or resets for all customers following a fixed schedule.
achievementFixedStartDate:
type: string
format: date-time
example: 2024-01-15T15:04:05Z07:00
description: |
The achievement's start date when `achievementActivationPolicy` is equal to `fixed_schedule`.
**Note:** It is an RFC3339 timestamp string.
achievementEndDate:
type: string
format: date-time
example: 2024-02-15T15:04:05Z07:00
description: |
The achievement's end date. If defined, customers cannot participate in the achievement after this date.
**Note:** It is an RFC3339 timestamp string.
achievementAllowRollbackAfterCompletion:
type: boolean
description: When `true`, customer progress can be rolled back in completed achievements.
example: false
CustomerInventory:
type: object
properties:
profile:
$ref: '#/components/schemas/CustomerProfile'
loyalty:
$ref: '#/components/schemas/Loyalty'
referrals:
type: array
items:
$ref: '#/components/schemas/InventoryReferral'
coupons:
type: array
description: |
The coupons reserved by this profile. This array includes hard and soft reservations.
items:
$ref: '#/components/schemas/InventoryCoupon'
giveaways:
type: array
items:
$ref: '#/components/schemas/Giveaway'
achievements:
type: array
items:
$ref: '#/components/schemas/AchievementProgressWithDefinition'
TimePoint:
type: object
required:
- hour
- minute
- second
description: |
The absolute duration after which the achievement ends and resets for a particular customer profile.
**Note**: The duration follows the time zone of the Application this achievement belongs to.
properties:
month:
type: integer
minimum: 1
maximum: 12
description: |
The achievement ends and resets in this month.
**Note**: Only applicable if the period is set to `Y`.
example: 11
dayOfMonth:
type: integer
minimum: 1
maximum: 31
description: |
The achievement ends and resets on this day of the month.
**Note**: Only applicable if the period is set to `Y` or `M`.
example: 23
dayOfWeek:
type: integer
minimum: 1
maximum: 7
description: |
The achievement ends and resets on this day of the week. `1` represents `Monday` and `7` represents `Sunday`.
**Note**: Only applicable if the period is set to `W`.
hour:
type: integer
description: The achievement ends and resets at this hour.
example: 23
minute:
type: integer
description: The achievement ends and resets at this minute.
example: 59
second:
type: integer
description: The achievement ends and resets at this second.
example: 59
example:
month: 11
dayOfMonth: 23
hour: 23
minute: 59
second: 59
AchievementBase:
type: object
properties:
name:
type: string
pattern: ^[a-zA-Z]\w+$
example: Order50Discount
maxLength: 1000
minLength: 1
description: |
The internal name of the achievement used in API requests.
**Note**: The name should start with a letter. This cannot be changed after the achievement has been created.
title:
type: string
description: The display name for the achievement in the Campaign Manager.
example: 50% off on 50th purchase.
description:
type: string
format: string
description: A description of the achievement.
example: 50% off for every 50th purchase in a year.
target:
type: number
description: The required number of actions or the transactional milestone to complete the achievement.
example: 50
period:
type: string
description: |
The relative duration after which the achievement ends and resets for a particular customer profile.
**Note**: The `period` does not start when the achievement is created.
The period is a **positive real number** followed by one letter indicating the time unit.
Examples: `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`.
Available units:
- `s`: seconds
- `m`: minutes
- `h`: hours
- `D`: days
- `W`: weeks
- `M`: months
- `Y`: years
You can also round certain units down to the beginning of period and up to the end of period.:
- `_D` for rounding down days only. Signifies the start of the day.
Example: `30D_D`
- `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.
Example: `23W_U`
**Note**: You can either use the round down and round up option or set an absolute period.
example: 1Y
periodEndOverride:
$ref: '#/components/schemas/TimePoint'
deprecated: true
recurrencePolicy:
type: string
enum:
- no_recurrence
- on_expiration
- on_completion
example: no_recurrence
description: |
The policy that determines if and how the achievement recurs.
- `no_recurrence`: The achievement can be completed only once.
- `on_expiration`: The achievement resets after it expires and becomes available again.
- `on_completion`: When the customer progress status reaches `completed`, the achievement resets and becomes available again.
activationPolicy:
type: string
enum:
- user_action
- fixed_schedule
example: fixed_schedule
description: |
The policy that determines how the achievement starts, ends, or resets.
- `user_action`: The achievement ends or resets relative to when the customer started the achievement.
- `fixed_schedule`: The achievement starts, ends, or resets for all customers following a fixed schedule.
fixedStartDate:
type: string
format: date-time
example: 2024-01-15T15:04:05Z07:00
description: |
The achievement's start date when `activationPolicy` is set to `fixed_schedule`.
**Note:** It must be an RFC3339 timestamp string.
endDate:
type: string
format: date-time
example: 2024-02-15T15:04:05Z07:00
description: |
The achievement's end date. If defined, customers cannot participate in the achievement after this date.
**Note:** It must be an RFC3339 timestamp string.
allowRollbackAfterCompletion:
type: boolean
description: When `true`, customer progress can be rolled back in completed achievements.
example: false
CreateAchievement:
allOf:
- $ref: '#/components/schemas/AchievementBase'
- type: object
required:
- name
- title
- description
- target
AchievementStatusEntry:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/CreateAchievement'
- type: object
properties:
campaignId:
type: integer
description: The ID of the campaign the achievement belongs to.
example: 1
status:
type: string
enum:
- active
- scheduled
example: active
description: The status of the achievement.
currentProgress:
$ref: '#/components/schemas/AchievementProgress'
LoyaltyBalance:
type: object
description: Point balance of a ledger in the Loyalty Program.
properties:
activePoints:
type: number
title: Current Balance
description: Total amount of points awarded to this customer and available to spend.
example: 286
pendingPoints:
type: number
title: Total pending points
description: Total amount of points awarded to this customer but not available until their start date.
example: 50
spentPoints:
type: number
title: Total spent points
description: Total amount of points already spent by this customer.
example: 150
expiredPoints:
type: number
title: Total expired points
description: Total amount of points awarded but never redeemed. They cannot be used anymore.
example: 286
negativePoints:
type: number
title: Current negative balance
description: Total amount of negative points. This implies that `activePoints` is `0`.
example: 286
LoyaltyBalances:
type: object
description: List of loyalty balances for a ledger and its subledgers.
properties:
balance:
$ref: '#/components/schemas/LoyaltyBalance'
title: Loyalty points balance of a ledger
subledgerBalances:
type: object
description: Map of the loyalty balances of the subledgers of a ledger.
additionalProperties:
$ref: '#/components/schemas/LoyaltyBalance'
example:
mysubledger:
activePoints: 286
pendingPoints: 50
spentPoints: 150
expiredPoints: 25
negativePoints: 0
LoyaltyCardBalances:
allOf:
- $ref: '#/components/schemas/LoyaltyBalances'
- type: object
description: List of customer profiles linked to the loyalty card.
properties:
profiles:
type: array
description: Customer profiles linked to the loyalty card.
items:
$ref: '#/components/schemas/LoyaltyCardProfileRegistration'
ProjectedTier:
type: object
required:
- projectedActivePoints
properties:
projectedActivePoints:
type: number
description: The active points of the customer when their current tier expires.
example: 198
stayInTierPoints:
type: number
description: |
The number of points the customer needs to stay in the current tier.
**Note**: This is included in the response when the customer is projected to be downgraded.
example: 2
projectedTierName:
type: string
description: The name of the tier the user will enter once their current tier expires.
example: Tier 1
LoyaltyBalanceWithTier:
allOf:
- $ref: '#/components/schemas/LoyaltyBalance'
- type: object
properties:
currentTier:
$ref: '#/components/schemas/Tier'
description: Customer's current tier.
example: bronze
projectedTier:
$ref: '#/components/schemas/ProjectedTier'
pointsToNextTier:
type: number
description: The number of points required to move up a tier.
example: 20
nextTierName:
type: string
description: |
The name of the next higher tier level in the loyalty program.
**Note**:
- Returns `null` if the customer has reached the highest available tier.
- Returns the lowest level tier name if the customer is not currently assigned to any tier.
example: Silver
LoyaltyBalancesWithTiers:
type: object
description: List of loyalty balances for a ledger and its subledgers.
properties:
balance:
$ref: '#/components/schemas/LoyaltyBalanceWithTier'
title: Loyalty points balance of a ledger
subledgerBalances:
type: object
description: Map of the loyalty balances of the subledgers of a ledger.
additionalProperties:
$ref: '#/components/schemas/LoyaltyBalanceWithTier'
example:
mysubledger:
activePoints: 286
pendingPoints: 50
spentPoints: 150
expiredPoints: 25
negativePoints: 0
CardLedgerTransactionLogEntryIntegrationAPI:
type: object
description: Log entry for a given loyalty card transaction.
required:
- transactionUUID
- created
- programId
- cardIdentifier
- type
- name
- startDate
- expiryDate
- subledgerId
- amount
- id
properties:
transactionUUID:
type: string
description: Unique identifier of the transaction in the UUID format.
example: ce59f12a-f53b-4014-a745-636d93f2bd3f
created:
type: string
format: date-time
description: Date and time the loyalty card transaction occurred.
example: 2022-01-02T15:04:05Z07:00
programId:
type: integer
description: ID of the loyalty program.
example: 324
cardIdentifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
customerSessionId:
type: string
description: ID of the customer session where the transaction occurred.
maxLength: 255
example: 05c2da0d-48fa-4aa1-b629-898f58f1584d
type:
type: string
enum:
- addition
- subtraction
description: |
Type of transaction. Possible values:
- `addition`: Signifies added points.
- `subtraction`: Signifies deducted points.
maxLength: 255
example: addition
name:
type: string
description: Name or reason of the loyalty ledger transaction.
maxLength: 255
example: Reward 10% points of a purchase's current total
startDate:
type: string
description: |
When points become active. Possible values:
- `immediate`: Points are active immediately.
- `on_action`: Points become active based on the customer's action.
- a timestamp value: Points become active at a given date and time.
maxLength: 64
example: 2022-01-02T15:04:05Z07:00
expiryDate:
type: string
description: |
Date when points expire. Possible values are:
- `unlimited`: Points have no expiration date.
- `timestamp value`: Points expire on the given date.
example: 2022-08-02T15:04:05Z07:00
subledgerId:
type: string
description: ID of the subledger.
maxLength: 64
example: sub-123
amount:
type: number
description: Amount of loyalty points added or deducted in the transaction.
example: 10.25
id:
type: integer
description: ID of the loyalty ledger transaction.
example: 123
rulesetId:
type: integer
description: The ID of the ruleset containing the rule that triggered this effect.
example: 11
ruleName:
type: string
description: The name of the rule that triggered this effect.
example: Add 2 points
validityDuration:
type: string
description: |
The duration for which the points remain active, relative to the activation date.
**Note**: This only applies to points for which `awaitsActivation` is `true` and `expiryDate` is not set.
example: 30D
LoyaltyLedgerEntryFlags:
type: object
description: A map of flags providing additional details about the entry.
properties:
createsNegativeBalance:
type: boolean
description: Set to true if the entry creates negative balance.
LedgerTransactionLogEntryIntegrationAPI:
type: object
description: Log entry for a given loyalty profile transaction.
required:
- transactionUUID
- created
- programId
- type
- name
- startDate
- expiryDate
- subledgerId
- amount
- id
properties:
transactionUUID:
type: string
description: Unique identifier of the transaction in the UUID format.
example: ce59f12a-f53b-4014-a745-636d93f2bd3f
created:
type: string
format: date-time
description: Date and time the loyalty transaction occurred.
example: 2022-01-02T15:04:05Z07:00
programId:
type: integer
description: ID of the loyalty program.
example: 324
customerSessionId:
type: string
description: ID of the customer session where the transaction occurred.
maxLength: 255
example: 05c2da0d-48fa-4aa1-b629-898f58f1584d
type:
type: string
enum:
- addition
- subtraction
description: |
Type of transaction. Possible values:
- `addition`: Signifies added points.
- `subtraction`: Signifies deducted points.
maxLength: 255
example: addition
name:
type: string
description: Name or reason of the loyalty ledger transaction.
maxLength: 255
example: Reward 10% points of a purchase's current total
startDate:
type: string
description: |
When points become active. Possible values:
- `immediate`: Points are immediately active.
- `on_action`: Points become active based on the customer's action.
- a timestamp value: Points become active at a given date and time.
maxLength: 64
example: 2022-01-02T15:04:05Z07:00
expiryDate:
type: string
description: |
Date when points expire. Possible values are:
- `unlimited`: Points have no expiration date.
- `timestamp value`: Points expire on the given date.
example: 2022-08-02T15:04:05Z07:00
subledgerId:
type: string
description: ID of the subledger.
maxLength: 64
example: sub-123
amount:
type: number
description: Amount of loyalty points added or deducted in the transaction.
example: 10.25
id:
type: integer
description: ID of the loyalty ledger transaction.
example: 123
rulesetId:
type: integer
description: The ID of the ruleset containing the rule that triggered this effect.
example: 11
ruleName:
type: string
description: The name of the rule that triggered this effect.
example: Add 2 points
flags:
$ref: '#/components/schemas/LoyaltyLedgerEntryFlags'
description: The flags of the transaction, when applicable. The `createsNegativeBalance` flag indicates whether the transaction results in a negative balance.
validityDuration:
type: string
description: |
The duration for which the points remain active, relative to the activation date.
**Note**: This only applies to points for which `awaitsActivation` is `true` and `expiryDate` is not set.
example: 30D
DeleteLoyaltyTransactionsRequest:
type: object
description: Request to delete transactions based on the specified scope.
additionalProperties: false
required:
- scope
properties:
scope:
type: string
description: |
`AllSubledgers` deletes all transactions for the specified customer profile from all ledgers in the loyalty program.
`SelectedSubledgers` deletes all transactions for the specified customer profile only from the given ledgers in the loyalty program.
enum:
- AllSubledgers
- SelectedSubledgers
example: SelectedSubledgers
subledgerIds:
type:
- array
- 'null'
description: |
The IDs of the ledgers from which to delete the customer's transactions. This parameter is required if the `scope` is set to `SelectedSubledgers`.
To specify the main ledger, provide an empty string ("").
items:
type: string
example:
- subledger1
- subledger2
CardLedgerPointsEntryIntegrationAPI:
type: object
description: Loyalty card points with start and expiry dates.
required:
- id
- transactionUUID
- created
- programId
- name
- startDate
- expiryDate
- subledgerId
- amount
properties:
id:
type: integer
description: ID of the transaction that adds loyalty points.
example: 123
transactionUUID:
type: string
description: Unique identifier of the transaction in the UUID format.
example: ce59f12a-f53b-4014-a745-636d93f2bd3f
created:
type: string
format: date-time
description: Date and time the loyalty card points were added.
example: 2022-01-02T15:04:05Z07:00
programId:
type: integer
description: ID of the loyalty program.
example: 324
customerProfileID:
type: string
description: Integration ID of the customer profile linked to the card.
example: URNGV8294NV
customerSessionId:
type: string
description: ID of the customer session where points were added.
maxLength: 255
example: 05c2da0d-48fa-4aa1-b629-898f58f1584d
name:
type: string
description: Name or reason of the transaction that adds loyalty points.
maxLength: 255
example: Reward 10% points of a purchase's current total
startDate:
type: string
description: |
When points become active. Possible values:
- `immediate`: Points are active immediately.
- `timestamp value`: Points become active at a given date and time.
maxLength: 64
example: 2022-01-02T15:04:05Z07:00
expiryDate:
type: string
description: |
Date when points expire. Possible values are:
- `unlimited`: Points have no expiration date.
- `timestamp value`: Points expire on the given date and time.
example: 2022-08-02T15:04:05Z07:00
subledgerId:
type: string
description: ID of the subledger.
maxLength: 64
example: sub-123
amount:
type: number
description: Amount of loyalty points added in the transaction.
example: 10.25
validityDuration:
type: string
description: |
The duration for which the points remain active, relative to the activation date.
**Note**: This only applies to points for which `awaitsActivation` is `true` and `expiryDate` is not set.
example: 30D
LedgerPointsEntryIntegrationAPI:
type: object
description: Loyalty profile points with start and expiry dates.
required:
- id
- transactionUUID
- created
- programId
- name
- startDate
- expiryDate
- subledgerId
- amount
properties:
id:
type: integer
description: ID of the transaction that adds loyalty points.
example: 123
transactionUUID:
type: string
description: Unique identifier of the transaction in the UUID format.
example: ce59f12a-f53b-4014-a745-636d93f2bd3f
created:
type: string
format: date-time
description: Date and time the loyalty points were added.
example: 2022-01-02T15:04:05Z07:00
programId:
type: integer
description: ID of the loyalty program.
example: 324
customerSessionId:
type: string
description: ID of the customer session where points were added.
maxLength: 255
example: 05c2da0d-48fa-4aa1-b629-898f58f1584d
name:
type: string
description: Name or reason of the transaction that adds loyalty points.
maxLength: 255
example: Reward 10% points of a purchase's current total
startDate:
type: string
description: |
When points become active. Possible values:
- `immediate`: Points are active immediately.
- `timestamp value`: Points become active at a given date and time.
maxLength: 64
example: 2022-01-02T15:04:05Z07:00
expiryDate:
type: string
description: |
Date when points expire. Possible values are:
- `unlimited`: Points have no expiration date.
- `timestamp value`: Points expire on the given date and time.
example: 2022-08-02T15:04:05Z07:00
subledgerId:
type: string
description: ID of the subledger.
maxLength: 64
example: sub-123
amount:
type: number
description: Amount of loyalty points added in the transaction.
example: 10.25
validityDuration:
type: string
description: |
The duration for which the points remain active, relative to the activation date.
**Note**: This only applies to points for which `awaitsActivation` is `true` and `expiryDate` is not set.
example: 30D
LabelTargetNone:
type: object
description: Represents the target type when no entity is selected.
properties:
type:
type: string
enum:
- NONE
required:
- type
AudienceReference:
allOf:
- type: object
required:
- id
properties:
id:
type: integer
description: The ID of the audience.
integration:
type: string
description: The third-party integration of the audience.
- $ref: '#/components/schemas/AudienceIntegrationID'
LabelTargetAudience:
type: object
description: |
Represents the targeted audience.
properties:
type:
type: string
enum:
- AUDIENCE
audience:
$ref: '#/components/schemas/AudienceReference'
required:
- type
- audience
LabelTarget:
type: object
oneOf:
- $ref: '#/components/schemas/LabelTargetNone'
- $ref: '#/components/schemas/LabelTargetAudience'
ActivateLoyaltyPoints:
type: object
description: Activate loyalty points
additionalProperties: false
properties:
transactionUUIDs:
type: array
items:
type: string
format: uuid
minItems: 1
maxItems: 50
uniqueItems: true
description: |
An array of transaction UUIDs used to activate specific pending point transactions.
If provided, do not include the `sessionId` parameter.
example:
- 8f1a8d7c-9c3e-4a5e-9f0d-2c5f7a3b1cde
sessionId:
type: string
minLength: 1
description: |
The ID of the session containing the pending point transactions to activate.
If provided, do not include the `transactionUUIDs` parameter.
example: ac08cc3c43470426591ad75b2d685ec04_v2
LoyaltyLedgerEntry:
type: object
description: A single row of the ledger, describing one addition or deduction.
required:
- programID
- type
- amount
- created
- name
- subLedgerID
properties:
created:
type: string
format: date-time
example: 2021-07-20T22:00:00Z
programID:
type: integer
example: 5
customerProfileID:
type: string
example: URNGV8294NV
cardID:
type: integer
example: 241
customerSessionID:
type: string
example: t2gy5s-47274
eventID:
type: integer
example: 5
type:
type: string
description: |
The type of the ledger transaction. Possible values are:
- `addition`
- `subtraction`
- `expire`
- `expiring` (for expiring points ledgers)
example: addition
amount:
type: number
example: 100
startDate:
type: string
format: date-time
example: 2021-07-20T22:00:00Z
expiryDate:
type: string
format: date-time
example: 2022-07-20T22:00:00Z
name:
type: string
description: A name referencing the condition or effect that added this entry, or the specific name provided in an API call.
example: Add points on purchase
subLedgerID:
type: string
description: This specifies if we are adding loyalty points to the main ledger or a subledger.
example: mysubledger
userID:
type: integer
description: This is the ID of the user who created this entry, if the addition or subtraction was done manually.
example: 499
archived:
type: boolean
description: Indicates if the entry belongs to the archived session.
example: false
flags:
$ref: '#/components/schemas/LoyaltyLedgerEntryFlags'
description: A map of flags providing additional details about the entry.
validityDuration:
type: string
description: |
The duration for which the points remain active, relative to the activation date.
**Note**: This only applies to points for which `awaitsActivation` is `true` and `expiryDate` is not set.
example: 30D
ActivateLoyaltyPointsResponse:
type: object
properties:
ledgerEntries:
type: array
description: Updated ledger entries after activation.
items:
$ref: '#/components/schemas/LoyaltyLedgerEntry'
GenerateLoyaltyCard:
type: object
description: The parameters necessary to generate a loyalty card.
properties:
status:
type: string
enum:
- active
- inactive
default: active
description: Status of the loyalty card.
example: active
customerProfileIds:
type: array
description: Integration IDs of the customer profiles linked to the card.
items:
type: string
example:
- R195412
- G244519
cardIdentifier:
$ref: '#/components/schemas/LoyaltyCardIdentifier'
example:
status: inactive
customerProfileIds:
- R195412
- G244519
cardIdentifier: summer-loyalty-card-0543
attributes:
preferredReward: discount
enrollmentSource: mobile
BestPriorTarget:
type: object
required:
- targetType
description: Specifies the target for which the best prior price calculation is taken into consideration.
properties:
targetType:
type: string
enum:
- NONE
- AUDIENCE
description: The type of price target.
example: AUDIENCE
audienceID:
type: integer
description: The AudienceID of an audience. Must be used with "AUDIENCE" target type.
example: 4
BestPriorPriceRequest:
type: object
required:
- skus
- timeframeEndDate
- timeframe
- timeframeEndDateType
properties:
skus:
type: array
minItems: 1
description: List of product SKUs to check when determining the best prior price.
items:
type: string
example:
- comma
- period
timeframeEndDate:
type: string
format: date-time
description: The end date and time that defines the latest time for retrieving historical SKU prices.
example: 2020-11-10T23:00:00Z
timeframe:
type: string
description: The number of days prior to the timeframeEndDate. Only prices within this look back period are considered for the best prior price evaluation.
example: '30'
timeframeEndDateType:
type: string
enum:
- strict
- price
- sale
description: |
Sets the timeframe for retrieving historical pricing data. Can be one of the following values:
- `strict`: The timeframe ends at the `timeframeEndDate` value.
- `price`: The timeframe ends at the start of current price value and takes the prices prior to the start of the current price value into account.
- `sale`: The timeframe ends at the start of current `contextId` and takes the prices prior to the start of the `contextId` into account.
example: sale
target:
$ref: '#/components/schemas/BestPriorTarget'
InfluencingCampaignDetails:
type: object
description: Details about a campaign that influenced the final price.
properties:
campaignId:
type: integer
description: Identifier of the campaign that influenced the final price.
discountValue:
type: number
description: Discount value applied by the campaign.
required:
- campaignId
- discountValue
AdjustmentDetails:
type: object
description: Details about an applied price adjustment.
properties:
referenceId:
type: string
description: The reference identifier used during an `ADD_PRICE_ADJUSTMENT` action.
example: 68851723-e6fa-488f-ace9-112581e6c19b
selectedPriceType:
type: string
description: The selected price type for the SKU targeted by this effect.
example: member
value:
type: number
description: The value of the applied price adjustment.
required:
- referenceId
- selectedPriceType
- value
BestPriorPriceMetadata:
type: object
description: Auxiliary data for found price observation.
properties:
influencingCampaignDetails:
type: array
description: Details about campaigns that influenced the final price.
items:
$ref: '#/components/schemas/InfluencingCampaignDetails'
adjustmentDetails:
$ref: '#/components/schemas/AdjustmentDetails'
type: object
description: Details about the applied price adjustment.
required:
- influencingCampaignDetails
BestPriorPrice:
type: object
required:
- id
- sku
- observedAt
- price
- contextId
- metadata
- target
properties:
id:
type: integer
description: The ID of the historical price.
example: 1
sku:
type: string
description: sku
example: NVR-GN-GV-UUP
observedAt:
type: string
format: date-time
description: The date and time when the price was observed.
example: 2020-11-10T23:00:00Z
contextId:
type: string
description: |
The context ID of the context active at the time of observation.
example: Summer Sale 2025
price:
type: number
description: Price of the item.
example: 99.99
metadata:
$ref: '#/components/schemas/BestPriorPriceMetadata'
target:
$ref: '#/components/schemas/LabelTarget'
BestPriorPriceResponse:
type: array
items:
$ref: '#/components/schemas/BestPriorPrice'
NewCatalog:
allOf:
- type: object
required:
- name
- description
properties:
name:
type: string
description: The cart item catalog name.
example: seafood
description:
type: string
description: A description of this cart item catalog.
example: seafood catalog
subscribedApplicationsIds:
type: array
description: A list of the IDs of the applications that are subscribed to this catalog.
example:
- 1
- 2
- 3
items:
type: integer
Catalog:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/NewCatalog'
- type: object
required:
- version
- createdBy
properties:
version:
type: integer
description: The current version of this catalog.
example: 6
createdBy:
type: integer
description: The ID of user who created this catalog.
example: 6
AddItemCatalogAction:
type: object
description: |
The specific properties of the "ADD" catalog sync action.
required:
- sku
properties:
sku:
type: string
description: The unique SKU of the item to add.
example: SKU1241028
price:
type: number
description: Price of the item.
example: 99.99
attributes:
type: object
description: The attributes of the item to add.
example:
origin: germany
color: blue
product:
$ref: '#/components/schemas/Product'
replaceIfExists:
type: boolean
default: false
description: |
Indicates whether to replace the attributes of the item if the same SKU exists.
**Note**: When set to `true`:
- If you do not provide a new `price` value, the existing `price` value is retained.
- If you do not provide a new `product` value, the `product` value is set to `null`.
example: false
PatchItemCatalogAction:
type: object
description: |
The specific properties of the "PATCH" catalog sync action.
**Note:**
- If you do not provide a new `price` value, the existing `price` value is retained.
- If you do not provide a new `product` value, the `product` value is set to `null`.
required:
- sku
properties:
sku:
type: string
description: The unique SKU of the item to patch.
price:
type: number
description: Price of the item.
example: 99.99
attributes:
type: object
description: The attributes of the item to patch.
product:
$ref: '#/components/schemas/Product'
createIfNotExists:
type: boolean
default: false
description: Indicates whether to create an item if the SKU does not exist.
CatalogActionFilter:
type: object
description: The properties for a single filtering condition in a catalog sync action.
required:
- attr
- op
- value
properties:
attr:
description: The name of the attribute to filter on.
type: string
op:
description: The filtering operator.
type: string
enum:
- EQ
- LT
- LE
- GT
- GE
- IN
value:
description: The value to filter for.
PatchManyItemsCatalogAction:
type: object
description: The specific properties of the "PATCH_MANY" catalog sync action.
properties:
price:
type: number
description: Price of the item.
example: 99.99
filters:
type: array
items:
$ref: '#/components/schemas/CatalogActionFilter'
description: |
The list of filters used to select the items to patch, joined by `AND`.
**Note:** Every item in the catalog will be modified if there are no filters.
attributes:
type: object
description: The attributes of the items to patch.
RemoveItemCatalogAction:
type: object
description: The specific properties of the "REMOVE" catalog sync action.
required:
- sku
properties:
sku:
type: string
description: The unique SKU of the item to remove.
RemoveManyItemsCatalogAction:
type: object
description: The specific properties of the "REMOVE_MANY" catalog sync action.
properties:
filters:
type: array
items:
$ref: '#/components/schemas/CatalogActionFilter'
description: |
The list of filters used to select the items to patch, joined by `AND`.
**Note:** Every item in the catalog will be removed if there are no filters.
NewPriceAdjustment:
type: object
required:
- priceType
- referenceId
properties:
priceType:
type: string
description: The price type (e.g. the price for members only) to apply to a given SKU.
example: member
price:
type:
- number
- 'null'
description: The value of the price type applied to the SKU. When set to `null`, the defined price type no longer applies to the SKU.
example: 100
referenceId:
type: string
description: A unique reference identifier, e.g. a UUID.
example: 68851723-e6fa-488f-ace9-112581e6c19b
minLength: 1
calculatedAt:
type: string
format: date-time
description: The time at which this price was calculated. If provided, this is used to determine the most recent price adjustment to choose if price adjustments overlap. Defaults to internal creation time if not provided.
example: 2021-09-12T10:12:42Z
effectiveFrom:
type: string
format: date-time
description: The date and time from which the price adjustment is effective.
example: 2021-09-12T10:12:42Z
effectiveUntil:
type: string
format: date-time
description: The date and time until which the price adjustment is effective.
example: 2021-09-12T10:12:42Z
contextId:
type: string
description: Identifier of the context of this price adjustment (e.g. summer sale).
example: Summer2025
AddPriceAdjustmentCatalogAction:
type: object
description: |
The specific properties of the "ADD_PRICE_ADJUSTMENT" catalog sync action.
**Note:** You can only use this object if the `Beta` **price types** feature is enabled for your Application.
To enable it, contact your Technical Account Manager.
required:
- sku
- adjustments
properties:
sku:
type: string
description: The SKU of the item for which the price is being adjusted.
example: SKU1241028
adjustments:
type: array
description: A list of adjustments to apply to a given item.
items:
$ref: '#/components/schemas/NewPriceAdjustment'
minItems: 1
maxItems: 100
CatalogAction:
type: object
description: Definition of all the properties that are needed for a single catalog sync action.
required:
- type
- payload
oneOf:
- properties:
type:
const: ADD
description: The type of sync action.
payload:
$ref: '#/components/schemas/AddItemCatalogAction'
description: The payload of sync action.
required:
- type
- payload
example:
type: ADD
payload:
sku: T123
attributes:
type: shoes
color: blue
replaceIfExists: true
- properties:
type:
const: PATCH
payload:
$ref: '#/components/schemas/PatchItemCatalogAction'
required:
- type
- payload
- properties:
type:
const: PATCH_MANY
payload:
$ref: '#/components/schemas/PatchManyItemsCatalogAction'
required:
- type
- payload
- properties:
type:
const: REMOVE
payload:
$ref: '#/components/schemas/RemoveItemCatalogAction'
required:
- type
- payload
- properties:
type:
const: REMOVE_MANY
payload:
$ref: '#/components/schemas/RemoveManyItemsCatalogAction'
required:
- type
- payload
- properties:
type:
const: ADD_PRICE_ADJUSTMENT
payload:
$ref: '#/components/schemas/AddPriceAdjustmentCatalogAction'
required:
- type
- payload
CatalogSyncRequest:
type: object
required:
- actions
properties:
actions:
type: array
maxItems: 1000
minItems: 1
items:
$ref: '#/components/schemas/CatalogAction'
version:
type: integer
minimum: 1
description: The version number of the catalog to apply the actions on.
example: 244
requestBodies:
ReturnIntegrationRequest:
content:
application/json:
schema:
$ref: '#/components/schemas/ReturnIntegrationRequest'
description: body
required: true
AttributeQuery:
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeQuery'
description: body
required: true
IntegrationEventV2Request:
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEventV2Request'
examples:
Full request:
summary: Full request
x-vertical: none
value:
profileId: URNGV8294NV
storeIntegrationId: STORE-001
evaluableCampaignIds:
- 10
- 12
type: pageViewed
attributes:
myAttribute: myValue
responseContent:
- triggeredCampaigns
- customerProfile
loyaltyCards:
- loyalty-card-1
eCommerce:
x-vertical: ecommerce
summary: 'Example: eCommerce'
description: Track a custom event such as newsletter sign-up.
value:
profileId: customer-123
type: newsletter_signup
attributes:
SubscriptionType: weekly
responseContent:
- customerProfile
- triggeredCampaigns
QSR & dining:
x-vertical: qsr
summary: 'Example: QSR & dining'
description: |
Record a customer's first app sign-in so you can automatically trigger a welcome reward or bonus loyalty points.
value:
profileId: customer-456
type: app_first_signin
attributes:
SignupChannel: mobile_app
DeviceType: ios
responseContent:
- customerProfile
- triggeredCampaigns
- loyalty
Financial services:
x-vertical: finance
summary: 'Example: Financial services'
description: |
Track when a customer completes identity verification on a cryptocurrency platform
to trigger a reward, such as €10 in cryptocurrency.
value:
profileId: customer-789
type: identity_verification_completed
attributes:
VerificationLevel: full_kyc
Platform: mobile_app
responseContent:
- customerProfile
- triggeredCampaigns
Travel & hospitality:
x-vertical: travel
summary: 'Example: Travel & hospitality'
description: |
Track when a customer attends their fifth show in a year to automatically
assign a unique voucher code to their account as an omnichannel reward.
value:
profileId: customer-321
type: show_attendance
attributes:
Venue: Grand Theater
EventCategory: live_music
AttendanceCount: 5
responseContent:
- customerProfile
- triggeredCampaigns
description: body
required: true
CouponReservations:
content:
application/json:
schema:
$ref: '#/components/schemas/CouponReservations'
description: body
required: true
ActivateLoyaltyPoints:
content:
application/json:
schema:
$ref: '#/components/schemas/ActivateLoyaltyPoints'
examples:
Full request:
summary: Full request
x-vertical: none
value:
transactionUUIDs:
- 8f1a8d7c-9c3e-4a5e-9f0d-2c5f7a3b1cde
sessionId: ac08cc3c43470426591ad75b2d685ec04_v2
UsingTransactionUUIDs:
summary: Activate points using transaction UUIDs
value:
transactionUUIDs:
- 8f1a8d7c-9c3e-4a5e-9f0d-2c5f7a3b1cde
- 12b3c456-78d9-4e0f-a1b2-3456789abcde
UsingSessionId:
summary: Activate points using sessionID
value:
sessionId: ac08cc3c43470426591ad75b2d685ec04_v2
description: body
required: true
BestPriorPrice:
content:
application/json:
schema:
$ref: '#/components/schemas/BestPriorPriceRequest'
description: body
required: true
parameters:
skip:
name: skip
in: query
required: false
description: The number of items to skip when paging through large result sets.
example: 100
schema:
type: integer
pageSize:
name: pageSize
in: query
required: false
description: The number of items in the response.
example: 1000
schema:
type: integer
minimum: 1
maximum: 1000
default: 1000