openapi: 3.0.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 more background information about this API, see [Integration API overview](https://docs.talon.one/docs/dev/integration-api/overview)
For example, use this API to share shopping cart information as a session with Talon.One and evaluate promotion
rules. You can also create custom events to track specific actions that do not fit into the session data model.
Ensure you [authenticate](#section/Authentication) to make requests to the API.
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 reference docs](https://docs.talon.one/management-api).
- Integrate with Talon.One from a CEP or CDP platform, see [the Third-party API reference docs](https://docs.talon.one/third-party-api).
# Authentication
servers:
- url: https://yourbaseurl.talon.one
security: []
tags:
- 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: 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:** The currency for the session and the cart items in the session is the currency set for the
Application that owns this session.
### 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:** 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).
Performance tips
- 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).
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#operation/getApplicationSessions) endpoint.
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:**
- 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`.
schema:
type: string
format: date-time
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationRequest'
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#operation/getApplicationSessions) endpoint.
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).
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`.
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#operation/getApplicationSessions) endpoint.
schema:
type: string
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`.
- Modified budgets and triggered effects when the session was closed are rolled back except for the list below.
Effects and budgets unimpacted by a session reopening
The following effects and budgets are left the way they were once the session was originally closed:
- Add free item effect
- Any non-pending loyalty points
- Award giveaway
- Coupon and referral creation
- Coupon reservation
- Custom effect
- Update attribute value
- Update cart item attribute value
To see an example of roll back, see the Cancelling a session with campaign budgets 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#operation/getApplicationSessions) endpoint.
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.
Performance tips
- 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).
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.
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.
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.
required: false
schema:
type: boolean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerProfileIntegrationRequestV2'
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 perfomance of the API call by returning a 204 response.
- `no`: Returns a 200 response that contains the updated customer profiles.
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'
'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:
1. 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'
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.
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.
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.
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.
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.
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.
required: true
schema:
type: string
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/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).
Important
1. `profileId` is required even though the schema does not say it.
1. 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.
1. We recommend sending requests sequentially. See [Managing parallel requests](https://docs.talon.one/docs/dev/getting-started/integration-tutorial#managing-parallel-requests).
security:
- api_key_v1: []
tags:
- Events
parameters:
- name: silent
in: query
description: |
Possible values: `yes` or `no`.
- `yes`: Increases the perfomance of the API call by returning a 204 response.
- `no`: Returns a 200 response that contains the updated customer profiles.
required: false
schema:
type: string
default: 'yes'
- name: dry
in: query
description: |
Indicates whether to persist the changes. Changes are ignored when `dry=true`.
required: false
schema:
type: boolean
requestBody:
$ref: '#/components/requestBodies/IntegrationEventV2Request'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/TrackEventV2Response'
'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.
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.
security:
- api_key_v1: []
tags:
- Referrals
parameters:
- name: silent
in: query
description: |
Possible values: `yes` or `no`.
- `yes`: Increases the perfomance of the API call by returning a 204 response.
- `no`: Returns a 200 response that contains the updated customer profiles.
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.
**Important:** 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#operation/updateCustomerSessionV2) endpoint.
- The Management API with the [List application's customers](https://docs.talon.one/management-api#operation/getApplicationCustomers) endpoint.
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 effect](https://docs.talon.one/docs/product/rules/effects/using-effects#reserving-a-coupon-code).
- 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 will be associated with the specified customer profiles (they show up when using the [List customer data](https://docs.talon.one/integration-api#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#operation/getCustomerInventory) 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.
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.
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.
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#operation/updateCustomerSessionV2) endpoint.
- The Management API with the [List application's customers](https://docs.talon.one/management-api#operation/getApplicationCustomers) endpoint.
schema:
type: string
- name: profile
in: query
required: false
description: Set to `true` to include customer profile information in the response.
schema:
type: boolean
- name: referrals
in: query
required: false
description: Set to `true` to include referral information in the response.
schema:
type: boolean
- name: coupons
in: query
required: false
description: Set to `true` to include coupon information in the response.
schema:
type: boolean
- name: loyalty
in: query
required: false
description: Set to `true` to include loyalty information in the response.
schema:
type: boolean
- name: giveaways
in: query
required: false
description: Set to `true` to include giveaways information in the response.
schema:
type: boolean
- name: achievements
in: query
required: false
description: Set to `true` to include achievement information in the response.
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/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.
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.
required: true
schema:
type: string
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:**
- 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.
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.
style: form
explode: false
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 points
description: |
Retrieve loyalty ledger balances for the given Integration ID in the specified loyalty program.
You can filter balances by date and subledger ID.
**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.
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.
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:**
- 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.
schema:
type: string
format: date-time
- name: subledgerId
in: query
required: false
description: The ID of the subledger by which we filter the data.
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.
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.
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.
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.
required: true
schema:
type: string
maxLength: 108
- name: subledgerId
in: query
required: false
description: Filter results by one or more subledger IDs. Must be exact match.
style: form
explode: false
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.
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:**
- 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.
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:**
- 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.
schema:
type: string
format: date-time
- name: pageSize
in: query
required: false
description: The number of items in the response.
schema:
type: integer
minimum: 1
maximum: 1000
default: 1000
- name: skip
in: query
required: false
description: The number of items to skip when paging through large result sets.
schema:
type: integer
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.
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.
schema:
type: string
- name: subledgerId
in: query
required: false
description: The ID of the subledger by which we filter the data.
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.
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:**
- 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.
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:**
- 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.
schema:
type: string
format: date-time
- name: pageSize
in: query
required: false
description: The number of items in the response.
schema:
type: integer
minimum: 1
maximum: 50
default: 50
- name: skip
in: query
required: false
description: The number of items to skip when paging through large result sets.
schema:
type: integer
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}/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.
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.
required: true
schema:
type: string
maxLength: 108
- name: status
in: query
required: false
description: Filter points based on their status.
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.
style: form
explode: false
schema:
type: array
items:
type: string
- name: pageSize
in: query
required: false
description: The number of items in the response.
schema:
type: integer
minimum: 1
maximum: 50
default: 50
- name: skip
in: query
required: false
description: The number of items to skip when paging through large result sets.
schema:
type: integer
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.
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.
schema:
type: string
- name: status
in: query
required: false
description: Filter points based on their status.
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.
schema:
type: string
- name: pageSize
in: query
required: false
description: The number of items in the response.
schema:
type: integer
minimum: 1
maximum: 50
default: 50
- name: skip
in: query
required: false
description: The number of items to skip when paging through large result sets.
schema:
type: integer
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}/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:**
- 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.
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/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**.
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'
components:
requestBodies:
IntegrationEventV2Request:
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEventV2Request'
description: body
required: true
AttributeQuery:
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeQuery'
description: body
required: true
ReturnIntegrationRequest:
content:
application/json:
schema:
$ref: '#/components/schemas/ReturnIntegrationRequest'
description: body
required: true
CouponReservations:
content:
application/json:
schema:
$ref: '#/components/schemas/CouponReservations'
description: body
required: true
securitySchemes:
api_key_v1:
type: apiKey
name: Authorization
in: header
description: |
To authenticate to use the Integration API, generate an API key in the Campaign Manager
then prefix it with `ApiKey-v1`.
To generate an API key:
1. Log into the Campaign Manager and open the Application of your choice, or create one.
1. Click **Settings** > **Developer settings**.
1. Click **Create API Key** and give it a name and an expiration date, then click **Create API Key**.
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:
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
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'
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.
IdentifiableEntity:
type: object
required:
- id
properties:
id:
type: integer
description: Unique ID for this entity. Not to be confused with the Integration ID, which is set by your integration layer and used in most endpoints.
example: 6
Entity:
type: object
required:
- id
- created
properties:
id:
type: integer
description: 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'
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'
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'
AccountEntity:
type: object
required:
- accountId
properties:
accountId:
type: integer
description: The ID of the account that owns this entity.
example: 3886
UserEntity:
type: object
required:
- userId
properties:
userId:
type: integer
description: The ID of the user associated with this entity.
example: 388
EmailEntity:
type: object
required:
- email
properties:
email:
type: string
format: email
example: john.doe@example.com
description: The email address associated with the user profile.
ApplicationEntity:
type: object
required:
- applicationId
properties:
applicationId:
type: integer
description: The ID of the application that owns this entity.
example: 322
LoyaltyProgramEntity:
type: object
required:
- programID
properties:
programID:
type: integer
description: The ID of the loyalty program that owns this entity.
example: 125
MultiApplicationEntity:
type: object
required:
- applicationIds
properties:
applicationIds:
type: array
minItems: 1
description: The IDs of the Applications that are related to this entity.
items:
type: integer
CampaignEntity:
type: object
required:
- campaignId
properties:
campaignId:
type: integer
title: Campaign ID
description: The ID of the campaign that owns this entity.
example: 211
ApplicationCustomerEntity:
type: object
properties:
profileId:
type: integer
description: The globally unique Talon.One ID of the customer that created this entity.
example: 138
ApplicationStoreEntity:
type: object
properties:
storeId:
type: integer
description: The ID of the store.
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'
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
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: 999999
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'
minimum: 0
description: Timestamp at which point the coupon becomes valid.
expiryDate:
type: string
format: date-time
example: '2023-08-24T14:15:22Z'
minimum: 0
description: Expiration date of the coupon. Coupon never expires if this is omitted.
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
example: SUMMER-####-####
additionalProperties: false
required:
- couponPattern
- validCharacters
LoginParams:
allOf:
- $ref: '#/components/schemas/EmailEntity'
- type: object
properties:
password:
type: string
description: The password for your account.
example: admin123456
required:
- password
AttributesMandatory:
type: object
description: Arbitrary settings associated with attributes.
properties:
campaigns:
type: array
items:
type: string
description: List of mandatory attributes for campaigns.
coupons:
type: array
items:
type: string
description: List of mandatory attributes for campaigns.
AttributesSettings:
type: object
description: Arbitrary settings associated with attributes.
properties:
mandatory:
$ref: '#/components/schemas/AttributesMandatory'
UpdateApplication:
type: object
properties:
name:
type: string
description: The name of this application.
minLength: 1
example: My Application
description:
type: string
description: A longer description of the application.
example: A test Application
timezone:
type: string
description: A string containing an IANA timezone descriptor.
minLength: 1
example: Europe/Berlin
currency:
type: string
description: The default currency for new customer sessions.
minLength: 1
example: EUR
caseSensitivity:
type: string
enum:
- sensitive
- insensitive-uppercase
- insensitive-lowercase
description: The case sensitivity behavior to check coupon codes in the campaigns of this Application.
example: sensitive
attributes:
type: object
description: Arbitrary properties associated with this campaign.
additionalProperties: true
limits:
type: array
description: Default limits for campaigns created in this application.
items:
$ref: '#/components/schemas/LimitConfig'
defaultDiscountScope:
type: string
example: sessionTotal
description: |
The default scope to apply `setDiscount` effects on if no scope was provided with the effect.
enum:
- sessionTotal
- cartItems
- additionalCosts
enableCascadingDiscounts:
type: boolean
description: Indicates if discounts should cascade for this Application.
example: true
enableFlattenedCartItems:
type: boolean
example: true
description: |
Indicates if cart items of quantity larger than one should be separated into different items of quantity one.
attributesSettings:
$ref: '#/components/schemas/AttributesSettings'
sandbox:
type: boolean
description: Indicates if this is a live or sandbox Application.
example: true
enablePartialDiscounts:
type: boolean
description: Indicates if this Application supports partial discounts.
example: false
defaultDiscountAdditionalCostPerItemScope:
type: string
description: |
The default scope to apply `setDiscountPerItem` effects on if no scope was provided with the effect.
example: price
enum:
- price
- itemTotal
- additionalCosts
defaultEvaluationGroupId:
type: integer
description: The ID of the default campaign evaluation group to which new campaigns will be added unless a different group is selected when creating the campaign.
example: 3
defaultCartItemFilterId:
type: integer
description: The ID of the default Cart-Item-Filter for this application.
example: 3
enableCampaignStateManagement:
type: boolean
description: |
Indicates whether the campaign staging and revisions feature is enabled for the Application.
**Important:** After this feature is enabled, it cannot be disabled.
example: false
required:
- name
- timezone
- currency
Application:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/UpdateApplication'
- type: object
required:
- loyaltyPrograms
properties:
loyaltyPrograms:
type: array
description: An array containing all the loyalty programs to which this application is subscribed.
items:
$ref: '#/components/schemas/LoyaltyProgram'
NewCampaignGroup:
type: object
properties:
name:
type: string
description: The name of the campaign access group.
minLength: 1
example: Europe access group
description:
type: string
description: A longer description of the campaign access group.
example: A group that gives access to all the campaigns for the Europe market.
subscribedApplicationsIds:
type: array
description: A list of IDs of the Applications that this campaign access group is enabled for.
items:
type: integer
example:
- 1
- 2
- 3
campaignIds:
type: array
description: A list of IDs of the campaigns that are part of the campaign access group.
items:
type: integer
example:
- 4
- 6
- 8
required:
- name
CampaignGroup:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/NewCampaignGroup'
- type: object
UpdateCampaignGroup:
allOf:
- $ref: '#/components/schemas/NewCampaignGroup'
- type: object
NewCampaign:
allOf:
- $ref: '#/components/schemas/BaseCampaign'
- type: object
properties:
evaluationGroupId:
type: integer
title: Evaluation Group ID
example: 2
description: The ID of the campaign evaluation group the campaign belongs to.
CampaignVersions:
type: object
properties:
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
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.
additionalProperties: true
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#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
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
required:
- name
- state
- tags
- limits
- features
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'
Revision:
allOf:
- $ref: '#/components/schemas/IdentifiableEntity'
- $ref: '#/components/schemas/RevisionActivation'
- type: object
required:
- created
- createdBy
- accountId
- applicationId
- campaignId
properties:
accountId:
type: integer
applicationId:
type: integer
campaignId:
type: integer
created:
type: string
format: date-time
createdBy:
type: integer
activatedAt:
type: string
format: date-time
activatedBy:
type: integer
currentVersion:
$ref: '#/components/schemas/RevisionVersion'
RevisionActivation:
type: object
properties:
activateAt:
type: string
format: date-time
RevisionVersion:
allOf:
- $ref: '#/components/schemas/IdentifiableEntity'
- type: object
required:
- accountId
- applicationId
- campaignId
- created
- createdBy
- revisionId
- version
properties:
accountId:
type: integer
applicationId:
type: integer
campaignId:
type: integer
created:
type: string
format: date-time
createdBy:
type: integer
revisionId:
type: integer
version:
type: integer
- $ref: '#/components/schemas/NewRevisionVersion'
NewRevisionVersion:
type: object
properties:
name:
type: string
title: Campaign Name
description: A user-facing name for this campaign.
minLength: 1
example: Summer promotions
startTime:
type: string
format: date-time
description: Timestamp when the campaign will become active.
example: '2021-07-20T22:00:00Z'
nullable: true
endTime:
type: string
format: date-time
description: Timestamp when the campaign will become inactive.
example: '2021-09-22T22:00:00Z'
nullable: true
attributes:
type: object
description: Arbitrary properties associated with this campaign.
additionalProperties: true
description:
type: string
title: Campaign Description
description: A detailed description of the campaign.
example: Campaign for all summer 2021 promotions
nullable: true
activeRulesetId:
type: integer
description: The ID of the ruleset this campaign template will use.
example: 5
nullable: true
tags:
type: array
description: A list of tags for the campaign template.
maxItems: 50
items:
type: string
minLength: 1
maxLength: 50
couponSettings:
$ref: '#/components/schemas/CodeGeneratorSettings'
referralSettings:
$ref: '#/components/schemas/CodeGeneratorSettings'
limits:
type: array
description: The set of limits that will operate for this campaign version.
items:
$ref: '#/components/schemas/LimitConfig'
features:
type: array
description: A list of features for the campaign template.
items:
type: string
enum:
- coupons
- referrals
- loyalty
- giveaways
- strikethrough
- achievements
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: A campaign state described exactly as in the Campaign Manager.
enum:
- expired
- scheduled
- running
- disabled
- archived
example: running
storesImported:
type: boolean
description: Indicates whether the linked stores were imported via a CSV file.
example: true
required:
- state
- description
- type
- budgets
- frontendState
- storesImported
NewRuleset:
type: object
required:
- rules
- bindings
properties:
rules:
type: array
description: Set of rules to apply.
items:
$ref: '#/components/schemas/Rule'
strikethroughRules:
type: array
description: Set of rules to apply for strikethrough.
items:
$ref: '#/components/schemas/Rule'
bindings:
type: array
description: An array that provides objects with variable names (name) and talang expressions to whose result they are bound (expression) during rule evaluation. The order of the evaluation is decided by the position in the array.
items:
$ref: '#/components/schemas/Binding'
example: []
rbVersion:
type: string
description: The version of the rulebuilder used to create this ruleset.
example: v2
activate:
type: boolean
description: Indicates whether this created ruleset should be activated for the campaign that owns it.
example: true
Ruleset:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/UserEntity'
- $ref: '#/components/schemas/NewRuleset'
- type: object
properties:
campaignId:
type: integer
title: Campaign ID
description: The ID of the campaign that owns this entity.
example: 320
templateId:
type: integer
title: Campaign Template ID
description: The ID of the campaign template that owns this entity.
example: 3
activatedAt:
type: string
format: date-time
description: Timestamp indicating when this Ruleset was activated.
Binding:
type: object
required:
- name
- expression
properties:
name:
type: string
description: A descriptive name for the value to be bound.
example: my property
type:
type: string
description: |
The kind of binding. Possible values are:
- `bundle`
- `cartItemFilter`
- `subledgerBalance`
- `templateParameter`
example: templateParameter
expression:
type: array
description: A Talang expression that will be evaluated and its result attached to the name of the binding.
items: {}
valueType:
type: string
description: |
Can be one of the following:
- `string`
- `number`
- `boolean`
example: string
Rule:
type: object
required:
- title
- condition
- effects
properties:
id:
type: string
format: uuid
description: A unique identifier for the rule.
example: 7fa800a8-ac8d-4792-85dc-c4650dcc8f23
parentId:
type: string
format: uuid
description: The ID of the rule that was copied to create this rule.
example: 7fa800a8-ac8d-4792-85dc-c4650dcc8f23
title:
type: string
description: A short description of the rule.
example: Give discount via coupon
description:
type: string
description: A longer, more detailed description of the rule.
example: Creates a discount when a coupon is valid
bindings:
type: array
description: An array that provides objects with variable names (name) and talang expressions to whose result they are bound (expression) during rule evaluation. The order of the evaluation is decided by the position in the array.
items:
$ref: '#/components/schemas/Binding'
condition:
type: array
description: A Talang expression that will be evaluated in the context of the given event.
minItems: 1
example:
- and
- - couponValid
items: {}
effects:
type: array
description: An array of effectful Talang expressions in arrays that will be evaluated when a rule matches.
items:
type: array
items: {}
example:
- catch
- - noop
- - setDiscount
- 10% off
- - '*'
- - .
- Session
- Total
- - /
- 10
- 100
TemplateLimitConfig:
allOf:
- $ref: '#/components/schemas/LimitConfig'
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
CampaignSet:
allOf:
- $ref: '#/components/schemas/ApplicationEntity'
- type: object
required:
- set
- version
- id
properties:
id:
type: integer
description: Internal ID of this entity.
example: 6
version:
type: integer
minimum: 1
description: Version of the campaign set.
example: 3
set:
$ref: '#/components/schemas/CampaignSetBranchNode'
updatedBy:
type: string
description: Name of the user who last updated this campaign set, if available.
example: Jane Doe
CampaignSetNode:
type: object
required:
- type
properties:
type:
type: string
example: type
oneOf:
- $ref: '#/components/schemas/CampaignSetBranchNode'
- $ref: '#/components/schemas/CampaignSetLeafNode'
CampaignSetBranchNode:
type: object
additionalProperties: false
required:
- type
- name
- operator
- elements
- groupId
- evaluationMode
- locked
- evaluationScope
properties:
type:
type: string
description: Indicates the node type.
enum:
- SET
example: SET
name:
type: string
description: Name of the set.
example: name
operator:
type: string
description: An indicator of how the set operates on its elements.
enum:
- ALL
- FIRST
example: ALL
elements:
type: array
description: Child elements of this set.
items:
$ref: '#/components/schemas/CampaignSetNode'
groupId:
type: integer
description: The ID of the campaign set.
locked:
type: boolean
description: An indicator of whether the campaign set is locked for modification.
description:
type: string
description: A description of the campaign set.
evaluationMode:
type: string
enum:
- stackable
- listOrder
- lowestDiscount
- highestDiscount
description: The mode by which campaigns in the campaign evaluation group are evaluated.
evaluationScope:
type: string
enum:
- cartItem
- session
description: The evaluation scope of the campaign evaluation group.
CampaignSetLeafNode:
type: object
additionalProperties: false
required:
- type
- campaignId
properties:
type:
type: string
description: Indicates the node type.
enum:
- CAMPAIGN
campaignId:
type: integer
description: ID of the campaign
NewCampaignSet:
allOf:
- $ref: '#/components/schemas/ApplicationEntity'
- type: object
required:
- set
- version
properties:
version:
type: integer
minimum: 1
example: 2
description: Version of the campaign set.
set:
$ref: '#/components/schemas/CampaignSetBranchNode'
NewCampaignEvaluationGroup:
type: object
required:
- name
- parentId
- evaluationMode
- locked
- evaluationScope
properties:
name:
type: string
description: The name of the campaign evaluation group.
example: Summer campaigns
parentId:
type: integer
minimum: 1
description: The ID of the parent group that contains the campaign evaluation group.
example: 2
description:
type: string
description: A description of the campaign evaluation group.
example: This campaign evaluation group contains all campaigns that are running in the summer.
evaluationMode:
type: string
enum:
- stackable
- listOrder
- lowestDiscount
- highestDiscount
description: The mode by which campaigns in the campaign evaluation group are evaluated.
evaluationScope:
type: string
enum:
- cartItem
- session
description: The evaluation scope of the campaign evaluation group.
locked:
description: An indicator of whether the campaign evaluation group is locked for modification.
type: boolean
example: false
UpdateCampaignEvaluationGroup:
allOf:
- $ref: '#/components/schemas/NewCampaignEvaluationGroup'
CampaignEvaluationGroup:
allOf:
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/NewCampaignEvaluationGroup'
- $ref: '#/components/schemas/IdentifiableEntity'
ReferralConstraints:
type: object
properties:
startDate:
type: string
format: date-time
minimum: 0
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
minimum: 0
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.
additionalProperties: true
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
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.
additionalProperties: true
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
InventoryReferral:
allOf:
- $ref: '#/components/schemas/Referral'
- type: object
required:
- referredCustomers
properties:
referredCustomers:
type: array
description: An array of referred customers.
items:
type: string
AttributeQuery:
type: object
additionalProperties: true
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
NewCoupons:
allOf:
- $ref: '#/components/schemas/CouponConstraints'
- $ref: '#/components/schemas/CouponLimitConfigs'
- type: object
additionalProperties: false
required:
- numberOfCoupons
- usageLimit
properties:
numberOfCoupons:
type: integer
description: The number of new coupon codes to generate for the campaign. Must be at least 1.
example: 1
uniquePrefix:
title: Coupon code unique prefix
type: string
description: |
**DEPRECATED** To create more than 20,000 coupons in one request, use [Create coupons asynchronously](https://docs.talon.one/management-api#operation/createCouponsAsync) endpoint.
example: ''
attributes:
type: object
description: Arbitrary properties associated with this item.
additionalProperties: true
example:
venueId: 12
recipientIntegrationId:
title: Receiving customer profile integration ID
type: string
maxLength: 1000
description: The integration ID for this coupon's beneficiary's profile.
example: URNGV8294NV
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.
items:
type: string
example:
- A
- B
- G
- 'Y'
couponPattern:
type: string
description: |
The pattern used to generate coupon codes.
The character `#` is a placeholder and is replaced by a random character from the `validCharacters` set.
maxLength: 100
minLength: 3
example: SUMMER-#####
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
NewCouponsForMultipleRecipients:
allOf:
- $ref: '#/components/schemas/CouponConstraints'
- type: object
additionalProperties: false
required:
- recipientsIntegrationIds
- usageLimit
properties:
attributes:
type: object
description: Arbitrary properties associated with this item.
additionalProperties: true
example:
venueId: 12
recipientsIntegrationIds:
title: Receiving customer profiles integration IDs
type: array
example:
- URNGV8294NV
- BZGGC2454PA
items:
type: string
description: The integration IDs for recipients.
maxItems: 1000
minItems: 1
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
couponPattern:
type: string
description: |
The pattern used to generate coupon codes. The character `#` is a placeholder and is replaced by a random character from the `validCharacters` set.
example: SUMMER-#####
maxLength: 100
minLength: 3
UpdateCoupon:
allOf:
- $ref: '#/components/schemas/CouponConstraints'
- $ref: '#/components/schemas/CouponLimitConfigs'
- type: object
additionalProperties: false
properties:
recipientIntegrationId:
title: Receiving customer profile integration ID
type: string
maxLength: 1000
description: The integration ID for this coupon's beneficiary's profile.
example: URNGV8294NV
attributes:
type: object
description: Arbitrary properties associated with this item.
additionalProperties: true
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
UpdateCouponBatch:
allOf:
- $ref: '#/components/schemas/CouponConstraints'
- type: object
additionalProperties: false
properties:
attributes:
type: object
description: |
Optional property to set the value of custom coupon attributes. They are defined in the Campaign Manager,
see [Managing attributes](https://docs.talon.one/docs/product/account/dev-tools/managing-attributes).
Coupon attributes can also be set to _mandatory_ in your Application [settings](https://docs.talon.one/docs/product/applications/using-attributes#making-attributes-mandatory).
If your Application uses mandatory attributes, you must use this property to set their value.
additionalProperties: true
batchID:
title: Batch ID
type: string
description: The ID of the batch the coupon(s) belong to.
Coupon:
allOf:
- $ref: '#/components/schemas/Entity'
- $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.
additionalProperties: true
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
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
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.
CampaignAnalytics:
allOf:
- type: object
required:
- date
- campaignRevenue
- totalCampaignRevenue
- campaignRefund
- totalCampaignRefund
- campaignDiscountCosts
- totalCampaignDiscountCosts
- campaignRefundedDiscounts
- totalCampaignRefundedDiscounts
- campaignFreeItems
- totalCampaignFreeItems
- referralRedemptions
- totalReferralRedemptions
- couponRedemptions
- totalCouponRedemptions
- couponRolledbackRedemptions
- totalCouponRolledbackRedemptions
- couponsCreated
- totalCouponsCreated
- referralsCreated
- totalReferralsCreated
- addedLoyaltyPoints
- totalAddedLoyaltyPoints
- deductedLoyaltyPoints
- totalDeductedLoyaltyPoints
properties:
date:
type: string
format: date-time
example: '2021-10-12T10:12:42Z'
campaignRevenue:
type: number
description: Amount of revenue in this campaign (for coupon or discount sessions).
example: 3539.76
totalCampaignRevenue:
type: number
description: Amount of revenue in this campaign since it began (for coupon or discount sessions).
example: 5784.63
campaignRefund:
type: number
description: Amount of refunds in this campaign (for coupon or discount sessions).
totalCampaignRefund:
type: number
description: Amount of refunds in this campaign since it began (for coupon or discount sessions).
campaignDiscountCosts:
type: number
description: Amount of cost caused by discounts given in the campaign.
totalCampaignDiscountCosts:
type: number
description: Amount of cost caused by discounts given in the campaign since it began.
campaignRefundedDiscounts:
type: number
description: Amount of discounts rolledback due to refund in the campaign.
totalCampaignRefundedDiscounts:
type: number
description: Amount of discounts rolledback due to refund in the campaign since it began.
campaignFreeItems:
type: integer
description: Amount of free items given in the campaign.
totalCampaignFreeItems:
type: integer
description: Amount of free items given in the campaign since it began.
example: 86
couponRedemptions:
type: integer
description: Number of coupon redemptions in the campaign.
totalCouponRedemptions:
type: integer
description: Number of coupon redemptions in the campaign since it began.
couponRolledbackRedemptions:
type: integer
description: Number of coupon redemptions that have been rolled back (due to canceling closed session) in the campaign.
totalCouponRolledbackRedemptions:
type: integer
description: Number of coupon redemptions that have been rolled back (due to canceling closed session) in the campaign since it began.
referralRedemptions:
type: integer
description: Number of referral redemptions in the campaign.
totalReferralRedemptions:
type: integer
description: Number of referral redemptions in the campaign since it began.
couponsCreated:
type: integer
description: Number of coupons created in the campaign by the rule engine.
totalCouponsCreated:
type: integer
description: Number of coupons created in the campaign by the rule engine since it began.
referralsCreated:
type: integer
description: Number of referrals created in the campaign by the rule engine.
totalReferralsCreated:
type: integer
description: Number of referrals created in the campaign by the rule engine since it began.
addedLoyaltyPoints:
type: number
description: Number of added loyalty points in the campaign in a specific interval.
example: 250
totalAddedLoyaltyPoints:
type: number
description: Number of added loyalty points in the campaign since it began.
example: 340
deductedLoyaltyPoints:
type: number
description: Number of deducted loyalty points in the campaign in a specific interval.
example: 120
totalDeductedLoyaltyPoints:
type: number
description: Number of deducted loyalty points in the campaign since it began.
example: 220
User:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/EmailEntity'
- $ref: '#/components/schemas/AccountEntity'
- type: object
required:
- inviteToken
- state
- name
- policy
properties:
name:
type: string
description: Name of the user.
example: John Doe
state:
type: string
enum:
- invited
- active
- deactivated
description: State of the user.
example: invited
inviteToken:
type: string
description: |
Invitation token of the user.
**Note**: If the user has already accepted their invitation, this is `null`.
example: Gy9b8w1irmQtEPo5RmbMmSPheL5h4
isAdmin:
type: boolean
description: Indicates whether the user is an `admin`.
example: false
policy:
type: object
format: acl
description: Access level of the user.
example:
Role: 127
Applications: null
roles:
type: array
description: A list of the IDs of the roles assigned to the user.
example:
- 71
items:
type: integer
authMethod:
type: string
description: Authentication method for this user.
example: basic_auth
applicationNotificationSubscriptions:
type: object
description: Application notifications that the user is subscribed to.
additionalProperties: true
example: null
lastSignedIn:
type: string
format: date-time
description: Timestamp when the user last signed in to Talon.One.
example: '2021-09-12T10:12:42Z'
lastAccessed:
type: string
format: date-time
description: Timestamp of the user's last activity after signing in to Talon.One.
example: '2021-09-12T10:14:42Z'
latestFeedTimestamp:
type: string
format: date-time
description: Timestamp when the user was notified for feed.
example: '2020-06-01T00:00:00Z'
additionalAttributes:
type: object
description: Additional user attributes, created and used by external identity providers.
additionalProperties: true
example: null
DeactivateUserRequest:
allOf:
- $ref: '#/components/schemas/EmailEntity'
ActivateUserRequest:
allOf:
- $ref: '#/components/schemas/EmailEntity'
DeleteUserRequest:
allOf:
- $ref: '#/components/schemas/EmailEntity'
ScimBaseUser:
type: object
description: Schema definition for base user fields, provisioned using the SCIM protocol and used by Talon.One.
properties:
active:
type: boolean
description: Status of the user.
example: true
displayName:
type: string
description: Display name of the user.
example: John Doe
userName:
type: string
description: Unique identifier of the user. This is usually an email address.
example: john.doe@example.com
name:
type: object
description: The components of the user’s real name.
properties:
formatted:
type: string
description: The full name, including all middle names, titles, and suffixes as appropriate, formatted for display.
example: Mr. John J Doe
ScimNewUser:
type: object
description: Payload for users that are created using the SCIM provisioning protocol with an identity provider, for example, Microsoft Entra ID.
required:
- userName
allOf:
- $ref: '#/components/schemas/ScimBaseUser'
- type: object
additionalProperties: true
description: Additional user properties, that are not processed by Talon.One, but only stored and returned in the User response.
ScimUser:
type: object
description: Schema definition for users that have been provisioned using the SCIM protocol with an identity provider, for example, Microsoft Entra ID.
allOf:
- $ref: '#/components/schemas/ScimNewUser'
- type: object
required:
- id
properties:
id:
type: string
description: ID of the user.
example: 359
Change:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/UserEntity'
- type: object
required:
- entity
properties:
applicationId:
type: integer
description: ID of application associated with change.
example: 359
entity:
type: string
description: API endpoint on which the change was initiated.
example: /v1/applications/359/campaigns/6727
old:
type: object
description: Resource before the change occurred.
additionalProperties: true
example: null
new:
type: object
description: Resource after the change occurred.
additionalProperties: true
example:
applicationId": 359
attributes": {}
campaignGroups": []
created": '2022-07-08T13:04:02.972762328Z'
description": ''
features":
- referrals
- loyalty
id: 6727
managementKeyId:
type: integer
description: ID of management key used to perform changes.
example: 3
LoyaltyProgram:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/BaseLoyaltyProgram'
- type: object
description: A Loyalty Program
required:
- id
- name
- title
- description
- accountID
- defaultValidity
- defaultPending
- subscribedApplications
- allowSubledger
- timezone
- cardBased
- sandbox
properties:
id:
type: integer
description: The ID of loyalty program.
example: 139
accountID:
type: integer
description: The ID of the Talon.One account that owns this program.
example: 1
name:
type: string
description: The internal name for the Loyalty Program. This is an immutable value.
example: my_program
tiers:
type: array
description: The tiers in this loyalty program.
items:
$ref: '#/components/schemas/LoyaltyTier'
example:
- name: Gold
minPoints: 300
id: 3
created: '2021-06-10T09:05:27.993483Z'
programID: 139
- name: Silver
minPoints: 200
id: 2
created: '2021-06-10T09:04:59.355258Z'
programId: 139
- name: Bronze
minPoints: 100
id: 1
created: '2021-06-10T09:04:39.355258Z'
programId: 139
timezone:
type: string
description: A string containing an IANA timezone descriptor.
example: Europe/Berlin
minLength: 1
cardBased:
type: boolean
description: |
Defines the type of loyalty program:
- `true`: the program is a card-based.
- `false`: the program is profile-based.
default: false
example: true
canUpdateTiers:
type: boolean
description: |
`True` if the tier definitions can be updated.
default: false
example: true
canUpdateJoinPolicy:
type: boolean
description: |
`True` if the program join policy can be updated.
example: true
canUpdateTierExpirationPolicy:
type: boolean
description: |
`True` if the tier expiration policy can be updated.
example: true
canUpgradeToAdvancedTiers:
type: boolean
description: |
`True` if the program can be upgraded to use the `tiersExpireIn` and `tiersDowngradePolicy` properties.
default: false
example: true
canUpdateSubledgers:
type: boolean
description: |
`True` if the `allowSubledger` property can be updated in the loyalty program.
default: false
example: true
LoyaltyTier:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/LoyaltyProgramEntity'
- $ref: '#/components/schemas/NewLoyaltyTier'
NewLoyaltyTier:
type: object
description: A tier in a loyalty program.
required:
- name
- minPoints
properties:
name:
type: string
description: The name of the tier
example: Gold
minPoints:
type: number
minimum: 0
maximum: 999999999999.99
exclusiveMaximum: false
description: The minimum amount of points required to be eligible for the tier.
example: 300
BaseLoyaltyProgram:
type: object
properties:
title:
type: string
description: The display title for the Loyalty Program.
example: Point collection
description:
type: string
description: Description of our Loyalty Program.
example: Customers collect 10 points per 1$ spent
subscribedApplications:
type: array
description: A list containing the IDs of all applications that are subscribed to this Loyalty Program.
example:
- 132
- 97
items:
type: integer
defaultValidity:
type: string
description: |
The default duration after which new loyalty points should expire. Can be 'unlimited' or a specific time.
The time format is a number followed by one letter indicating the time unit, like '30s', '40m', '1h', '5D', '7W', or 10M'. These rounding suffixes are also supported:
- '_D' for rounding down. Can be used as a suffix after 'D', and signifies the start of the day.
- '_U' for rounding up. Can be used as a suffix after 'D', 'W', and 'M', and signifies the end of the day, week, and month.
example: 2W_U
defaultPending:
type: string
description: |
The default duration of the pending time after which points should be valid. Can be 'immediate' or a specific time.
The time format is a number followed by one letter indicating the time unit, like '30s', '40m', '1h', '5D', '7W', or 10M'. These rounding suffixes are also supported:
- '_D' for rounding down. Can be used as a suffix after 'D', and signifies the start of the day.
- '_U' for rounding up. Can be used as a suffix after 'D', 'W', and 'M', and signifies the end of the day, week, and month.
example: immediate
allowSubledger:
type: boolean
description: Indicates if this program supports subledgers inside the program.
example: false
usersPerCardLimit:
type: integer
minimum: 0
example: 111
description: |
The max amount of user profiles with whom a card can be shared. This can be set to 0 for no limit.
This property is only used when `cardBased` is `true`.
sandbox:
type: boolean
description: Indicates if this program is a live or sandbox program. Programs of a given type can only be connected to Applications of the same type.
title: Sandbox
example: true
programJoinPolicy:
type: string
enum:
- not_join
- points_activated
- points_earned
description: |
The policy that defines when the customer joins the loyalty program.
- `not_join`: The customer does not join the loyalty program but can still earn and spend loyalty points.
**Note**: The customer does not have a program join date.
- `points_activated`: The customer joins the loyalty program only when their earned loyalty points become active for the first time.
- `points_earned`: The customer joins the loyalty program when they earn loyalty points for the first time.
tiersExpirationPolicy:
type: string
enum:
- tier_start_date
- program_join_date
- customer_attribute
- absolute_expiration
description: |
The policy that defines how tier expiration, used to reevaluate the customer's current tier, is determined.
- `tier_start_date`: The tier expiration is relative to when the customer joined the current tier.
- `program_join_date`: The tier expiration is relative to when the customer joined the loyalty program.
- `customer_attribute`: The tier expiration is determined by a custom customer attribute.
- `absolute_expiration`: The tier is reevaluated at the start of each tier cycle. For this policy, it is required to provide a `tierCycleStartDate`.
tierCycleStartDate:
type: string
format: date-time
description: |
Timestamp at which the tier cycle starts for all customers in the loyalty program.
**Note**: This is only required when the tier expiration policy is set to `absolute_expiration`.
example: '2021-09-12T10:12:42Z'
tiersExpireIn:
type: string
description: |
The amount of time after which the tier expires and is reevaluated.
The time format is an **integer** 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 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: 27W_U
tiersDowngradePolicy:
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.
cardCodeSettings:
$ref: '#/components/schemas/CodeGeneratorSettings'
NewLoyaltyProgram:
allOf:
- $ref: '#/components/schemas/BaseLoyaltyProgram'
- type: object
description: A new loyalty program
required:
- name
- title
- defaultValidity
- defaultPending
- allowSubledger
- timezone
- cardBased
- sandbox
properties:
name:
type: string
description: The internal name for the Loyalty Program. This is an immutable value.
example: GeneralPointCollection
tiers:
type: array
description: The tiers in this loyalty program.
items:
$ref: '#/components/schemas/NewLoyaltyTier'
timezone:
type: string
description: A string containing an IANA timezone descriptor.
minLength: 1
cardBased:
type: boolean
description: |
Defines the type of loyalty program:
- `true`: the program is a card-based.
- `false`: the program is profile-based.
default: false
example: true
UpdateLoyaltyProgram:
allOf:
- $ref: '#/components/schemas/BaseLoyaltyProgram'
- type: object
description: An updated loyalty program.
properties:
tiers:
type: array
description: The tiers in this loyalty program.
items:
$ref: '#/components/schemas/NewLoyaltyTier'
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'
LoyaltyBalances:
type: object
description: List of loyalty balances for a ledger and its subledgers.
properties:
balance:
title: Loyalty points balance of a ledger
$ref: '#/components/schemas/LoyaltyBalance'
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
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
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 tier consecutive to the current tier.
example: silver
LoyaltyBalancesWithTiers:
type: object
description: List of loyalty balances for a ledger and its subledgers.
properties:
balance:
title: Loyalty points balance of a ledger
$ref: '#/components/schemas/LoyaltyBalanceWithTier'
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
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'
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:
title: Customer's current loyalty program status
description: Information about the main ledger in the loyalty program.
$ref: '#/components/schemas/LedgerInfo'
subLedgers:
type: object
description: A map containing information about each loyalty subledger.
additionalProperties:
$ref: '#/components/schemas/LedgerInfo'
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
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.
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
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
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
example:
status: inactive
customerProfileIds:
- R195412
- G244519
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:
description: Displays point balances of the card in the main ledger of the loyalty program.
$ref: '#/components/schemas/LedgerInfo'
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:
description: The identifier of the card from which the points were transferred.
$ref: '#/components/schemas/LoyaltyCardIdentifier'
example: summer-loyalty-card-0543
newCardIdentifier:
description: The identifier of the card to which the points were transferred.
$ref: '#/components/schemas/LoyaltyCardIdentifier'
example: autumn-loyalty-card-5822
batchId:
description: The ID of the batch in which the loyalty card was created.
type: string
example: wdefpov
LoyaltyCardIdentifier:
type: string
description: |
The alphanumeric identifier of the loyalty card.
maxLength: 108
example: summer-loyalty-card-0543
CardLedgerTransactionLogEntryIntegrationAPI:
type: object
description: Log entry for a given loyalty card transaction.
required:
- created
- programId
- cardIdentifier
- type
- name
- startDate
- expiryDate
- subledgerId
- amount
- id
properties:
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.
- 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
LedgerTransactionLogEntryIntegrationAPI:
type: object
description: Log entry for a given loyalty card transaction.
required:
- created
- programId
- type
- name
- startDate
- expiryDate
- subledgerId
- amount
- id
properties:
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.
- 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
CardLedgerPointsEntryIntegrationAPI:
type: object
description: Loyalty card points with start and expiry dates.
required:
- id
- created
- programId
- name
- startDate
- expiryDate
- subledgerId
- amount
properties:
id:
type: integer
description: ID of the transaction that adds loyalty points.
example: 123
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
LedgerPointsEntryIntegrationAPI:
type: object
description: Loyalty profile points with start and expiry dates.
required:
- id
- created
- programId
- name
- startDate
- expiryDate
- subledgerId
- amount
properties:
id:
type: integer
description: ID of the transaction that adds loyalty points.
example: 123
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
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'
LoyaltyCardRegistration:
type: object
required:
- integrationId
properties:
integrationId:
type: string
title: Customer Profile ID
description: The integrationId of the customer profile.
example: R195412
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
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: Sum of the tentative active points (including additions and deductions) inside the currently open session. The `currentBalance` is updated to this value when you close the session, and the effects are applied.
example: 100
tentativePendingBalance:
type: number
title: Tentative pending balance
description: Sum of pending points (including additions and deductions) inside the currently open session. The `pendingBalance` is updated to this value when you close the session, and the effects are applied.
example: 20
NewCustomerProfile:
type: object
properties:
attributes:
type: object
description: Arbitrary properties associated with this item.
additionalProperties: true
example:
Language: english
ShippingCountry: DE
EvaluableCampaignIds:
type: object
properties:
evaluableCampaignIds:
type: array
items:
type: integer
maxLength: 999
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
CustomerProfile:
allOf:
- $ref: '#/components/schemas/Entity'
- $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 amount of closed sessions by a customer. A closed session is a successful purchase.
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** A list of loyalty programs joined by the customer.
items:
$ref: '#/components/schemas/LoyaltyMembership'
title: Loyalty programed joined
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#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
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/AchievementProgress'
LoyaltyCardBatch:
allOf:
- type: object
required:
- numberOfCards
properties:
numberOfCards:
type: integer
description: Number of loyalty cards in the batch.
example: 5000
batchId:
type: string
description: ID of the loyalty card batch.
minLength: 4
maxLength: 20
pattern: ^[A-Za-z0-9_-]*$
example: hwernpjz
status:
type: string
enum:
- active
- inactive
default: active
description: Status of the loyalty cards in the batch.
example: active
NewCustomerSession:
allOf:
- $ref: '#/components/schemas/IntegrationProfileEntity'
- type: object
properties:
coupon:
type: string
maxLength: 100
description: Any coupon code entered.
title: Coupon entered in session
example: XMAS-2021
referral:
type: string
maxLength: 100
description: Any referral code entered.
title: Referral code entered in session
example: 2740-tbjua-6720
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. `closed` → `cancelled` or `partially_returned`
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: Serialized JSON representation.
title: Items in customer's cart
items:
$ref: '#/components/schemas/CartItem'
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).
example:
- 91.11.156.141
total:
type: number
title: Session Total
description: The total sum of the cart in one session.
attributes:
type: object
description: |
A key-value map of the sessions attributes. The potentially valid attributes are configured in your accounts developer settings.
additionalProperties: true
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, provide `"couponCodes": null` or 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, provide `"referralCode": null` or 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'
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).
example:
- 91.11.156.141
attributes:
type: object
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.
additionalProperties: true
example:
ShippingCity: Berlin
CustomerAnalytics:
description: A summary report of customer activity for a given time range.
allOf:
- type: object
properties:
acceptedCoupons:
type: integer
description: Total accepted coupons for this customer.
createdCoupons:
type: integer
description: Total created coupons for this customer.
freeItems:
type: integer
description: Total free items given to this customer.
totalOrders:
type: integer
description: Total orders made by this customer.
totalDiscountedOrders:
type: integer
description: Total orders made by this customer that had a discount.
totalRevenue:
type: number
description: Total Revenue across all closed sessions.
totalDiscounts:
type: number
description: The sum of discounts that were given across all closed sessions.
required:
- acceptedCoupons
- createdCoupons
- freeItems
- totalOrders
- totalDiscountedOrders
- totalRevenue
- totalDiscounts
CustomerActivityReport:
description: A summary report of customer activity for a given time range.
allOf:
- $ref: '#/components/schemas/IntegrationEntity'
- type: object
required:
- name
- customerId
- integrationId
- created
- couponRedemptions
- couponUseAttempts
- couponFailedAttempts
- accruedDiscounts
- accruedRevenue
- totalOrders
- totalOrdersNoCoupon
- campaignName
properties:
name:
type: string
description: The name for this customer profile.
customerId:
type: integer
description: The internal Talon.One ID of the customer.
lastActivity:
type: string
format: date-time
description: The last activity of the customer.
couponRedemptions:
type: integer
description: Number of coupon redemptions in all customer campaigns.
couponUseAttempts:
type: integer
description: Number of coupon use attempts in all customer campaigns.
couponFailedAttempts:
type: integer
description: Number of failed coupon use attempts in all customer campaigns.
accruedDiscounts:
type: number
description: Number of accrued discounts in all customer campaigns.
accruedRevenue:
type: number
description: Amount of accrued revenue in all customer campaigns.
totalOrders:
type: integer
description: Number of orders in all customer campaigns.
totalOrdersNoCoupon:
type: integer
description: Number of orders without coupon used in all customer campaigns.
campaignName:
type: string
description: The name of the campaign this customer belongs to.
CustomerSession:
allOf:
- $ref: '#/components/schemas/IntegrationEntity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/NewCustomerSession'
- type: object
properties:
firstSession:
type: boolean
description: Indicates whether this is the first session for the customer's profile. Will always be true for anonymous sessions.
title: First session ever?
example: true
discounts:
type: object
title: Customer's current discounts
description: A map of labelled discount values, values will be in the same currency as the application associated with the session.
additionalProperties:
type: number
integrationId:
type: string
maxLength: 1000
updated:
type: string
format: date-time
description: Timestamp of the most recent event received on this session.
title: Last activity on the session
example: '2021-09-12T10:12:42Z'
required:
- profileId
- firstSession
- coupon
- referral
- state
- cartItems
- integrationId
- applicationId
- attributes
- discounts
- total
- updated
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. Will always be true for anonymous sessions.
title: First session ever?
example: true
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
- coupon
- referral
- state
- cartItems
- integrationId
- applicationId
- attributes
- total
- cartItemTotal
- additionalCostTotal
- updated
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
description: Number of returned items, calculated internally based on returns of this item.
example: 1
remainingQuantity:
title: Remaining quantity of item
type: integer
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:
title: Item product
$ref: '#/components/schemas/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
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.
additionalProperties: true
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
description: The [catalog item ID](https://docs.talon.one/docs/product/account/dev-tools/managing-cart-item-catalogs/#synchronizing-a-cart-item-catalog).
NewApplicationCIF:
type: object
required:
- name
properties:
name:
type: string
description: The name of the Application cart item filter used in API requests.
example: Filter items by product
description:
type: string
description: A short description of the Application cart item filter.
example: This filter allows filtering by shoes
activeExpressionId:
type: integer
description: The ID of the expression that the Application cart item filter uses.
example: 1
modifiedBy:
type: integer
description: The ID of the user who last updated the Application cart item filter.
example: 334
createdBy:
type: integer
description: The ID of the user who created the Application cart item filter.
example: 216
modified:
type: string
format: date-time
description: Timestamp of the most recent update to the Application cart item filter.
ApplicationCIF:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewApplicationCIF'
- type: object
required:
- applicationId
properties:
applicationId:
type: integer
description: The ID of the application that owns this entity.
example: 322
NewApplicationCIFExpression:
type: object
properties:
cartItemFilterId:
type: integer
description: The ID of the Application cart item filter.
example: 216
createdBy:
type: integer
description: The ID of the user who created the Application cart item filter.
example: 216
expression:
type: array
description: Arbitrary additional JSON data associated with the Application cart item filter.
example:
expr:
- filter
- - .
- Session
- CartItems
- - - Item
- - catch
- false
- - '='
- - .
- Item
- Category
- Kitchen
items: {}
ApplicationCIFExpression:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewApplicationCIFExpression'
- type: object
required:
- applicationId
properties:
applicationId:
type: integer
description: The ID of the application that owns this entity.
example: 322
AdditionalCost:
type: object
required:
- price
properties:
price:
title: Price of additional cost
type: number
example: 4.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.
additionalProperties: true
example:
myAttribute: myValue
required:
- type
- attributes
NewEvent:
allOf:
- $ref: '#/components/schemas/IntegrationEvent'
- type: object
properties:
sessionId:
type: string
description: The ID of the session that this event occurred in.
minLength: 1
example: 175KJPS947296
required:
- sessionId
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'
IntegrationStateV2:
type: object
description: |
Contains all entities that might interest Talon.One integrations.
required:
- effects
- createdCoupons
- createdReferrals
properties:
customerSession:
$ref: '#/components/schemas/CustomerSessionV2'
customerProfile:
$ref: '#/components/schemas/CustomerProfile'
event:
$ref: '#/components/schemas/Event'
loyalty:
$ref: '#/components/schemas/Loyalty'
referral:
$ref: '#/components/schemas/InventoryReferral'
coupons:
type: array
items:
$ref: '#/components/schemas/IntegrationCoupon'
triggeredCampaigns:
type: array
items:
$ref: '#/components/schemas/Campaign'
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:
type: array
items:
$ref: '#/components/schemas/RuleFailureReason'
createdCoupons:
type: array
items:
$ref: '#/components/schemas/Coupon'
createdReferrals:
type: array
items:
$ref: '#/components/schemas/Referral'
awardedGiveaways:
type: array
items:
$ref: '#/components/schemas/Giveaway'
return:
$ref: '#/components/schemas/Return'
previousReturns:
type: array
items:
$ref: '#/components/schemas/Return'
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'
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'
TrackEventV2Response:
type: object
description: |
This is the response type returned by the trackEventV2 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'
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'
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'
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'
IntegrationCustomerSessionResponse:
type: object
properties:
customerSession:
$ref: '#/components/schemas/CustomerSessionV2'
effects:
type: array
items:
$ref: '#/components/schemas/Effect'
ApplicationCustomer:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/IntegrationEntity'
- $ref: '#/components/schemas/CustomerProfile'
- type: object
required:
- accountId
properties:
accountId:
type: integer
description: The ID of the Talon.One account that owns this profile.
advocateIntegrationId:
type: string
maxLength: 1000
description: The Integration ID of the Customer Profile that referred this Customer in the Application.
AudienceCustomer:
allOf:
- $ref: '#/components/schemas/CustomerProfile'
- type: object
properties:
connectedApplicationsIds:
type: array
description: A list of the IDs of the Applications that are connected to this customer profile.
example:
- 1
- 2
- 3
items:
type: integer
connectedAudiences:
type: array
description: A list of the IDs of the audiences that are connected to this customer profile.
example:
- 1
- 2
- 3
items:
type: integer
ApplicationReferee:
allOf:
- $ref: '#/components/schemas/ApplicationEntity'
- type: object
required:
- sessionId
- advocateIntegrationId
- friendIntegrationId
- code
- created
properties:
sessionId:
type: string
description: Integration ID of the session in which the customer redeemed the referral.
advocateIntegrationId:
type: string
maxLength: 1000
title: Advocate's Profile ID
description: Integration ID of the Advocate's Profile.
friendIntegrationId:
type: string
maxLength: 1000
title: Friend's Profile ID
description: Integration ID of the Friend's Profile.
code:
type: string
description: Advocate's referral code.
created:
type: string
format: date-time
description: Timestamp of the moment the customer redeemed the referral.
ApplicationSession:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/IntegrationEntity'
- $ref: '#/components/schemas/IntegrationStoreEntity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/ApplicationCustomerEntity'
- type: object
properties:
profileintegrationid:
type: string
maxLength: 1000
description: Integration ID of the customer for the session.
example: 382370BKDB946
coupon:
type: string
description: Any coupon code entered.
example: BKDB946
referral:
type: string
description: Any referral code entered.
example: BKDB946
state:
type: string
enum:
- open
- closed
- partially_returned
- cancelled
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. `closed` → `cancelled` or `partially_returned`
4. `partially_returned` → `cancelled`
For more information, see [Customer session states](https://docs.talon.one/docs/dev/concepts/entities/customer-sessions).
example: closed
cartItems:
type: array
description: Serialized JSON representation.
items:
$ref: '#/components/schemas/CartItem'
discounts:
type: object
description: |
**API V1 only.** A map of labeled discount values, in the same currency as the session.
If you are using the V2 endpoints, refer to the `totalDiscounts` property instead.
additionalProperties:
type: number
totalDiscounts:
type: number
description: The total sum of the discounts applied to this session.
example: 100
total:
type: number
description: The total sum of the session before any discounts applied.
example: 200
attributes:
type: object
description: Arbitrary properties associated with this item.
additionalProperties: true
required:
- coupon
- referral
- state
- cartItems
- discounts
- total
- totalDiscounts
ApplicationEvent:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/ApplicationCustomerEntity'
- $ref: '#/components/schemas/ApplicationStoreEntity'
- $ref: '#/components/schemas/IntegrationStoreEntity'
- type: object
required:
- type
- attributes
- effects
properties:
sessionId:
type: integer
description: The globally unique Talon.One ID of the session that contains this event.
type:
type: string
description: A string representing the event. Must not be a reserved event name.
attributes:
type: object
description: Additional JSON serialized data associated with the event.
additionalProperties: true
effects:
type: array
description: An array containing the effects that were applied as a result of this event.
items:
$ref: '#/components/schemas/Effect'
ruleFailureReasons:
type: array
description: An array containing the rule failure reasons which happened during this event.
items:
$ref: '#/components/schemas/RuleFailureReason'
NewAccount:
type: object
required:
- companyName
properties:
companyName:
type: string
minLength: 1
Account:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/NewAccount'
- type: object
required:
- domainName
- state
- billingEmail
- applicationCount
- userCount
- campaignsActiveCount
- campaignsInactiveCount
properties:
domainName:
type: string
description: Subdomain Name for yourcompany.talon.one.
state:
type: string
enum:
- active
- deactivated
description: State of the account (active, deactivated).
billingEmail:
type: string
format: email
description: The billing email address associated with your company account.
planName:
type: string
description: The name of your booked plan.
planExpires:
type: string
format: date-time
description: The point in time at which your current plan expires.
applicationLimit:
type: integer
description: The maximum number of Applications covered by your plan.
userLimit:
type: integer
description: The maximum number of Campaign Manager Users covered by your plan.
campaignLimit:
type: integer
description: The maximum number of Campaigns covered by your plan.
apiLimit:
type: integer
description: The maximum number of Integration API calls covered by your plan per billing period.
applicationCount:
type: integer
description: The current number of Applications in your account.
userCount:
type: integer
description: The current number of Campaign Manager Users in your account.
campaignsActiveCount:
type: integer
description: The current number of active Campaigns in your account.
campaignsInactiveCount:
type: integer
description: The current number of inactive Campaigns in your account.
attributes:
type: object
description: Arbitrary properties associated with this campaign.
additionalProperties: true
NewAccountSignUp:
allOf:
- $ref: '#/components/schemas/LoginParams'
- $ref: '#/components/schemas/NewAccount'
NewUser:
allOf:
- $ref: '#/components/schemas/LoginParams'
- type: object
required:
- inviteToken
properties:
name:
type: string
description: Your name.
inviteToken:
type: string
minLength: 1
example: Gy9b8w1irmQtEPo5RmbMmSPheL5h4
Environment:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/ApplicationEntity'
- type: object
required:
- slots
- functions
- templates
- variables
properties:
slots:
type: array
description: The slots defined for this application.
items:
$ref: '#/components/schemas/SlotDef'
functions:
type: array
description: The functions defined for this application.
items:
$ref: '#/components/schemas/FunctionDef'
templates:
type: array
description: The templates defined for this application.
items:
$ref: '#/components/schemas/TemplateDef'
variables:
type: string
description: A stringified version of the environment's Talang variables scope.
giveawaysPools:
type: array
description: The giveaways pools that the application is subscribed to.
items:
$ref: '#/components/schemas/GiveawaysPool'
loyaltyPrograms:
type: array
description: The loyalty programs that the application is subscribed to.
items:
$ref: '#/components/schemas/LoyaltyProgram'
achievements:
type: array
description: The achievements, linked to the campaigns, belonging to the application.
items:
$ref: '#/components/schemas/Achievement'
attributes:
type: array
description: The attributes that the application is subscribed to.
items:
$ref: '#/components/schemas/Attribute'
additionalCosts:
type: array
description: The additional costs that the application is subscribed to.
items:
$ref: '#/components/schemas/AccountAdditionalCost'
audiences:
type: array
description: The audiences contained in the account which the application belongs to.
items:
$ref: '#/components/schemas/Audience'
collections:
type: array
description: The account-level collections that the application is subscribed to.
items:
$ref: '#/components/schemas/Collection'
applicationCartItemFilters:
type: array
description: The cart item filters belonging to the Application.
items:
$ref: '#/components/schemas/ApplicationCIF'
SlotDef:
type: object
required:
- name
- type
- title
- writable
properties:
name:
type: string
description: The dot-separated path to this slot for use in Talang.
type:
type: string
description: The type of this slot, one of string, number, boolean, or list[type].
title:
type: string
description: Campaigner-friendly name for the slot.
description:
type: string
description: A short description of the slot.
help:
type: string
description: Extended help text for the slot.
writable:
type: boolean
description: Whether or not this slot can be updated by rule effects.
FuncArgDef:
type: object
required:
- type
properties:
type:
type: string
enum:
- string
- boolean
- number
- time
- (list string)
description: The type of value this argument expects.
minLength: 1
description:
type: string
description: A campaigner-friendly description of the argument, this will also be shown in the rule editor.
TemplateArgDef:
allOf:
- $ref: '#/components/schemas/FuncArgDef'
- type: object
required:
- ui
- title
properties:
title:
type: string
description: A campaigner friendly name for the argument, this will be shown in the rule editor.
minLength: 1
ui:
type: object
description: Arbitrary metadata that may be used to render an input for this argument.
additionalProperties: true
picklistID:
type: integer
description: ID of the picklist linked to a template.
restrictedByPicklist:
type: boolean
description: Whether or not this attribute's value is restricted by picklist (`picklist` property)
FunctionDef:
type: object
required:
- name
- type
- args
properties:
name:
type: string
description: The function name used in Talang.
minLength: 1
type:
type: string
description: The type of this function argument.
description:
type: string
description: A short description of the function.
help:
type: string
description: Extended help text for the function.
args:
type: array
description: An array of argument definitions.
items:
$ref: '#/components/schemas/FuncArgDef'
CampaignTemplateParams:
type: object
required:
- name
- type
- description
properties:
name:
type: string
description: Name of the campaign template parameter.
minLength: 1
example: discount_value
type:
type: string
enum:
- string
- number
- boolean
- percent
- (list string)
- time
description: Defines the type of parameter value.
example: number
description:
type: string
description: Explains the meaning of this template parameter and the placeholder value that will define it. It is used on campaign creation from this template.
example: This is a template parameter of type `number`.
attributeId:
type: integer
description: ID of the corresponding attribute.
example: 42
UpdateCampaignTemplate:
type: object
required:
- name
- state
- description
- instructions
- applicationsIds
properties:
name:
type: string
description: The campaign template name.
minLength: 1
example: Discount campaign
description:
type: string
description: Customer-facing text that explains the objective of the template.
example: This is a template for a discount campaign.
instructions:
type: string
description: Customer-facing text that explains how to use the template. For example, you can use this property to explain the available attributes of this template, and how they can be modified when a user uses this template to create a new campaign.
example: Use this template for discount campaigns. Set the campaign properties according to the campaign goals, and don't forget to set an end date.
campaignAttributes:
type: object
description: The campaign attributes that campaigns created from this template will have by default.
additionalProperties: true
couponAttributes:
type: object
description: The campaign attributes that coupons created from this template will have by default.
additionalProperties: true
state:
type: string
enum:
- draft
- enabled
- disabled
description: Only campaign templates in 'available' state may be used to create campaigns.
activeRulesetId:
type: integer
description: The ID of the ruleset this campaign template will use.
example: 5
tags:
type: array
description: A list of tags for the campaign template.
maxItems: 50
example:
- discount
items:
type: string
minLength: 1
maxLength: 50
features:
type: array
description: A list of features for the campaign template.
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 limits that operate for this campaign template.
items:
$ref: '#/components/schemas/TemplateLimitConfig'
templateParams:
type: array
description: Fields which can be used to replace values in a rule.
items:
$ref: '#/components/schemas/CampaignTemplateParams'
applicationsIds:
type: array
description: A list of IDs of the Applications that are subscribed to this campaign template.
items:
type: integer
example:
- 1
- 2
- 3
campaignCollections:
type: array
description: The campaign collections from the blueprint campaign for the template.
items:
$ref: '#/components/schemas/CampaignTemplateCollection'
defaultCampaignGroupId:
type: integer
description: The default campaign group ID.
example: 42
campaignType:
type: string
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.
CampaignTemplateCollection:
type: object
required:
- name
properties:
name:
type: string
minLength: 1
pattern: ^[A-Za-z](\w|\s)*$
description: The name of this collection.
example: My collection
description:
type: string
description: A short description of the purpose of this collection.
example: My collection of SKUs
CampaignTemplate:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/UserEntity'
- $ref: '#/components/schemas/UpdateCampaignTemplate'
- type: object
required:
- validApplicationIds
- applicationIds
- campaignType
properties:
applicationsIds:
type: array
items:
type: integer
example:
- 1
- 2
- 3
updated:
type: string
format: date-time
description: Timestamp of the most recent update to the campaign template or any of its elements.
example: '2022-08-24T14:15:22Z'
updatedBy:
type: string
description: Name of the user who last updated this campaign template, if available.
example: Jane Doe
validApplicationIds:
type: array
description: The IDs of the Applications that are related to this entity.
items:
type: integer
example:
- 1
- 2
- 3
NewTemplateDef:
type: object
required:
- title
- category
- args
- expr
properties:
title:
type: string
description: Campaigner-friendly name for the template that will be shown in the rule editor.
minLength: 1
description:
type: string
description: A short description of the template that will be shown in the rule editor.
help:
type: string
description: Extended help text for the template.
category:
description: Used for grouping templates in the rule editor sidebar.
type: string
minLength: 1
expr:
type: array
description: A Talang expression that contains variable bindings referring to args.
items: {}
args:
type: array
description: An array of argument definitions.
items:
$ref: '#/components/schemas/TemplateArgDef'
expose:
type: boolean
description: A flag to control exposure in Rule Builder.
default: false
TemplateDef:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/NewTemplateDef'
- type: object
required:
- name
- description
- help
properties:
name:
type: string
description: The template name used in Talang.
minLength: 1
NewAttribute:
allOf:
- type: object
required:
- entity
- name
- title
- type
- description
- suggestions
- editable
properties:
entity:
type: string
description: The name of the entity that can have this attribute. When creating or updating the entities of a given type, you can include an `attributes` object with keys corresponding to the `name` of the custom attributes for that type.
enum:
- Application
- Campaign
- CustomerProfile
- CustomerSession
- CartItem
- Coupon
- Event
- Giveaway
- Referral
- Store
example: Event
eventType:
type: string
example: pageViewed
name:
type: string
pattern: ^[A-Za-z]\w*$
description: The attribute name that will be used in API requests and Talang. E.g. if `name == "region"` then you would set the region attribute by including an `attributes.region` property in your request payload.
example: pageViewed
title:
type: string
pattern: ^[A-Za-z][A-Za-z0-9_.!~*'() -]*$
description: The human-readable name for the attribute that will be shown in the Campaign Manager. Like `name`, the combination of entity and title must also be unique.
example: Page view event
type:
type: string
enum:
- string
- number
- boolean
- time
- (list string)
- (list number)
- (list time)
- location
- (list location)
description: The data type of the attribute, a `time` attribute must be sent as a string that conforms to the [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) timestamp format.
example: string
description:
type: string
description: A description of this attribute.
example: Event triggered when a customer displays a page.
suggestions:
type: array
description: A list of suggestions for the attribute.
maxItems: 50
items:
type: string
minLength: 1
hasAllowedList:
type: boolean
description: Whether or not this attribute has an allowed list of values associated with it.
default: false
example: false
restrictedBySuggestions:
type: boolean
description: |
Whether or not this attribute's value is restricted by suggestions (`suggestions` property)
or by an allowed list of value (`hasAllowedList` property).
default: false
example: false
editable:
type: boolean
description: Whether or not this attribute can be edited.
example: true
subscribedApplicationsIds:
type: array
description: A list of the IDs of the applications where this attribute is available.
items:
type: integer
example:
- 1
- 4
- 9
subscribedCatalogsIds:
type: array
description: A list of the IDs of the catalogs where this attribute is available.
items:
type: integer
example:
- 2
- 5
allowedSubscriptions:
type: array
description: |
A list of allowed subscription types for this attribute.
**Note:** This only applies to attributes associated with the `CartItem` entity.
example:
- application
- catalog
maxItems: 2
items:
type: string
enum:
- application
- catalog
Attribute:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/NewAttribute'
- type: object
properties:
eventTypeId:
type: integer
example: 22
NewAdditionalCost:
allOf:
- type: object
required:
- name
- title
- description
properties:
name:
type: string
pattern: ^[A-Za-z]\w*$
description: The internal name used in API requests.
example: shippingFee
title:
type: string
pattern: ^[A-Za-z][A-Za-z0-9_.!~*'() -]*$
description: The human-readable name for the additional cost that will be shown in the Campaign Manager. Like `name`, the combination of entity and title must also be unique.
example: Shipping fee
description:
type: string
description: A description of this additional cost.
example: A shipping fee
subscribedApplicationsIds:
type: array
description: A list of the IDs of the applications that are subscribed to this additional cost.
items:
type: integer
example:
- 3
- 13
type:
type: string
enum:
- session
- item
- both
example: session
description: |
The type of additional cost. Possible value:
- `session`: Additional cost will be added per session.
- `item`: Additional cost will be added per item.
- `both`: Additional cost will be added per item and session.
default: session
AccountAdditionalCost:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/NewAdditionalCost'
NewEventType:
allOf:
- type: object
required:
- title
- name
properties:
title:
type: string
minLength: 1
description: The human-friendly name for this event type.
example: Survey Completed
name:
type: string
minLength: 1
description: The integration name for this event type. This will be used in URLs and cannot be changed after an event type has been created.
example: surveyCompleted
description:
type: string
description: |
A description of what the event represents.
example: The survey was submitted by the customer.
EventType:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewEventType'
NewWebhook:
allOf:
- $ref: '#/components/schemas/MultiApplicationEntity'
- type: object
required:
- title
- verb
- url
- headers
- params
- enabled
properties:
title:
type: string
pattern: ^[A-Za-z][A-Za-z0-9_.!~*'() -]*$
description: Name or title for this webhook.
example: Send message
description:
type: string
description: A description of the webhook.
example: A webhook to send a coupon to the user.
verb:
type: string
enum:
- POST
- PUT
- GET
- DELETE
- PATCH
description: API method for this webhook.
example: POST
url:
type: string
description: API URL (supports templating using parameters) for this webhook.
example: www.my-company.com/my-endpoint-name
headers:
type: array
description: List of API HTTP headers for this webhook.
items:
type: string
pattern: ^([^:,]*):([^]*|[^,]*)$
example:
- '{"Authorization": "Basic bmF2ZWVua3VtYXIU="}'
- '{"Content-Type": "application/json"}'
payload:
type: string
description: API payload (supports templating using parameters) for this webhook.
example: "{\n\t\"message\": \"${message}\"\n}"
params:
type: array
description: Array of template argument definitions.
items:
$ref: '#/components/schemas/TemplateArgDef'
example: []
enabled:
type: boolean
description: Enables or disables webhook from showing in the Rule Builder.
example: true
Webhook:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/MultiApplicationEntity'
- $ref: '#/components/schemas/NewWebhook'
- type: object
WebhookWithOutgoingIntegrationDetails:
allOf:
- $ref: '#/components/schemas/Webhook'
- type: object
properties:
outgoingIntegrationTemplateId:
type: integer
description: Identifier of the outgoing integration template.
example: 1
outgoingIntegrationTypeId:
type: integer
description: Identifier of the outgoing integration type.
example: 1
outgoingIntegrationTypeName:
type: string
description: Name of the outgoing integration.
example: Braze
AudienceIntegrationID:
type: object
properties:
integrationId:
type: string
minLength: 1
maxLength: 1000
description: The ID of this audience in the third-party integration.
example: 382370BKDB946
NewMultipleAudiencesItem:
allOf:
- $ref: '#/components/schemas/UpdateAudience'
- $ref: '#/components/schemas/AudienceIntegrationID'
- type: object
required:
- name
MultipleAudiencesItem:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewMultipleAudiencesItem'
- type: object
required:
- name
- integrationId
- status
properties:
status:
type: string
description: |
Indicates whether the audience is new, updated or unmodified by the request.
enum:
- unmodified
- updated
- new
example: new
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
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`, `Selligent`, `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'
UpdateAudience:
type: object
required:
- name
properties:
name:
type: string
minLength: 1
description: The human-friendly display name for this audience.
example: Travel audience
Audience:
allOf:
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewAudience'
Export:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/UserEntity'
- type: object
required:
- entity
- filter
properties:
entity:
type: string
enum:
- Coupon
- Referral
- Effect
- CustomerSession
- LoyaltyLedger
- LoyaltyLedgerLog
- Collection
description: The name of the entity that was exported.
filter:
type: object
description: Map of keys and values that were used to filter the exported rows.
additionalProperties: true
Import:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/UserEntity'
- type: object
required:
- amount
- entity
properties:
entity:
type: string
example: AttributeAllowedList
description: |
The name of the entity that was imported.
amount:
type: integer
minimum: 0
example: 10
description: The number of values that were imported.
FeaturesFeed:
allOf:
- type: object
properties:
title:
type: string
pubDate:
type: string
LibraryAttribute:
allOf:
- type: object
required:
- entity
- name
- title
- type
- description
- presets
- tags
- suggestions
properties:
entity:
type: string
description: The name of the entity that can have this attribute. When creating or updating the entities of a given type, you can include an `attributes` object with keys corresponding to the `name` of the custom attributes for that type.
enum:
- Application
- Campaign
- CustomerProfile
- CustomerSession
- CartItem
- Coupon
- Event
name:
type: string
description: |
The attribute name that will be used in API requests and Talang. E.g. if `name == "region"` then you would set the region attribute by including an `attributes.region` property in your request payload.
title:
type: string
description: The human-readable name for the attribute that will be shown in the Campaign Manager. Like `name`, the combination of entity and title must also be unique.
type:
type: string
enum:
- string
- number
- boolean
- time
description: The data type of the attribute, a `time` attribute must be sent as a string that conforms to the [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) timestamp format.
description:
type: string
description: A description of the attribute.
presets:
type: array
description: The presets that indicate to which industry the attribute applies to.
items:
type: string
suggestions:
type: array
description: Short suggestions that are used to group attributes.
items:
type: string
TalangAttribute:
allOf:
- type: object
required:
- name
- type
- visible
- kind
- campaignsCount
properties:
entity:
type: string
description: The name of the entity of the attribute.
enum:
- AdvocateProfile
- Account
- Application
- AwardedGiveaway
- Bundle
- Campaign
- CartItem
- Coupon
- CustomerProfile
- CustomerSession
- Event
- Item
- Loyalty
- Profile
- Giveaway
- Referral
- Session
- Store
- Achievements
name:
type: string
description: |
The attribute name that will be used in API requests and Talang. E.g. if `name == "region"` then you would set the region attribute by including an `attributes.region` property in your request payload.
title:
type: string
description: The name of the attribute that is displayed to the user in the Campaign Manager.
type:
type: string
description: The talang type of the attribute.
description:
type: string
description: A description of the attribute.
visible:
type: boolean
default: true
description: Indicates whether the attribute is visible in the UI or not.
kind:
type: string
description: Indicate the kind of the attribute.
enum:
- built-in
- custom
campaignsCount:
type: integer
description: The number of campaigns that refer to the attribute.
exampleValue:
type: array
description: Examples of values that can be assigned to the attribute.
items:
type: string
Role:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/AccountEntity'
- type: object
required:
- name
- acl
properties:
campaignGroupID:
type: integer
description: |
The ID of the [Campaign Group](https://docs.talon.one/docs/product/account/account-settings/managing-campaign-groups)
this role was created for.
example: 3
name:
type: string
description: Name of the role.
example: Campaign Reviewer
description:
type: string
description: Description of the role.
example: Reviews the campaigns
members:
type: array
items:
type: integer
description: A list of user identifiers assigned to this role.
example:
- 48
- 562
- 475
- 18
acl:
type: object
format: aclRole
description: The `Access Control List` json defining the role of the user. This represents the access control on the user level.
example:
Role: 127
Applications: null
NewRole:
allOf:
- $ref: '#/components/schemas/UpdateRole'
- type: object
required:
- name
- acl
- members
UpdateRole:
type: object
properties:
name:
type: string
description: Name of the role.
example: Campaign Manager
description:
type: string
description: Description of the role.
example: Manages the campaigns
acl:
type: string
description: The `Access Control List` json defining the role of the user. This represents the access control on the user level.
example:
Role: 128
Applications: null
members:
type: array
items:
type: integer
description: An array of user identifiers.
example:
- 48
- 562
- 475
- 18
RoleAssign:
allOf:
- type: object
required:
- users
- roles
properties:
users:
type: array
items:
type: integer
description: An array of user IDs.
example:
- 48
- 562
- 475
- 18
roles:
type: array
items:
type: integer
description: An array of role IDs.
example:
- 128
- 147
NewRoleV2:
allOf:
- $ref: '#/components/schemas/RoleV2Base'
- type: object
required:
- name
- description
UpdateRoleV2:
$ref: '#/components/schemas/RoleV2Base'
RoleV2:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/RoleV2Base'
RoleV2Base:
type: object
properties:
name:
type: string
description: Name of the role.
example: Campaign and campaign access group manager
description:
type: string
description: Description of the role.
example: Allows you to create and edit campaigns for specific Applications, delete specific campaign access groups, and view loyalty programs.
permissions:
type: object
$ref: '#/components/schemas/RoleV2Permissions'
description: The permissions that this role gives.
members:
type: array
items:
type: integer
description: A list of user IDs the role is assigned to.
example:
- 10
- 12
RoleV2Permissions:
type: object
properties:
permissionSets:
type: array
description: List of grouped logical operations referenced by roles.
maxItems: 500
items:
type: object
$ref: '#/components/schemas/RoleV2PermissionSet'
example:
- name: Application permission set
logicalOperations:
- getApplicationOperations
- editApplicationOperations
- name: Campaign manager permission set
logicalOperations:
- getCampaignOperations
- createCampaignOperations
- updateCampaignOperations
- name: Campaign read-only permission set
logicalOperations:
- getCampaignOperations
- name: Loyalty program read-only permission set
logicalOperations:
- getLoyaltyProgramOperations
- name: Campaign access group manager permission set
logicalOperations:
- getCampaignAccessGroupOperations
- updateCampaignAccessGroupOperations
- deleteCampaignAccessGroupOperations
roles:
type: object
$ref: '#/components/schemas/RoleV2RolesGroup'
RoleV2RolesGroup:
type: object
properties:
applications:
type: object
$ref: '#/components/schemas/RoleV2Application'
loyaltyPrograms:
type: object
$ref: '#/components/schemas/RoleV2LoyaltyGroup'
campaignAccessGroups:
type: object
$ref: '#/components/schemas/RoleV2CampaignAccessGroup'
RoleV2Application:
type: object
description: A map of the link between the Application, campaign, or draft campaign-related permission set and the Application ID the permissions apply to.
additionalProperties:
type: object
$ref: '#/components/schemas/RoleV2ApplicationDetails'
example:
'1':
application: Application permission set
'3':
campaign: Campaign manager permission set
'4':
draftCampaign: Campaign read-only permission set
'5':
tools: Tools permission set
RoleV2ApplicationDetails:
type: object
properties:
application:
type: string
description: Name of the Application-related permission set for the given Application.
campaign:
type: string
description: Name of the campaign-related permission set for the given Application.
draftCampaign:
type: string
description: Name of the draft campaign-related permission set for the given Application.
tools:
type: string
description: Name of the tools-related permission set.
example: Tools permission set
RoleV2LoyaltyGroup:
type: object
description: A map of the link between the loyalty program-related permission set and the Application ID the permissions apply to.
additionalProperties:
type: string
description: Name of the loyalty program-related permission set.
example:
'10': Loyalty program manager permission set
RoleV2CampaignAccessGroup:
type: object
description: A map of the link between the campaign access group-related permission set and the Application ID the permissions apply to.
additionalProperties:
type: string
description: Name of the campaign access group-related permission set.
example:
'5': Campaign access group manager permission set
RoleV2PermissionSet:
type: object
required:
- name
- logicalOperations
properties:
name:
type: string
description: Name of the permission set.
example: Campaign manager permission set
logicalOperations:
type: array
maxItems: 1000
description: |
List of logical operations in the permission set.
Each logical operation must be shown under the `x-permission` tag on an endpoint level.
items:
type: string
example:
- createCampaignOperations
- getCampaignOperations
- deleteCampaignOperations
CouponReservations:
type: object
required:
- integrationIDs
properties:
integrationIDs:
type: array
description: List of customer integration IDs.
example:
- URNGV8294NV
- BZGGC2454PA
maxItems: 1000
items:
type: string
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.
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
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
additionalProperties: true
coupons:
description: Maps the coupon value to a key-value list of that coupons attributes.
type: object
additionalProperties: true
couponRejectionReason:
$ref: '#/components/schemas/CouponRejectionReason'
referralRejectionReason:
$ref: '#/components/schemas/ReferralRejectionReason'
warnings:
description: Contains warnings about possible misuse.
type: object
additionalProperties: true
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
ApplicationAPIKey:
allOf:
- $ref: '#/components/schemas/CreateApplicationAPIKey'
- type: object
required:
- id
- title
- accountID
- applicationID
- created
- expires
- createdBy
properties:
id:
type: integer
description: ID of the API Key.
example: 34
createdBy:
type: integer
description: ID of user who created.
example: 280
accountID:
type: integer
description: ID of account the key is used for.
example: 13
applicationID:
type: integer
description: ID of application the key is used for.
example: 54
created:
type: string
format: date-time
description: The date the API key was created.
example: '2022-03-02T16:46:17.758585Z'
NewApplicationAPIKey:
allOf:
- $ref: '#/components/schemas/ApplicationAPIKey'
- type: object
required:
- key
properties:
key:
type: string
description: The API key.
example: f45f90d21dcd9bac965c45e547e9754a3196891d09948e35adbcbedc4e9e4b01
CreateApplicationAPIKey:
type: object
required:
- title
- expires
properties:
title:
type: string
description: Title of the API key.
example: My generated key
expires:
type: string
format: date-time
description: The date the API key expires.
example: '2023-08-24T14:00:00Z'
platform:
type: string
enum:
- none
- segment
- braze
- mparticle
- selligent
- iterable
- customer_engagement
- customer_data
- salesforce
- emarsys
description: |
The third-party platform the API key is valid for. Use `none` for a generic API key to be used
from your own integration layer.
example: none
type:
type: string
enum:
- staging
description: |
The API key type. Can be empty or `staging`.
Staging API keys can only be used for dry requests with the [Update customer session](https://docs.talon.one/integration-api#tag/Customer-sessions/operation/updateCustomerSessionV2) endpoint, [Update customer profile](https://docs.talon.one/integration-api#tag/Customer-profiles/operation/updateCustomerProfileV2) endpoint, and [Track event](https://docs.talon.one/integration-api#tag/Events/operation/trackEventV2) endpoint.
When using the _Update customer profile_ endpoint with a staging API key, the query parameter `runRuleEngine` must be `true`.
example: staging
timeOffset:
type: integer
description: |
A time offset in nanoseconds associated with the API key. When making a request using the API key, rule evaluation is based on a date that is calculated by adding the offset to the current date.
example: 100000
CreateManagementKey:
type: object
required:
- name
- expiryDate
- endpoints
properties:
name:
type: string
description: Name for management key.
example: My generated key
expiryDate:
type: string
format: date-time
description: The date the management key expires.
example: '2023-08-24T14:00:00Z'
endpoints:
type: array
description: The list of endpoints that can be accessed with the key
items:
$ref: '#/components/schemas/Endpoint'
allowedApplicationIds:
type: array
description: |
A list of Application IDs that you can access with the management key.
An empty or missing list means the management key can be used for all Applications in the account.
items:
type: integer
example:
- 1
- 2
- 3
ManagementKey:
allOf:
- $ref: '#/components/schemas/CreateManagementKey'
- type: object
required:
- id
- name
- endpoints
- accountID
- created
- expiryDate
- createdBy
properties:
id:
type: integer
description: ID of the management key.
example: 34
createdBy:
type: integer
description: ID of the user who created it.
example: 280
accountID:
type: integer
description: ID of account the key is used for.
example: 13
created:
type: string
format: date-time
description: The date the management key was created.
example: '2022-03-02T16:46:17.758585Z'
NewManagementKey:
allOf:
- $ref: '#/components/schemas/ManagementKey'
- type: object
required:
- key
properties:
key:
type: string
description: The management key.
example: f45f90d21dcd9bac965c45e547e9754a3196891d09948e35adbcbedc4e9e4b01
Endpoint:
type: object
required:
- path
properties:
path:
type: string
description: allowed endpoint
example: /coupons
SamlConnection:
allOf:
- type: object
description: A SAML 2.0 connection.
required:
- assertionConsumerServiceURL
- audienceURI
properties:
assertionConsumerServiceURL:
type: string
description: The location where the SAML assertion is sent with a HTTP POST.
- $ref: '#/components/schemas/BaseSamlConnection'
- $ref: '#/components/schemas/Entity'
NewSamlConnection:
allOf:
- type: object
description: A new SAML 2.0 connection.
required:
- x509certificate
properties:
x509certificate:
type: string
description: X.509 Certificate.
minLength: 1
- $ref: '#/components/schemas/BaseSamlConnection'
BaseSamlConnection:
type: object
required:
- accountId
- name
- enabled
- issuer
- signOnURL
properties:
accountId:
type: integer
description: The ID of the account that owns this entity.
example: 3885
name:
type: string
description: ID of the SAML service.
minLength: 1
enabled:
type: boolean
description: Determines if this SAML connection active.
issuer:
type: string
description: Identity Provider Entity ID.
minLength: 1
signOnURL:
type: string
description: Single Sign-On URL.
minLength: 1
signOutURL:
type: string
description: Single Sign-Out URL.
metadataURL:
type: string
description: Metadata URL.
audienceURI:
type: string
description: |
The application-defined unique identifier that is the intended audience of the SAML assertion.
This is most often the SP Entity ID of your application. When not specified, the ACS URL will be used.
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:
$ref: '#/components/schemas/EffectProps'
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:
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.
EffectProps:
type: object
description: The properties of the effect. See [API effects](https://docs.talon.one/docs/dev/integration-api/api-effects).
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'
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.
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.
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.
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:
description: The card on which these points were added.
$ref: '#/components/schemas/LoyaltyCardIdentifier'
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.
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:
description: The card on which these points were added.
$ref: '#/components/schemas/LoyaltyCardIdentifier'
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
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:
description: The card on which these points were originally added.
$ref: '#/components/schemas/LoyaltyCardIdentifier'
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:
description: The card on which these points were added.
$ref: '#/components/schemas/LoyaltyCardIdentifier'
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
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.
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
additionalProperties: true
x-arbitraryJSON: true
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
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
CustomerProfileIntegrationRequestV2:
allOf:
- $ref: '#/components/schemas/NewCustomerProfile'
- $ref: '#/components/schemas/EvaluableCampaignIds'
- 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:
type: object
description: Audiences memberships changes for this profile.
$ref: '#/components/schemas/ProfileAudiencesChanges'
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 profile_ request instead of sending extra requests to other endpoints.
example:
- triggeredCampaigns
- customerProfile
items:
type: string
enum:
- customerProfile
- triggeredCampaigns
- loyalty
- event
- awardedGiveaways
- ruleFailureReasons
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
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
MultipleCustomerProfileIntegrationRequest:
type: object
properties:
customerProfiles:
type: array
items:
$ref: '#/components/schemas/MultipleCustomerProfileIntegrationRequestItem'
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#operation/updateCustomerSessionV2).
type: string
example: R195412
maxLength: 1000
MultipleCustomerProfileIntegrationResponseV2:
type: object
properties:
integrationStates:
type: array
items:
$ref: '#/components/schemas/CustomerProfileUpdateV2Response'
CustomerProfileAudienceRequest:
type: object
properties:
data:
type: array
maximum: 1000
items:
$ref: '#/components/schemas/CustomerProfileAudienceRequestItem'
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. If the customer profile does not exist, it will be created.
- `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](#operation/createAudienceV2).
example: 748
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-
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.
additionalProperties: true
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
NewGiveawaysPool:
type: object
required:
- name
- sandbox
properties:
name:
type: string
description: The name of this giveaways pool.
example: My giveaway pool
description:
type: string
description: The description of this giveaways pool.
example: Generic pool
subscribedApplicationsIds:
type: array
description: A list of the IDs of the applications that this giveaways pool is enabled for.
items:
type: integer
example:
- 2
- 4
sandbox:
type: boolean
description: Indicates if this program is a live or sandbox program. Programs of a given type can only be connected to Applications of the same type.
title: Sandbox
example: true
GiveawaysPool:
description: Giveaways pools is an entity for managing multiple similar giveaways.
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/NewGiveawaysPool'
- type: object
required:
- createdBy
properties:
modified:
type: string
format: date-time
description: Timestamp of the most recent update to the giveaways pool.
createdBy:
type: integer
description: ID of the user who created this giveaways pool.
modifiedBy:
type: integer
description: ID of the user who last updated this giveaways pool if available.
NewCustomEffect:
allOf:
- $ref: '#/components/schemas/MultiApplicationEntity'
- type: object
required:
- name
- title
- enabled
- payload
properties:
isPerItem:
type: boolean
x-fieldType: bool
description: Indicates if this effect is per item or not.
name:
type: string
pattern: ^[A-Za-z](\w|\s)*$
description: The name of this effect.
title:
type: string
pattern: ^[^[:cntrl:]\s][^[:cntrl:]]*$
description: The title of this effect.
payload:
type: string
description: The JSON payload of this effect.
description:
type: string
description: The description of this effect.
enabled:
type: boolean
description: Determines if this effect is active.
params:
type: array
description: Array of template argument definitions.
items:
$ref: '#/components/schemas/TemplateArgDef'
NewPicklist:
type: object
required:
- type
- values
properties:
type:
type: string
description: The type of allowed values in the picklist. If the type `time` is chosen, it must be an RFC3339 timestamp string.
enum:
- string
- boolean
- number
- time
example: '2012-11-01T22:08:41+00:00'
values:
type: array
maxItems: 50
example:
- Jeans
- Shirt
- Coat
description: The list of allowed values provided by this picklist.
items:
type: string
Picklist:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewPicklist'
- type: object
required:
- createdBy
properties:
modifiedBy:
type: integer
description: ID of the user who last updated this effect if available.
example: 124
createdBy:
type: integer
description: ID of the user who created this effect.
example: 134
accountId:
type: integer
description: The ID of the account that owns this entity.
example: 3886
imported:
type: boolean
description: Imported flag shows that a picklist is imported by a CSV file or not
example: true
UpdatePicklist:
allOf:
- $ref: '#/components/schemas/NewPicklist'
UpdateCustomEffect:
allOf:
- $ref: '#/components/schemas/NewCustomEffect'
CustomEffect:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/NewCustomEffect'
- type: object
required:
- createdBy
properties:
modifiedBy:
type: integer
description: ID of the user who last updated this effect if available.
example: 334
createdBy:
type: integer
description: ID of the user who created this effect.
example: 216
UpdateCampaignCollection:
type: object
properties:
description:
type: string
description: A short description of the purpose of this collection.
example: My collection of SKUs
NewCampaignCollection:
allOf:
- $ref: '#/components/schemas/UpdateCampaignCollection'
- type: object
required:
- name
properties:
name:
type: string
minLength: 1
pattern: ^[^[:cntrl:]\s][^[:cntrl:]]*$
description: The name of this collection.
example: My collection
CampaignCollectionWithoutPayload:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/NewCampaignCollection'
- type: object
required:
- createdBy
properties:
modifiedBy:
type: integer
description: ID of the user who last updated this effect if available.
example: 48
createdBy:
type: integer
description: ID of the user who created this effect.
example: 134
applicationId:
type: integer
description: The ID of the Application that owns this entity.
example: 1
campaignId:
type: integer
description: The ID of the campaign that owns this entity.
example: 7
CampaignCollection:
allOf:
- $ref: '#/components/schemas/CampaignCollectionWithoutPayload'
- type: object
properties:
payload:
type: array
description: The content of the collection.
maxItems: 50
example:
- KTL-WH-ET-1
- KTL-BL-ET-1
items:
type: string
UpdateCollection:
type: object
properties:
description:
type: string
description: A short description of the purpose of this collection.
example: My collection of SKUs
subscribedApplicationsIds:
type: array
description: A list of the IDs of the Applications where this collection is enabled.
example:
- 1
- 2
- 3
items:
type: integer
NewCollection:
allOf:
- $ref: '#/components/schemas/UpdateCollection'
- type: object
required:
- name
properties:
name:
type: string
minLength: 1
pattern: ^[^[:cntrl:]\s][^[:cntrl:]]*$
description: The name of this collection.
example: My collection
CollectionWithoutPayload:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/NewCollection'
- type: object
required:
- createdBy
properties:
modifiedBy:
type: integer
description: ID of the user who last updated this effect if available.
example: 48
createdBy:
type: integer
description: ID of the user who created this effect.
example: 134
applicationId:
type: integer
description: The ID of the Application that owns this entity.
example: 1
campaignId:
type: integer
description: The ID of the campaign that owns this entity.
example: 7
Collection:
allOf:
- $ref: '#/components/schemas/CollectionWithoutPayload'
- type: object
properties:
payload:
type: array
description: The content of the collection.
maxItems: 50
example:
- KTL-WH-ET-1
- KTL-BL-ET-1
items:
type: string
CollectionItem:
allOf:
- type: object
required:
- item
properties:
item:
type: string
NewCouponCreationJob:
allOf:
- $ref: '#/components/schemas/CouponConstraints'
- type: object
required:
- numberOfCoupons
- usageLimit
- attributes
additionalProperties: false
properties:
numberOfCoupons:
type: integer
description: The number of new coupon codes to generate for the campaign.
minimum: 1
maximum: 5000000
example: 200000
couponSettings:
$ref: '#/components/schemas/CodeGeneratorSettings'
attributes:
type: object
description: Arbitrary properties associated with coupons.
additionalProperties: true
CouponCreationJob:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/CampaignEntity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/NewCouponCreationJob'
- type: object
required:
- createdBy
- status
- batchId
- requestedAmount
- createdAmount
- failCount
- errors
- attributes
- usageLimit
- communicated
- chunkExecutionCount
properties:
batchId:
title: Batch ID
type: string
description: The batch ID coupons created by this job will bear.
example: tqyrgahe
status:
title: Job Status
type: string
description: |
The current status of this request. Possible values:
- `pending verification`
- `pending`
- `completed`
- `failed`
- `coupon pattern full`
example: pending
createdAmount:
title: Created Amount
type: integer
description: The number of coupon codes that were already created for this request.
example: 1000000
failCount:
title: Fail Count
type: integer
description: The number of times this job failed.
example: 10
errors:
title: Errors
type: array
description: An array of individual problems encountered during the request.
example:
- Connection to database was reset
- failed to generate enough unique codes
- attribute 'PizzaLover' not found on entity 'Coupons'
items:
type: string
createdBy:
title: Created By
type: integer
description: ID of the user who created this effect.
example: 1
communicated:
type: boolean
description: Whether or not the user that created this job was notified of its final state.
example: false
chunkExecutionCount:
title: Iterations
type: integer
example: 0
description: The number of times an attempt to create a chunk of coupons was made during the processing of the job.
chunkSize:
title: Chunk size
type: integer
example: 20000
description: The number of coupons that will be created in a single transactions. Coupons will be created in chunks until arriving at the requested amount.
NewCouponDeletionJob:
type: object
required:
- filters
properties:
filters:
$ref: '#/components/schemas/CouponDeletionFilters'
CouponDeletionFilters:
type: object
properties:
createdBefore:
description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
type: string
format: date-time
createdAfter:
description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
type: string
format: date-time
startsAfter:
description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
type: string
format: date-time
startsBefore:
description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
type: string
format: date-time
valid:
enum:
- expired
- validNow
- validFuture
description: |
- `expired`: Matches coupons in which the expiration date is set and in the past.
- `validNow`: Matches coupons in which the start date is null or in the past and the expiration date is null or in the future.
- `validFuture`: Matches coupons in which the start date is set and in the future.
type: string
usable:
type: boolean
description: |
- `true`: only coupons where `usageCounter < usageLimit` will be returned.
- `false`: only coupons where `usageCounter >= usageLimit` will be returned.
- This field cannot be used in conjunction with the `usable` query parameter.
redeemed:
type: boolean
description: |
- `true`: only coupons where `usageCounter > 0` will be returned.
- `false`: only coupons where `usageCounter = 0` will be returned.
**Note:** This field cannot be used in conjunction with the `usable` query parameter.
recipientIntegrationId:
description: |
Filter results by match with a profile id specified in the coupon's `RecipientIntegrationId` field.
type: string
exactMatch:
description: Filter results to an exact case-insensitive matching against the coupon code
type: boolean
default: false
value:
description: Filter results by the coupon code
type: string
default: false
batchId:
description: Filter results by batches of coupons
type: string
referralId:
description: Filter the results by matching them with the ID of a referral. This filter shows the coupons created by redeeming a referral code.
type: integer
expiresAfter:
description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
type: string
format: date-time
expiresBefore:
description: Filter results comparing the parameter value, expected to be an RFC3339 timestamp string, to the coupon creation timestamp. You can use any time zone setting. Talon.One will convert to UTC internally.
type: string
format: date-time
CouponDeletionJob:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/AccountEntity'
- $ref: '#/components/schemas/NewCouponDeletionJob'
- type: object
required:
- createdBy
- status
- failCount
- errors
- communicated
properties:
status:
title: Job Status
type: string
description: |
The current status of this request. Possible values:
- `not_ready`
- `pending`
- `completed`
- `failed`
example: pending
deletedAmount:
title: Deleted Amount
type: integer
description: The number of coupon codes that were already deleted for this request.
example: 1000000
failCount:
title: Fail Count
type: integer
description: The number of times this job failed.
example: 10
errors:
title: Errors
type: array
description: An array of individual problems encountered during the request.
example:
- Connection to database was reset
- failed to delete codes
items:
type: string
createdBy:
title: Created By
type: integer
description: ID of the user who created this effect.
example: 1
communicated:
type: boolean
description: Indicates whether the user that created this job was notified of its final state.
example: false
campaignIDs:
type: array
items:
type: integer
title: Campaign ID
AsyncCouponDeletionJobResponse:
allOf:
- $ref: '#/components/schemas/IdentifiableEntity'
- type: object
LimitCounter:
allOf:
- $ref: '#/components/schemas/CampaignEntity'
- $ref: '#/components/schemas/ApplicationEntity'
- $ref: '#/components/schemas/AccountEntity'
- type: object
required:
- id
- action
- limit
- counter
properties:
id:
type: integer
description: Unique ID for this entity.
example: 6
action:
type: string
example: setDiscount
description: The limitable action of the limit counter.
profileId:
type: integer
description: The profile ID for which this limit counter is used.
example: 335
profileIntegrationId:
type: string
maxLength: 1000
description: The profile integration ID for which this limit counter is used.
example: URNGV8294NV
couponId:
type: integer
description: The internal coupon ID for which this limit counter is used.
example: 34
couponValue:
type: string
description: The coupon value for which this limit counter is used.
example: XMAS-20-2021
referralId:
type: integer
description: The referral ID for which this limit counter is used.
example: 4
referralValue:
type: string
description: The referral value for which this limit counter is used.
example: ''
identifier:
type: string
description: The arbitrary identifier for which this limit counter is used.
example: 91.11.156.141
period:
type: string
example: Y2021M8
description: The time period for which this limit counter is used.
limit:
type: number
example: 10
description: The highest possible value for this limit counter.
counter:
type: number
example: 5
description: The current value for this limit counter.
NewBaseNotification:
allOf:
- $ref: '#/components/schemas/BaseNotificationEntity'
- type: object
required:
- webhook
properties:
webhook:
$ref: '#/components/schemas/NewNotificationWebhook'
BaseNotificationEntity:
type: object
required:
- policy
properties:
policy:
$ref: '#/components/schemas/BaseNotificationPolicy'
enabled:
type: boolean
description: Indicates whether the notification is activated.
default: true
BaseNotificationPolicy:
type: object
description: Indicates which notification properties to apply.
oneOf:
- $ref: '#/components/schemas/ExpiringCouponsNotificationPolicy'
- $ref: '#/components/schemas/CardExpiringPointsNotificationPolicy'
- $ref: '#/components/schemas/ExpiringPointsNotificationPolicy'
- $ref: '#/components/schemas/AddedDeductedPointsNotificationPolicy'
- $ref: '#/components/schemas/CardAddedDeductedPointsNotificationPolicy'
- $ref: '#/components/schemas/CouponsNotificationPolicy'
- $ref: '#/components/schemas/CatalogsStrikethroughNotificationPolicy'
- $ref: '#/components/schemas/PendingPointsNotificationPolicy'
- $ref: '#/components/schemas/CampaignNotificationPolicy'
- $ref: '#/components/schemas/TierDowngradeNotificationPolicy'
- $ref: '#/components/schemas/TierUpgradeNotificationPolicy'
- $ref: '#/components/schemas/TierWillDowngradeNotificationPolicy'
ExpiringCouponsNotificationPolicy:
type: object
required:
- name
- triggers
properties:
name:
type: string
description: Notification name.
example: Notification to Google
minLength: 1
triggers:
type: array
maxItems: 3
minItems: 1
items:
$ref: '#/components/schemas/ExpiringCouponsNotificationTrigger'
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: true
ExpiringPointsNotificationPolicy:
type: object
required:
- name
- triggers
properties:
name:
type: string
description: Notification name.
example: Notification to Google
minLength: 1
triggers:
type: array
maxItems: 3
minItems: 1
items:
$ref: '#/components/schemas/ExpiringPointsNotificationTrigger'
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: true
CardExpiringPointsNotificationPolicy:
type: object
required:
- name
- triggers
properties:
name:
type: string
description: Notification name.
example: Notification to Google
minLength: 1
triggers:
type: array
maxItems: 3
minItems: 1
items:
$ref: '#/components/schemas/CardExpiringPointsNotificationTrigger'
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: true
AddedDeductedPointsNotificationPolicy:
type: object
required:
- name
- scopes
properties:
name:
type: string
description: Notification name.
example: Christmas Sale
minLength: 1
scopes:
type: array
minItems: 1
maxItems: 4
items:
type: string
enum:
- all
- campaign_manager
- management_api
- rule_engine
CardAddedDeductedPointsNotificationPolicy:
type: object
required:
- name
- scopes
properties:
name:
type: string
description: Notification name.
example: Christmas Sale
minLength: 1
scopes:
type: array
minItems: 1
maxItems: 4
items:
type: string
enum:
- all
- campaign_manager
- management_api
- rule_engine
CouponsNotificationPolicy:
type: object
required:
- name
- scopes
properties:
name:
type: string
description: Notification name.
example: Christmas Sale
minLength: 1
scopes:
type: array
minItems: 1
maxItems: 4
items:
type: string
enum:
- all
- campaign_manager
- management_api
- rule_engine
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: true
CatalogsStrikethroughNotificationPolicy:
type: object
required:
- name
properties:
name:
type: string
description: Notification name.
example: Christmas Sale
minLength: 1
PendingPointsNotificationPolicy:
type: object
required:
- name
properties:
name:
type: string
description: Notification name.
example: Christmas Sale
minLength: 1
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: false
TierUpgradeNotificationPolicy:
type: object
required:
- name
properties:
name:
type: string
description: Notification name.
example: Christmas Sale
minLength: 1
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: false
TierDowngradeNotificationPolicy:
type: object
required:
- name
properties:
name:
type: string
description: The name of the notification.
example: Christmas Sale
minLength: 1
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: false
CampaignNotificationPolicy:
type: object
required:
- name
properties:
name:
type: string
description: Notification name.
example: Christmas Sale
minLength: 1
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: false
TierWillDowngradeNotificationPolicy:
type: object
required:
- name
- triggers
properties:
name:
type: string
description: The name of the notification.
example: Notification to Google
minLength: 1
batchingEnabled:
type: boolean
description: Indicates whether batching is activated.
default: true
example: false
triggers:
type: array
maxItems: 3
minItems: 1
items:
$ref: '#/components/schemas/TierWillDowngradeNotificationTrigger'
ExpiringCouponsNotificationTrigger:
type: object
required:
- amount
- period
properties:
amount:
type: integer
description: The amount of period.
minimum: 0
period:
type: string
description: Notification period indicated by a letter; "w" means week, "d" means day.
enum:
- w
- d
ExpiringPointsNotificationTrigger:
type: object
required:
- amount
- period
properties:
amount:
type: integer
description: The amount of period.
minimum: 1
period:
type: string
description: Notification period indicated by a letter; "w" means week, "d" means day.
enum:
- w
- d
CardExpiringPointsNotificationTrigger:
type: object
required:
- amount
- period
properties:
amount:
type: integer
description: The amount of period.
minimum: 1
period:
type: string
description: Notification period indicated by a letter; "w" means week, "d" means day.
enum:
- w
- d
TierWillDowngradeNotificationTrigger:
type: object
required:
- amount
- period
properties:
amount:
type: integer
description: The amount of period.
period:
type: string
description: Notification period indicated by a letter; "w" means week, "d" means day.
enum:
- w
- d
BaseNotification:
allOf:
- $ref: '#/components/schemas/BaseNotificationEntity'
- type: object
required:
- webhook
- id
- type
properties:
webhook:
$ref: '#/components/schemas/BaseNotificationWebhook'
id:
type: integer
description: Unique ID for this entity.
example: 6
minimum: 1
type:
type: string
enum:
- campaign
- loyalty_added_deducted_points
- card_added_deducted_points
- coupon
- expiring_coupons
- expiring_points
- card_expiring_points
- pending_to_active_points
- strikethrough_pricing
- tier_downgrade
- tier_upgrade
- tier_will_downgrade
description: The notification type.
example: loyalty_added_deducted_points
BaseNotificationWebhook:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/MutableEntity'
- $ref: '#/components/schemas/NewNotificationWebhook'
- type: object
NewNotificationWebhook:
type: object
required:
- url
- headers
properties:
url:
type: string
description: API URL for the given webhook-based notification.
example: www.my-company.com/my-endpoint-name
headers:
type: array
description: List of API HTTP headers for the given webhook-based notification.
items:
type: string
pattern: ^[^:,]+:[^,]*$
example: 'content-type: application/json'
enabled:
type: boolean
description: Indicates whether the notification is activated.
default: true
example: true
OutgoingIntegrationConfigurationPolicy:
type: object
description: The outgoing integration policy specific to each integration type.
oneOf:
- $ref: '#/components/schemas/OutgoingIntegrationBrazePolicy'
- $ref: '#/components/schemas/OutgoingIntegrationCleverTapPolicy'
- $ref: '#/components/schemas/OutgoingIntegrationMoEngagePolicy'
- $ref: '#/components/schemas/OutgoingIntegrationIterablePolicy'
OutgoingIntegrationBrazePolicy:
type: object
required:
- baseUrl
- apiKey
properties:
baseUrl:
type: string
description: The base URL of your Braze deployment.
example: your-braze-url.com
apiKey:
type: string
description: The API key of your Braze deployment.
example: Your-REST-API-Key
OutgoingIntegrationCleverTapPolicy:
type: object
required:
- baseUrl
- accountId
- passcode
properties:
baseUrl:
type: string
description: The base URL that is based on the region key of your CleverTap account.
example: your-clevertap-url.com
accountId:
type: string
description: The CleverTap Project ID.
example: A9X-7A6-4A6B
passcode:
type: string
description: The CleverTap Project passcode.
example: ABB-BAF-AWZP
OutgoingIntegrationMoEngagePolicy:
type: object
required:
- baseUrl
- appId
- dataApiId
- dataApiKey
properties:
baseUrl:
type: string
description: The base URL of your MoEngage deployment, containing the MoEngage data center number (represented by `0X`).
example: https://api-01.moengage.com
appId:
type: string
description: MoEngage APP ID. See [MoEngage Developer Guide](https://developers.moengage.com/hc/en-us/articles/4404674776724-Overview).
example: LDUBEU9PLTPYXV30SMTYAAAA
dataApiId:
type: string
description: MoEngage DATA API ID. See [MoEngage Developer Guide](https://developers.moengage.com/hc/en-us/articles/4404674776724-Overview).
example: LDUBEU9PLTPYXV30SMTYAAAA
dataApiKey:
type: string
description: MoEngage DATA API Key. See [MoEngage Developer Guide](https://developers.moengage.com/hc/en-us/articles/4404674776724-Overview).
example: R95crrAAdZ747QLXe8LwnGLX
OutgoingIntegrationIterablePolicy:
type: object
required:
- baseUrl
- apiKey
properties:
baseUrl:
type: string
description: The base URL that is based on the region key of your Iterable account.
example: https://api.iterable.com
apiKey:
type: string
description: The API key generated from your Iterable account. See [Iterable API Key Guide](https://support.iterable.com/hc/en-us/articles/360043464871-API-Keys-)
example: 1234df4ba16940ca59c9352936d080a8
OutgoingIntegrationTemplate:
type: object
required:
- id
- integrationType
- title
- description
- payload
- method
- relativeUrl
- headers
properties:
id:
type: integer
description: Unique ID for this entity.
example: 6
integrationType:
type: integer
description: Unique ID of outgoing integration type.
example: 2
title:
type: string
description: The title of the integration template.
example: Email coupon codes
minLength: 1
maxLength: 255
description:
type: string
description: The description of the specific outgoing integration template.
example: This template sends a coupon code to the specified audience by email.
minLength: 1
maxLength: 1000
payload:
type: string
description: The API payload (supports templating using parameters) for this integration template.
example: "{\n\t\"message\": \"${message}\"\n}"
method:
type: string
enum:
- POST
- PUT
- GET
- DELETE
- PATCH
description: API method for this webhook.
example: POST
relativeUrl:
type: string
description: The relative URL corresponding to each integration template.
example: /campaigns/trigger/send
headers:
type: array
description: The list of HTTP headers for this integration template.
items:
type: string
pattern: ^([^:,]*):([^]*|[^,]*)$
example:
- '{"Content-Type": "application/json"}'
OutgoingIntegrationTemplateWithConfigurationDetails:
allOf:
- $ref: '#/components/schemas/OutgoingIntegrationTemplate'
- type: object
required:
- policy
properties:
policy:
$ref: '#/components/schemas/OutgoingIntegrationConfigurationPolicy'
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'
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
NewReturn:
type: object
required:
- returnedCartItems
properties:
returnedCartItems:
type: array
description: List of cart items to be returned.
items:
$ref: '#/components/schemas/ReturnedCartItem'
ReturnedCartItem:
type: object
required:
- position
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
EventV2:
allOf:
- $ref: '#/components/schemas/IntegrationProfileEntity'
- $ref: '#/components/schemas/IntegrationStoreEntity'
- $ref: '#/components/schemas/EvaluableCampaignIds'
- 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).
additionalProperties: true
example:
myAttribute: myValue
IntegrationEventV2Request:
allOf:
- $ref: '#/components/schemas/EventV2'
- type: object
properties:
responseContent:
type: array
description: |
Optional list of requested information to be present on the response related to the tracking custom event.
example:
- triggeredCampaigns
- customerProfile
items:
type: string
enum:
- customerProfile
- triggeredCampaigns
- loyalty
- event
- awardedGiveaways
- ruleFailureReasons
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
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
CatalogAction:
type: object
description: Definition of all the properties that are needed for a single catalog sync action.
required:
- type
- payload
properties:
type:
type: string
enum:
- ADD
- PATCH
- PATCH_MANY
- REMOVE
- REMOVE_MANY
description: The type of sync action.
example: ADD
payload:
$ref: '#/components/schemas/CatalogActionPayload'
description: The payload of sync action.
example:
sku: T123
attributes:
type: shoes
color: blue
replaceIfExists: true
CatalogActionPayload:
type: object
oneOf:
- $ref: '#/components/schemas/AddItemCatalogAction'
- $ref: '#/components/schemas/PatchItemCatalogAction'
- $ref: '#/components/schemas/PatchManyItemsCatalogAction'
- $ref: '#/components/schemas/RemoveItemCatalogAction'
- $ref: '#/components/schemas/RemoveManyItemsCatalogAction'
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.
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.
additionalProperties: true
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.
additionalProperties: true
product:
$ref: '#/components/schemas/Product'
createIfNotExists:
type: boolean
default: false
description: Indicates whether to create an item if the SKU does not exist.
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.
additionalProperties: true
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.
CatalogItem:
allOf:
- $ref: '#/components/schemas/Entity'
- type: object
required:
- sku
- catalogid
- version
properties:
sku:
type: string
description: The stock keeping unit of the item.
example: SKU1241028
price:
type: number
description: Price of the item.
example: 99.99
x-fieldType: NullDecimal
catalogid:
type: integer
description: The ID of the catalog the item belongs to.
example: 6
version:
type: integer
minimum: 1
description: The version of the catalog item.
example: 5
attributes:
type: array
items:
$ref: '#/components/schemas/ItemAttribute'
product:
$ref: '#/components/schemas/Product'
Product:
type: object
description: The specific properties of the product this item belongs to, if available.
required:
- name
properties:
name:
type: string
description: The name of the product.
maxLength: 50
example: sample_product
ItemAttribute:
allOf:
- type: object
required:
- attributeid
- name
- value
properties:
attributeid:
type: integer
description: The ID of the attribute of the item.
example: 6
name:
type: string
description: The name of the attribute.
value:
description: The value of the attribute.
UpdateStore:
type: object
required:
- name
- description
properties:
name:
type: string
description: The name of the store.
example: South US store
minLength: 1
maxLength: 200
description:
type: string
description: The description of the store.
example: This is the description of the store in south US.
attributes:
type: object
description: The attributes of the store.
additionalProperties: true
example:
country: USA
code: 1234
NewStore:
allOf:
- $ref: '#/components/schemas/UpdateStore'
- type: object
required:
- integrationId
properties:
integrationId:
type: string
format: string
example: STORE-001
maxLength: 1000
minLength: 1
description: |
The integration ID of the store. You choose this ID when you create a store.
**Note**: You cannot edit the `integrationId` after the store has been created.
Store:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/NewStore'
- type: object
required:
- updated
- applicationId
- integrationId
- created
properties:
created:
type: string
format: date-time
description: The time this entity was created.
example: '2020-02-07T08:15:22Z'
applicationId:
type: integer
description: The ID of the application that owns this entity.
example: 322
updated:
type: string
format: date-time
description: Timestamp of the most recent update on this entity.
example: '2021-09-23T10:12:42Z'
linkedCampaignIds:
type: array
description: A list of IDs of the campaigns that are linked with current store.
items:
type: integer
example:
- 4
- 6
- 8
CampaignStoreBudget:
allOf:
- $ref: '#/components/schemas/Entity'
- type: object
required:
- campaignId
- storeId
- limits
properties:
campaignId:
type: integer
description: The ID of the campaign that owns this entity.
example: 322
storeId:
type: integer
description: The ID of the store.
limits:
type: array
description: The set of budget limits for stores linked to the campaign.
items:
$ref: '#/components/schemas/LimitConfig'
CreateAchievement:
type: object
required:
- name
- title
- description
- target
- period
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'
AchievementAdditionalProperties:
type: object
required:
- campaignId
- userId
- createdBy
properties:
campaignId:
type: integer
description: ID of the campaign, to which the achievement belongs to
example: 1
userId:
type: integer
description: ID of the user that created this achievement.
example: 1234
createdBy:
type: string
description: |
Name of the user that created the achievement.
**Note**: This is not available if the user has been deleted.
example: John Doe
hasProgress:
type: boolean
description: Indicates if a customer has made progress in the achievement.
Achievement:
allOf:
- $ref: '#/components/schemas/Entity'
- $ref: '#/components/schemas/CreateAchievement'
- $ref: '#/components/schemas/AchievementAdditionalProperties'
- type: object
AchievementProgress:
type: object
required:
- achievementId
- name
- title
- description
- campaignId
- status
- progress
- startDate
- endDate
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
status:
type: string
enum:
- inprogress
- completed
- expired
example: completed
description: The status of the achievement.
target:
type: number
example: 10
description: The required number of actions or the transactional milestone to complete 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