Skip to main content

Loyalty Core Platform API (2.0)

Download OpenAPI specification:Download

Coupon Books

Get all the coupon books for the current organization

Authorizations:
bearer
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 100 ]
Default: 25
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

search
string

Filter by full text search

tags
string

Filter by all of these tags (AND logic). Comma-separated.

tagsAny
string

Filter by any of these tags (OR logic). Comma-separated.

status
string
Enum: "draft" "published" "disabled" "archived"

The status of the coupon book

locale
string

Translation locale requested for the coupon

audiences
string
locations
string
categories
string
productCategories
string
paymentMethods
string
channels
string
daysOfWeek
string
validFromDate
string <date-time>
validToDate
string <date-time>
loyaltyProgramKey
string
externalId
string
type
string
Enum: "single" "list" "generated" "codeless"

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/coupon-books?page=0&limit=10' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Creates a new coupon book

Authorizations:
bearer
Request Body schema: application/json
required
externalId
string
rankingIndex
number
audienceKeys
Array of strings
name
required
string
description
string
subtitle
string
pictureUrl
string
detailPictureUrl
string
images
object

Named image URLs as key-value pairs (e.g., main, detail, thumbnail)

customAttributes
object
condition
object
type
required
string
Enum: "single" "list" "generated" "codeless"

Type of coupon book

discountAmount
number
discountType
string
tags
Array of strings
publishingStatus
required
string
Enum: "draft" "published" "disabled" "archived"

Publishing status of the coupon book

validFromDate
string <date-time>
validToDate
string <date-time>
maxAssignedPerMember
number
maxAssignedPerCoupon
number
maxCouponCount
number
defaultLocale
string
assignmentRequiredPoints
number
usageRequiredPoints
number
contentSchemaId
number
contentSchemaVersionId
number
locations
Array of strings

Locations for filtering coupon books by location

categories
Array of strings

Categories for filtering coupon books by category

productCategories
Array of strings

Product categories for filtering coupon books by product category

paymentMethods
Array of strings

Payment methods for filtering coupon books by location

channels
Array of strings

Channels for filtering coupon books by category

maxDiscountPerPeriod
number

Maximum discount amount allowed per period

discountPeriodType
string
Enum: "daily" "weekly" "monthly"

Period type for discount limit

timezone
string

IANA timezone string for period calculations (e.g., America/Argentina/Buenos_Aires, Europe/Madrid)

maxUsagesPerPeriod
number

Maximum number of usages allowed per period

usagePeriodType
string
Enum: "daily" "weekly" "monthly"

Period type for usage limit

daysOfWeek
Array of numbers

Days of week when coupon book is available (1=Monday, 7=Sunday)

maxDiscountPerUse
number

Maximum discount amount allowed per use

locale
string

Locale

content
object

Content of the coupon book

isDefaultLocale
boolean

Is the locale default

requiredPointsConfig
required
object (RequiredPointsConfig)
tiers
Array of numbers

Tiers

loyaltyProgramKey
string

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "rankingIndex": 0,
  • "audienceKeys": [
    ],
  • "name": "string",
  • "description": "string",
  • "subtitle": "string",
  • "pictureUrl": "string",
  • "detailPictureUrl": "string",
  • "images": {},
  • "customAttributes": { },
  • "condition": { },
  • "type": "single",
  • "discountAmount": 0,
  • "discountType": "string",
  • "tags": [
    ],
  • "publishingStatus": "draft",
  • "validFromDate": "2019-08-24T14:15:22Z",
  • "validToDate": "2019-08-24T14:15:22Z",
  • "maxAssignedPerMember": 0,
  • "maxAssignedPerCoupon": 0,
  • "maxCouponCount": 0,
  • "defaultLocale": "string",
  • "assignmentRequiredPoints": 0,
  • "usageRequiredPoints": 0,
  • "contentSchemaId": 0,
  • "contentSchemaVersionId": 0,
  • "locations": [
    ],
  • "categories": [
    ],
  • "productCategories": [
    ],
  • "paymentMethods": [
    ],
  • "channels": [
    ],
  • "maxDiscountPerPeriod": 0,
  • "discountPeriodType": "daily",
  • "timezone": "string",
  • "maxUsagesPerPeriod": 0,
  • "usagePeriodType": "daily",
  • "daysOfWeek": [
    ],
  • "maxDiscountPerUse": 1000,
  • "locale": "string",
  • "content": { },
  • "isDefaultLocale": true,
  • "requiredPointsConfig": { },
  • "tiers": [
    ],
  • "loyaltyProgramKey": "string"
}

Response samples

Content type
application/json
{
  • "couponBook": {
    }
}

Get an existing coupon book details

Authorizations:
bearer
path Parameters
couponBookKey
required
string
query Parameters
locale
string

Translation locale requested for the coupon

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/coupon-books/{couponBookKey}' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "couponBook": {
    }
}

Updates a coupon book

Authorizations:
bearer
path Parameters
couponBookKey
required
string
Request Body schema: application/json
required
externalId
string
rankingIndex
number
audienceKeys
Array of strings
description
string
subtitle
string
pictureUrl
string
detailPictureUrl
string
images
object

Named image URLs as key-value pairs (e.g., main, detail, thumbnail)

customAttributes
object
condition
object
discountAmount
number
discountType
string
tags
Array of strings
validFromDate
string <date-time>
validToDate
string <date-time>
maxAssignedPerMember
number
maxAssignedPerCoupon
number
maxCouponCount
number
defaultLocale
string
assignmentRequiredPoints
number
usageRequiredPoints
number
contentSchemaId
number
contentSchemaVersionId
number
locations
Array of strings

Locations for filtering coupon books by location

categories
Array of strings

Categories for filtering coupon books by category

productCategories
Array of strings

Product categories for filtering coupon books by product category

paymentMethods
Array of strings

Payment methods for filtering coupon books by location

channels
Array of strings

Channels for filtering coupon books by category

maxDiscountPerPeriod
number

Maximum discount amount allowed per period

discountPeriodType
string
Enum: "daily" "weekly" "monthly"
timezone
string

IANA timezone string for period calculations (e.g., America/Argentina/Buenos_Aires, Europe/Madrid)

maxUsagesPerPeriod
number

Maximum number of usages allowed per period

usagePeriodType
string
Enum: "daily" "weekly" "monthly"
daysOfWeek
Array of numbers

Days of week when coupon book is available (1=Monday, 7=Sunday)

maxDiscountPerUse
number

Maximum discount amount allowed per use

locale
string

Locale

content
object

Content of the coupon book

isDefaultLocale
boolean

Is the locale default

requiredPointsConfig
required
object (RequiredPointsConfig)
name
string

The name of the coupon book

extraFields
object

content extra fields

tiers
Array of numbers

Tiers

loyaltyProgramKey
string

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "rankingIndex": 0,
  • "audienceKeys": [
    ],
  • "description": "string",
  • "subtitle": "string",
  • "pictureUrl": "string",
  • "detailPictureUrl": "string",
  • "images": {},
  • "customAttributes": { },
  • "condition": { },
  • "discountAmount": 0,
  • "discountType": "string",
  • "tags": [
    ],
  • "validFromDate": "2019-08-24T14:15:22Z",
  • "validToDate": "2019-08-24T14:15:22Z",
  • "maxAssignedPerMember": 0,
  • "maxAssignedPerCoupon": 0,
  • "maxCouponCount": 0,
  • "defaultLocale": "string",
  • "assignmentRequiredPoints": 0,
  • "usageRequiredPoints": 0,
  • "contentSchemaId": 0,
  • "contentSchemaVersionId": 0,
  • "locations": [
    ],
  • "categories": [
    ],
  • "productCategories": [
    ],
  • "paymentMethods": [
    ],
  • "channels": [
    ],
  • "maxDiscountPerPeriod": 0,
  • "discountPeriodType": "daily",
  • "timezone": "string",
  • "maxUsagesPerPeriod": 0,
  • "usagePeriodType": "daily",
  • "daysOfWeek": [
    ],
  • "maxDiscountPerUse": 1000,
  • "locale": "string",
  • "content": { },
  • "isDefaultLocale": true,
  • "requiredPointsConfig": { },
  • "name": "string",
  • "extraFields": { },
  • "tiers": [
    ],
  • "loyaltyProgramKey": "string"
}

Response samples

Content type
application/json
{
  • "couponBook": {
    }
}

Updates the status of a coupon book

Authorizations:
bearer
path Parameters
couponBookKey
required
string
Request Body schema: application/json
required
publishingStatus
required
string
Enum: "draft" "published" "disabled" "archived"

Status of the coupon book

Responses

Request samples

Content type
application/json
{
  • "publishingStatus": "draft"
}

Response samples

Content type
application/json
{
  • "couponBook": {
    }
}

Coupon Books Coupons

Get all coupon codes in a coupon book

Authorizations:
bearer
path Parameters
couponBookKey
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

Responses

Request samples

curl -X GET https://api.sandbox.qurable.io/v2/coupon-books/{couponBookKey}/coupons

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Add coupon codes to a coupon book

Authorizations:
bearer
path Parameters
couponBookKey
required
string
Request Body schema: application/json
required
codes
required
Array of strings

Codes to be added

Responses

Request samples

Content type
application/json
{
  • "codes": [
    ]
}

Response samples

Content type
application/json
{
  • "codes": {
    }
}

Members Coupon Books

Get all the coupon books from a member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 100 ]
Default: 25
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

tags
string

Filter by all of these tags (AND logic). Comma-separated.

tagsAny
string

Filter by any of these tags (OR logic). Comma-separated.

validFromDate
string <date-time>
validToDate
string <date-time>
locale
string

Translation locale requested for the coupon

locations
string
categories
string
productCategories
string
paymentMethods
string
channels
string
daysOfWeek
string
couponBookKey
string
withStockOnly
boolean
externalId
string
type
string
Enum: "single" "list" "generated" "codeless"

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/members/{loyaltyMemberId}/coupon-books?page=0&limit=10' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Use a coupon from the coupon-book

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
couponBookKey
required
string
Request Body schema: application/json
required
systemUniqueKey
string

System Unique Key by Organization ID

code
string

Code to be used

pendingCaptureLedgerTransactionId
string

Ledger transaction ID

externalId
string

External ID for tracking

pointsOverride
number

Optional points override. Positive values burn points, negative values mint points, zero skips point transaction. When absent, uses coupon book configured points.

amountDiscounted
number

The actual discount amount applied in this usage

usageData
object
autoAssign
boolean

Responses

Request samples

Content type
application/json
{
  • "systemUniqueKey": "string",
  • "code": "string",
  • "pendingCaptureLedgerTransactionId": "1234",
  • "externalId": "ext-123",
  • "pointsOverride": 100,
  • "amountDiscounted": 0,
  • "usageData": { },
  • "autoAssign": true
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "message": "string",
  • "couponUsage": {
    }
}

Assign a coupon from the coupon-book

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
couponBookKey
required
string
Request Body schema: application/json
required
amount
object
Default: 1

Amount to be assigned for each code

pendingCaptureLedgerTransactionId
string

Ledger transaction ID

externalId
string

External ID for tracking

pointsOverride
number

Optional points override. Positive values burn points, negative values mint points, zero skips point transaction. When absent, uses coupon book configured points.

systemUniqueKey
string
code
string
couponData
object
usageData
object
expiresAt
string <date-time>

Responses

Request samples

Content type
application/json
{
  • "amount": 1,
  • "pendingCaptureLedgerTransactionId": "1234",
  • "externalId": "ext-456",
  • "pointsOverride": 50,
  • "systemUniqueKey": "string",
  • "code": "string",
  • "couponData": { },
  • "usageData": { },
  • "expiresAt": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "message": "string",
  • "couponUsage": {
    }
}

Get all the coupons from a member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

notUsedOnly
boolean
couponBookTags
string

Filter by coupon books with all of these tags (AND logic). Comma-separated.

couponBookTagsAny
string

Filter by coupon books with any of these tags (OR logic). Comma-separated.

couponCode
string
couponBookKey
string

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/members/{loyaltyMemberId}/coupons?page=0&limit=10' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Get all the coupon usages from a member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

codes
Array of a[ items ]

Filter coupon usages by coupon codes (exact match). Maximum 100 codes allowed.

fromCreatedAt
string <date-time>

Filter coupon usages created from this date

toCreatedAt
string <date-time>

Filter coupon usages created up to this date

unusedOnly
boolean
Default: false

When true, returns only assignation records (amountAssigned > 0) for coupon codes where the member still has available balance

couponBookTags
string

Filter by coupon books with all of these tags (AND logic). Comma-separated.

couponBookTagsAny
string

Filter by coupon books with any of these tags (OR logic). Comma-separated.

couponBookKey
string

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/members/CL-RUT-90892932/coupon-usages?page=0&limit=10&couponBookKey={couponBookKey}' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Get a single coupon usage from a member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
couponUsageKey
required
string

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/members/{loyaltyMemberId}/coupon-usages/{couponUsageKey}' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "status": "success",
  • "message": "string",
  • "couponUsage": {
    }
}

Revert a coupon usage from a member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
couponUsageKey
required
string

Responses

Request samples


curl -X 'POST' \
  'https://api.sandbox.qurable.io/v2/members/{loyaltyMemberId}/coupon-usages/{couponUsageKey}/revert' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "status": "success",
  • "message": "string",
  • "couponUsage": {
    }
}

Revert the latest (or all) unreverted coupon usage(s) for a specific coupon code

By default reverts the most recent unreverted usage. Use revertAll=true to revert all unreverted usages for this code. WARNING: revertAll=true can revert up to 100 usages - use with caution. Partial failures in batch mode will return a warning status with details.

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
couponBookKey
required
string
couponCode
required
string
query Parameters
revertAll
boolean
Default: false

When true, revert all unreverted usages for this coupon code (max 100 usages). Default: false

Responses

Response samples

Content type
application/json
Example
{
  • "status": "success",
  • "message": "string",
  • "couponUsage": {
    }
}

Coupons

Get all coupons

Authorizations:
bearer
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

code
string
couponBookKey
string
loyaltyMemberId
string
expired
boolean

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/coupons?code={code}?page=0&limit=10' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

CMS

Get all collections with filtering

Authorizations:
bearer
query Parameters
contentType
string
Example: contentType=static

Filter by content type

tags
Array of strings

Filter by tags

page
number
Default: 0
Example: page=0

Page number

limit
number
Default: 20
Example: limit=20

Results per page

sort
string
Example: sort=createdAt:desc

Sort field and direction

Responses

Response samples

Content type
application/json
{
  • "results": [
    ],
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0
}

Create a new collection

Authorizations:
bearer
Request Body schema: application/json
required
name
required
string

Collection name

description
required
string

Collection description

slug
string

Slug (auto-generated from name if omitted)

ftsFields
required
Array of strings

FTS fields

facetFields
object

Facet fields map

jsonschema
object

JSON Schema for documents

tags
Array of strings

Tags for categorization

contentType
string
Enum: "static" "coupon"

Content type

Responses

Request samples

Content type
application/json
{
  • "name": "products",
  • "description": "Lorem ipsum",
  • "slug": "string",
  • "ftsFields": [
    ],
  • "facetFields": {
    },
  • "jsonschema": { },
  • "tags": [
    ],
  • "contentType": "static"
}

Response samples

Content type
application/json
{
  • "collection": {
    }
}

Get collection by key or slug

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string

Responses

Response samples

Content type
application/json
{
  • "collectionKey": "products",
  • "name": "products",
  • "description": "Lorem ipsum",
  • "slug": "string",
  • "ftsFields": [
    ],
  • "facetFields": {
    },
  • "jsonschema": { },
  • "tags": [
    ],
  • "contentType": "static",
  • "createdAt": "2022-01-01T00:00:00.000Z",
  • "updatedAt": "2022-01-01T00:00:00.000Z"
}

Update a collection by key or slug

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string
Request Body schema: application/json
required
name
string

Collection name

description
string

Collection description

slug
string

Slug (auto-generated from name if omitted)

ftsFields
Array of strings

FTS fields

facetFields
object

Facet fields map

jsonschema
object

JSON Schema for documents

tags
Array of strings

Tags for categorization

contentType
string
Enum: "static" "coupon"

Content type

Responses

Request samples

Content type
application/json
{
  • "name": "products",
  • "description": "Lorem ipsum",
  • "slug": "string",
  • "ftsFields": [
    ],
  • "facetFields": {
    },
  • "jsonschema": { },
  • "tags": [
    ],
  • "contentType": "static"
}

Response samples

Content type
application/json
{
  • "collection": {
    }
}

Get collection documents by key or slug

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string
query Parameters
q
string
Example: q=auriculares

Free text for full-text search

range
string
Example: range=range.price.min=10&range.price.max=100

Range filters (numeric or date). Use dot notation in query string: range.{field}.min=value&range.{field}.max=value

facet
string
Example: facet=facet.audienceKeys=['aud_00000']

Facet filters for exact matches. Use dot notation: facets.{field}=value or facets.{field}=['val1','val2']

locale
string
Default: ""

Locale filter (empty string for default)

status
string
Enum: "draft" "published"
Example: status=published

Document status filter (default: published)

sort
string
Example: sort=price:asc,createdAt:desc

Sort field and direction (e.g. "price:asc", "createdAt:desc")

page
number
Example: page=0

Page number (starting at 0)

limit
number
Example: limit=20

Result limit (1–200)

Responses

Response samples

Content type
application/json
{
  • "collection": {
    },
  • "query": {
    },
  • "totalCount": 10,
  • "items": [
    ],
  • "facets": {
    }
}

Batch create or update documents

Creates or updates multiple documents in a collection. Each document must include a documentKey. Existing documents will be updated, new documents will be created.

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string
Request Body schema: application/json
required
required
Array of objects (CmsBatchUpsertDocumentItemDto)

Documents to create or update

Array
documentKey
required
string

Document key (required for batch upsert)

slug
string

Slug (optional, duplicates allowed)

attrs
required
object

Document attributes

status
required
string
Enum: "draft" "published"
locale
required
string
Default: ""

Locale code (empty string for default)

fromDate
string or null <date-time>

Start date for content visibility

toDate
string <date-time>

End date for content visibility

audienceKeys
Array of strings

Audience segment keys

Responses

Request samples

Content type
application/json
{
  • "documents": [
    ]
}

Response samples

Content type
application/json
{
  • "upserted": [
    ],
  • "failed": [
    ],
  • "total": 0,
  • "successCount": 0,
  • "failureCount": 0
}

Get a specific document by documentKey or slug, and locale

Get document for a specific locale using either documentKey (UUID) or slug. Use empty string or omit locale query param for default locale.

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string
documentKeyOrSlug
required
string
query Parameters
locale
required
string

Responses

Response samples

Content type
application/json
{
  • "document": {
    }
}

Update a specific document by documentKey or slug

Update document for a specific locale. Use empty string or omit locale query param for default locale.

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string
documentKeyOrSlug
required
string
query Parameters
locale
required
string
Request Body schema: application/json
required
slug
string

Slug (optional, duplicates allowed)

attrs
object

Document attributes

status
string
Enum: "draft" "published"
fromDate
string or null <date-time>

Start date for content visibility

toDate
string <date-time>

End date for content visibility

audienceKeys
Array of strings

Audience segment keys

locale
string
Default: ""

Locale code (empty string for default)

Responses

Request samples

Content type
application/json
{
  • "slug": "string",
  • "attrs": { },
  • "status": "draft",
  • "fromDate": "2019-08-24T14:15:22Z",
  • "toDate": "2019-08-24T14:15:22Z",
  • "audienceKeys": [
    ],
  • "locale": ""
}

Response samples

Content type
application/json
{
  • "document": {
    }
}

Delete a single document (soft delete)

Deletes a single document by documentKey or slug. Returns the deleted document details.

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string
documentKeyOrSlug
required
string
query Parameters
locale
required
string

Responses

Response samples

Content type
application/json
{
  • "document": {
    }
}

Get all locale versions of a document

Returns all translations (locales) for a given documentKey or slug.

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string
documentKeyOrSlug
required
string

Responses

Response samples

Content type
application/json
{
  • "documentKeyOrSlug": "string",
  • "locales": [
    ]
}

Create or update a specific locale version of a document

Upsert a translation for a specific locale. The documentKey groups all translations together.

Authorizations:
bearer
path Parameters
collectionKeyOrSlug
required
string
documentKeyOrSlug
required
string
locale
required
string
Request Body schema: application/json
required
slug
string

Slug (optional, duplicates allowed)

attrs
required
object

Document attributes

status
required
string
Enum: "draft" "published"
fromDate
string or null <date-time>

Start date for content visibility

toDate
string <date-time>

End date for content visibility

audienceKeys
Array of strings

Audience segment keys

Responses

Request samples

Content type
application/json
{
  • "slug": "string",
  • "attrs": { },
  • "status": "draft",
  • "fromDate": "2019-08-24T14:15:22Z",
  • "toDate": "2019-08-24T14:15:22Z",
  • "audienceKeys": [
    ]
}

Response samples

Content type
application/json
{
  • "document": {
    }
}

Members

Gets organization's members details

Authorizations:
bearer
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

email
string

Filter by email

loyaltyMemberId
string

Filter by loyalty member id

fromCreatedAt
string <date-time>

Filter members created from this date

toCreatedAt
string <date-time>

Filter members created up to this date

Responses

Response samples

Content type
application/json
{
  • "results": [
    ],
  • "total": 100,
  • "page": 1,
  • "limit": 10
}

Creates a new member in the current organization

Authorizations:
bearer
Request Body schema: application/json
required
loyaltyMemberId
required
string

Loyalty Member Id within Organization and Loyalty Program

publicLoyaltyMemberId
string

Optional Public Loyalty Member Id within Organization and Loyalty Program

object

Member's Profile Info.

active
boolean

Member's Active Status.

customAttributes
object

Custom dynamic attributes for organization member.

memberType
string

Type of the member.

channelAcquisition
string

Channel through which the member was acquired.

notifications
object

Notification preferences

referralCode
string

An Optional Referral Code

Responses

Request samples

Content type
application/json
{
  • "loyaltyMemberId": "11111-11111",
  • "publicLoyaltyMemberId": "11111-11111",
  • "profile": {
    },
  • "active": true,
  • "customAttributes": {
    },
  • "memberType": "organization",
  • "channelAcquisition": "mobile_app",
  • "notifications": {
    },
  • "referralCode": "ref-24fAdsa"
}

Response samples

Content type
application/json
{
  • "loyaltyMember": {
    }
}

Gets organization's Loyalty Member details

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string

Responses

Response samples

Content type
application/json
{
  • "loyaltyMember": {
    }
}

Updates a member in the current organization

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
Request Body schema: application/json
required
loyaltyMemberId
string

Loyalty Member Id within Organization and Loyalty Program

publicLoyaltyMemberId
string

Optional Public Loyalty Member Id within Organization and Loyalty Program

object

Member's Profile Info.

active
boolean

Member's Active Status.

customAttributes
object

Custom dynamic attributes for organization member.

memberType
string

Type of the member.

notifications
object

Notification preferences

updateReason
string

Reason for updating the member

Responses

Request samples

Content type
application/json
{
  • "loyaltyMemberId": "11111-11111",
  • "publicLoyaltyMemberId": "11111-11111",
  • "profile": {
    },
  • "active": true,
  • "customAttributes": {
    },
  • "memberType": "organization",
  • "notifications": {
    },
  • "updateReason": "Updated member profile information"
}

Response samples

Content type
application/json
{
  • "loyaltyMember": {
    }
}

Check matching audiences for a member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
Request Body schema: application/json
required
audienceIds
required
Array of numbers

Responses

Request samples

Content type
application/json
{
  • "audienceIds": [
    ]
}

Response samples

Content type
application/json
{
  • "audienceIds": [
    ]
}

Get all matching audiences for a member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string

Responses

Response samples

Content type
application/json
{
  • "audienceKeys": [
    ]
}

Check members existence

Authorizations:
bearer
Request Body schema: application/json
required
loyaltyMemberIds
required
Array of strings

List of loyaltyMemberId

Responses

Request samples

Content type
application/json
{
  • "loyaltyMemberIds": [
    ]
}

Response samples

Content type
application/json
{
  • "loyaltyMembers": [
    ]
}

Gets events for a loyalty member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

fromCreatedAt
string <date-time>

Filter events created from this date

toCreatedAt
string <date-time>

Filter events created up to this date

eventType
string
Enum: "member-purchase-order-created" "member-purchase-order-confirmed" "member-purchase-order-cancelled" "member-purchase-order-returned" "member-purchase-order-partially-returned" "member-created" "member-updated" "member-tier-set" "member-tier-removed" "member-profile-deactivated" "member-generic-event" "benefit-used" "coupon-code-assigned" "coupon-code-used" "badge-minted" "mission-status-updated" "ledger-transaction-created"

Filter events by type

status
string
Enum: "pending" "running" "failed" "success"

Filter events by status

Responses

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Gets transactions for a loyalty member

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

fromExternalEventDate
string <date-time>

Optional Reference From Event Date

toExternalEventDate
string <date-time>

Optional Reference To Event Date

ledgerAccountKey
string

Optional Ledger Account Key

systemUniqueKey
string

Optional System Unique Key for tracking

tags
string

Responses

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Get valid CMS documents for a member from a collection

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
collectionKeyOrSlug
required
string
query Parameters
page
number >= 0
Default: 0
Example: page=0

Page number (0-indexed)

limit
number [ 1 .. 200 ]
Default: 20
Example: limit=20

Number of results per page

sort
string
Example: sort=createdAt:desc

Sort field and direction (e.g., 'createdAt:desc', 'name:asc')

Responses

Response samples

Content type
application/json
{
  • "collection": {
    },
  • "query": {
    },
  • "totalCount": 10,
  • "items": [
    ],
  • "facets": {
    }
}

Events

Track loyalty events

Track loyalty events

Authorizations:
bearer
Request Body schema: application/json
required
required
Array of objects (TrackOrganizationLoyaltyEventDto)

Array of loyalty events to track

campaignKeys
Array of strings

Array of campaign keys to filter campaigns for evaluation

dryRun
boolean

If true, the events will be processed but no actual changes will be made

Responses

Request samples

Content type
application/json
{
  • "events": [
    ],
  • "campaignKeys": [
    ],
  • "dryRun": false
}

Response samples

Content type
application/json
{
  • "results": [
    ],
  • "dryRun": false
}

Loyalty Points

Mint loyalty points to default account

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
Request Body schema: application/json
required
amount
required
number >= 1

The amount of points to mint

systemUniqueKey
string <= 255 characters

The system unique key for the loyalty program

externalEventDate
string <date-time>

The date of the external event

description
string <= 255 characters

The description of the external event

tags
Array of strings

Optional tags for the event

Responses

Request samples

Content type
application/json
{
  • "amount": 1,
  • "systemUniqueKey": "string",
  • "externalEventDate": "2019-08-24T14:15:22Z",
  • "description": "string",
  • "tags": [
    ]
}

Response samples

Content type
application/json
{
  • "result": {
    }
}

Burn loyalty points to default account

Burn loyalty points to default account.

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
Request Body schema: application/json
required
amount
required
number >= 1

The amount of points to mint

systemUniqueKey
string <= 255 characters

The system unique key for the loyalty program

externalEventDate
string <date-time>

The date of the external event

description
string <= 255 characters

The description of the external event

tags
Array of strings

Optional tags for the event

captureMethod
string
Enum: "manual" "auto"

The capture method: manual or auto. Default is auto

Responses

Request samples

Content type
application/json
{
  • "amount": 1,
  • "systemUniqueKey": "string",
  • "externalEventDate": "2019-08-24T14:15:22Z",
  • "description": "string",
  • "tags": [
    ],
  • "captureMethod": "auto"
}

Response samples

Content type
application/json
{
  • "result": {
    }
}

Capture loyalty points from default account.

Capture loyalty points from default account. Points must have been burned with captureMethod = manual

Authorizations:
bearer
Request Body schema: application/json
required
required
Array of objects (TransactionCaptureDto)

The transactions to capture

Array
captureAmount
number >= 1

The amount of points to capture

ledgerTransactionId
required
string <= 255 characters

The ledger transaction id to capture

Responses

Request samples

Content type
application/json
{
  • "transactions": [
    ]
}

Response samples

Content type
application/json
{
  • "ok": true
}

Revert loyalty points from default account.

Revert loyalty points from default account. Can only revert debit transactions and batch is processed as an atomic set.

Authorizations:
bearer
Request Body schema: application/json
required
required
Array of objects (RevertLoyaltyPointsDto)

The transactions to revert

Array
ledgerTransactionId
required
string <= 255 characters

The ledger transaction id to revert

systemUniqueKey
string <= 255 characters

The system unique key for the loyalty program

externalEventDate
string <date-time>

The date of the external event

description
string <= 255 characters

The description of the external event

tags
Array of strings

Optional tags for the event

Responses

Request samples

Content type
application/json
{
  • "transactions": [
    ]
}

Response samples

Content type
application/json
{
  • "results": [
    ]
}

List Member's Transactions

Get all member transactions

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

fromDate
string <date-time>

Optional Reference From Event Date

toDate
string <date-time>

Optional Reference To Event Date

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/members/{loyaltyMemberId}/points/txs?page=0&limit=10' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Get nearest wallet expirations

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string

Responses

Response samples

Content type
application/json
{
  • "nearestExpiration": {
    }
}

Referral Programs

Get a referral program by key

Authorizations:
bearer
path Parameters
referralProgramKey
required
string

Responses

Response samples

Content type
application/json
{
  • "referralProgram": {
    }
}

Create a new referral code

Create a new referral code for a given loyalty member

Authorizations:
bearer
path Parameters
referralProgramKey
required
string
Request Body schema: application/json
required
codes
required
Array of strings[ items <= 255 characters ]

The codes to be created

loyaltyMemberId
required
string <= 255 characters

The loyalty member to be associated with the code

Responses

Request samples

Content type
application/json
{
  • "codes": [
    ],
  • "loyaltyMemberId": "string"
}

Response samples

Content type
application/json
{
  • "codes": [
    ]
}

Missions

Get organization's missions

Authorizations:
bearer
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

type
string
codes
string
tags
string
loyaltyProgramKey
string

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/missions?page=0&limit=10' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Create a new mission

Authorizations:
bearer
Request Body schema: application/json
required
name
required
string
shortDescription
string
description
string
pictureUrl
string
customAttributes
object
type
string
tags
Array of strings
code
required
string
active
boolean
validFrom
string <date-time>
validTo
string <date-time>
repetitionPeriod
string
periodLimit
number
pointsAccrual
number
eventType
required
string
Enum: "member-purchase-order-created" "member-purchase-order-confirmed" "member-purchase-order-cancelled" "member-purchase-order-returned" "member-purchase-order-partially-returned" "member-created" "member-updated" "member-tier-set" "member-tier-removed" "member-profile-deactivated" "member-generic-event" "benefit-used" "coupon-code-assigned" "coupon-code-used" "badge-minted" "mission-status-updated" "ledger-transaction-created"

Event Type to match

maxRepetitions
required
number >= 1

Max number of repetitions

goalCount
required
number >= 1

Goal count

loyaltyProgramKey
required
string
ledgerKey
string
ledgerAccountKey
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "shortDescription": "string",
  • "description": "string",
  • "pictureUrl": "string",
  • "customAttributes": { },
  • "type": "string",
  • "tags": [
    ],
  • "code": "string",
  • "active": true,
  • "validFrom": "2019-08-24T14:15:22Z",
  • "validTo": "2019-08-24T14:15:22Z",
  • "repetitionPeriod": "string",
  • "periodLimit": 0,
  • "pointsAccrual": 0,
  • "eventType": "member-purchase-order-confirmed",
  • "maxRepetitions": 10,
  • "goalCount": 3,
  • "loyaltyProgramKey": "string",
  • "ledgerKey": "string",
  • "ledgerAccountKey": "string"
}

Response samples

Content type
application/json
{
  • "mission": {
    }
}

Get a mission by key

Authorizations:
bearer
path Parameters
missionKey
required
string

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/missions/{missionKey}' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "mission": {
    }
}

Get member's missions

Authorizations:
bearer
path Parameters
loyaltyMemberId
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

type
string
codes
string
tags
string
minTimesAchieved
number >= 0

Min number of times it has been achieved

minCounterCount
number >= 0

Min number of times the event has been triggered

available
boolean

Filter available missions

inProgress
boolean

If member started the mission but has not achieved it yet (even if she completed it in the past)

active
boolean

Filter missions with active status

validFrom
string <date-time>

Filter missions with valid from date

validTo
string <date-time>

Filter missions with valid to date

missionKey
string
loyaltyProgramKey
string

Responses

Request samples


curl -X 'GET' \
  'https://api.sandbox.qurable.io/v2/members/{loyaltyMemberId}/missions?page=0&limit=10' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Campaigns

Get organization's campaigns

Authorizations:
bearer
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

type
string
codes
string
tags
string
loyaltyProgramKey
string

Responses

Request samples


      'https://api.sandbox.qurable.io/v2/campaigns?page=0&limit=10' \
      -H 'accept: application/json' \
      -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Create a new campaign

Authorizations:
bearer
Request Body schema: application/json
required
name
required
string
description
string
pictureUrl
string
customAttributes
object
smartRewards
object
type
string
tags
Array of strings
enabledTopics
Array of strings
code
required
string
active
boolean
audienceKeys
Array of strings
pointsMonthlyLimitPerMember
number
allowPartialApplicationOnLimit
boolean
daysOfWeek
Array of strings
locationCodes
Array of strings
eventType
string
minSpendValue
number
loyaltyTierKeys
Array of strings
validFrom
string <date-time>
validTo
string <date-time>
loyaltyProgramKey
string
Array of objects (CreateActionDto)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "pictureUrl": "string",
  • "customAttributes": { },
  • "smartRewards": { },
  • "type": "string",
  • "tags": [
    ],
  • "enabledTopics": [
    ],
  • "code": "string",
  • "active": true,
  • "audienceKeys": [
    ],
  • "pointsMonthlyLimitPerMember": 0,
  • "allowPartialApplicationOnLimit": true,
  • "daysOfWeek": [
    ],
  • "locationCodes": [
    ],
  • "eventType": "string",
  • "minSpendValue": 0,
  • "loyaltyTierKeys": [
    ],
  • "validFrom": "2019-08-24T14:15:22Z",
  • "validTo": "2019-08-24T14:15:22Z",
  • "loyaltyProgramKey": "string",
  • "actions": [
    ]
}

Response samples

Content type
application/json
{
  • "campaign": {
    }
}

Get a campaign by key

Authorizations:
bearer
path Parameters
campaignKey
required
string

Responses

Request samples


        curl -X 'GET' \
        'https://api.sandbox.qurable.io/v2/campaigns/{campaignKey}' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "campaign": {
    }
}

Update an existing campaign

Authorizations:
bearer
path Parameters
campaignKey
required
string
Request Body schema: application/json
required
name
required
string
description
string
pictureUrl
string
customAttributes
object
smartRewards
object
type
string
tags
Array of strings
enabledTopics
Array of strings
code
required
string
active
boolean
audienceKeys
Array of strings
pointsMonthlyLimitPerMember
number
allowPartialApplicationOnLimit
boolean
daysOfWeek
Array of strings
locationCodes
Array of strings
eventType
string
minSpendValue
number
loyaltyTierKeys
Array of strings
validFrom
string <date-time>
validTo
string <date-time>
Array of objects (UpdateActionWithKeyDtoV2)
loyaltyProgramKey
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "pictureUrl": "string",
  • "customAttributes": { },
  • "smartRewards": { },
  • "type": "string",
  • "tags": [
    ],
  • "enabledTopics": [
    ],
  • "code": "string",
  • "active": true,
  • "audienceKeys": [
    ],
  • "pointsMonthlyLimitPerMember": 0,
  • "allowPartialApplicationOnLimit": true,
  • "daysOfWeek": [
    ],
  • "locationCodes": [
    ],
  • "eventType": "string",
  • "minSpendValue": 0,
  • "loyaltyTierKeys": [
    ],
  • "validFrom": "2019-08-24T14:15:22Z",
  • "validTo": "2019-08-24T14:15:22Z",
  • "actions": [
    ],
  • "loyaltyProgramKey": "string"
}

Response samples

Content type
application/json
{
  • "campaign": {
    }
}

Actions

Get all actions for a campaign

Authorizations:
bearer
path Parameters
campaignKey
required
string
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

status
string
Enum: "disabled" "running" "draft"

The status of the action

campaignKey
string

Responses

Request samples

curl -X GET "https://api.qurable.com/v2/campaigns/{campaignKey}/actions" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Create a new action

Authorizations:
bearer
path Parameters
campaignKey
required
string
Request Body schema: application/json
required
actionIndex
number
abortEvaluationIfFalse
boolean
abortEvaluationOnError
boolean
name
required
string
rules
object
effects
required
object
status
required
string
Enum: "disabled" "running" "draft"

Responses

Request samples

Content type
application/json
{
  • "actionIndex": 0,
  • "abortEvaluationIfFalse": true,
  • "abortEvaluationOnError": true,
  • "name": "string",
  • "rules": { },
  • "effects": { },
  • "status": "disabled"
}

Response samples

Content type
application/json
{
  • "action": {
    }
}

Get a specific action by key

Authorizations:
bearer
path Parameters
campaignKey
required
string
actionKey
required
string

Responses

Request samples

curl -X GET "https://api.qurable.com/v2/campaigns/{campaignKey}/actions/{actionKey}" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

Response samples

Content type
application/json
{
  • "action": {
    }
}

Update an existing action

Authorizations:
bearer
path Parameters
campaignKey
required
string
actionKey
required
string
Request Body schema: application/json
required
actionIndex
number
abortEvaluationIfFalse
boolean
abortEvaluationOnError
boolean
name
required
string
rules
object
effects
required
object
status
required
string
Enum: "disabled" "running" "draft"

Responses

Request samples

Content type
application/json
{
  • "actionIndex": 0,
  • "abortEvaluationIfFalse": true,
  • "abortEvaluationOnError": true,
  • "name": "string",
  • "rules": { },
  • "effects": { },
  • "status": "disabled"
}

Response samples

Content type
application/json
{
  • "action": {
    }
}

Action Matchers

Get organization's action matchers

Authorizations:
bearer
query Parameters
type
string
Value: "item-matcher"
page
number
Default: 0
limit
number
Default: 10

Responses

Request samples


      curl -X 'GET' \
      'https://api.sandbox.qurable.io/v2/action-matchers?page=0&limit=10' \
      -H 'accept: application/json' \
      -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "matchers": [
    ],
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0
}

Create a new action matcher

Authorizations:
bearer
Request Body schema: application/json
required
name
required
string <= 255 characters

The name of the action matcher

type
required
string
Value: "item-matcher"

The type of the action matcher

matcher
required
object

The matcher configuration

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "item-matcher",
  • "matcher": { }
}

Response samples

Content type
application/json
{
  • "matcher": {
    }
}

Get an action matcher by key

Authorizations:
bearer
path Parameters
matcherKey
required
string

Responses

Request samples


        curl -X 'GET' \
        'https://api.sandbox.qurable.io/v2/action-matchers/{matcherKey}' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "matcher": {
    }
}

Update an existing action matcher

Authorizations:
bearer
path Parameters
matcherKey
required
string
Request Body schema: application/json
required
name
string <= 255 characters

The name of the action matcher

type
string
Value: "item-matcher"

The type of the action matcher

matcher
object

The matcher configuration

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "item-matcher",
  • "matcher": { }
}

Response samples

Content type
application/json
{
  • "matcher": {
    }
}

Smart Campaigns

Get Smart Campaign Conditions with pagination and filtering

Authorizations:
bearer

Responses

Request samples

curl -X 'GET' \
        'https://api.sandbox.qurable.io/v2/smart-campaigns/conditions?page=1&limit=10&category=Member&search=tier' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "results": [
    ]
}

Get Smart Campaign Effects with pagination and filtering

Authorizations:
bearer

Responses

Request samples

curl -X 'GET' \
        'https://api.sandbox.qurable.io/v2/smart-campaigns/effects?page=1&limit=10&category=Rewards&search=points' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "results": [
    ]
}

Create a new smart campaign

Authorizations:
bearer
Request Body schema: application/json
required
name
required
string
description
string
pictureUrl
string
customAttributes
object
smartRewards
object
type
string
tags
Array of strings
enabledTopics
Array of strings
code
required
string
active
boolean
audienceKeys
Array of strings
pointsMonthlyLimitPerMember
number
allowPartialApplicationOnLimit
boolean
daysOfWeek
Array of strings[ items [ 1 .. 7 ] ]

Days of week when campaign is active (1=Monday, 7=Sunday)

locationCodes
Array of strings

Location codes where campaign is active

eventType
string
minSpendValue
number
loyaltyTierKeys
Array of strings
validFrom
string <date-time>
validTo
string <date-time>
required
Array of objects (RewardConfigurationDto)

Array of reward configurations

loyaltyProgramKey
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "pictureUrl": "string",
  • "customAttributes": { },
  • "smartRewards": { },
  • "type": "string",
  • "tags": [
    ],
  • "enabledTopics": [
    ],
  • "code": "string",
  • "active": true,
  • "audienceKeys": [
    ],
  • "pointsMonthlyLimitPerMember": 0,
  • "allowPartialApplicationOnLimit": true,
  • "daysOfWeek": [
    ],
  • "locationCodes": [
    ],
  • "eventType": "string",
  • "minSpendValue": 0,
  • "loyaltyTierKeys": [
    ],
  • "validFrom": "2019-08-24T14:15:22Z",
  • "validTo": "2019-08-24T14:15:22Z",
  • "rewards": [
    ],
  • "loyaltyProgramKey": "string"
}

Response samples

Content type
application/json
{
  • "campaign": {
    }
}

Get a smart campaign by key

Authorizations:
bearer
path Parameters
campaignKey
required
string

Responses

Request samples

curl -X 'GET' \
        'https://api.sandbox.qurable.io/v2/smart-campaigns/{campaignKey}' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "campaign": {
    }
}

Update an existing smart campaign

Authorizations:
bearer
path Parameters
campaignKey
required
string
Request Body schema: application/json
required
name
required
string
description
string
pictureUrl
string
customAttributes
object
smartRewards
object
type
string
tags
Array of strings
enabledTopics
Array of strings
code
required
string
active
boolean
audienceKeys
Array of strings
pointsMonthlyLimitPerMember
number
allowPartialApplicationOnLimit
boolean
daysOfWeek
Array of strings[ items [ 1 .. 7 ] ]

Days of week when campaign is active (1=Monday, 7=Sunday)

locationCodes
Array of strings

Location codes where campaign is active

eventType
string
minSpendValue
number
loyaltyTierKeys
Array of strings
validFrom
string <date-time>
validTo
string <date-time>
required
Array of objects (RewardConfigurationDto)

Array of reward configurations

loyaltyProgramKey
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "pictureUrl": "string",
  • "customAttributes": { },
  • "smartRewards": { },
  • "type": "string",
  • "tags": [
    ],
  • "enabledTopics": [
    ],
  • "code": "string",
  • "active": true,
  • "audienceKeys": [
    ],
  • "pointsMonthlyLimitPerMember": 0,
  • "allowPartialApplicationOnLimit": true,
  • "daysOfWeek": [
    ],
  • "locationCodes": [
    ],
  • "eventType": "string",
  • "minSpendValue": 0,
  • "loyaltyTierKeys": [
    ],
  • "validFrom": "2019-08-24T14:15:22Z",
  • "validTo": "2019-08-24T14:15:22Z",
  • "rewards": [
    ],
  • "loyaltyProgramKey": "string"
}

Response samples

Content type
application/json
{
  • "campaign": {
    }
}

Segment Management

Create a new segment

Creates a new segment with an automatically linked list-matcher audience. The segment defines membership refresh schedules and configuration.

Authorizations:
bearer
Request Body schema: application/json
required
name
required
string [ 1 .. 255 ] characters

Name of the segment

description
string <= 1000 characters

Description of the segment

refreshType
string (SegmentRefreshType)
Default: "once"
Enum: "once" "daily" "weekly" "monthly"

The refresh type determines membership TTL. ONCE: never expires, DAILY: 24h, WEEKLY: 7d, MONTHLY: 30d

isActive
boolean
Default: true

Indicates if the segment is active and can be used for targeting

disableList
boolean
Default: false

Controls the audience active status. When true, sets the audience to inactive (active=false), preventing sync jobs and member operations. When false or undefined, the audience remains active. The segment definition can still be used for estimation/preview queries regardless of this setting.

tags
string

Tags associated with the segment

definition
object

DSL-based audience definition for complex segmentation queries

Responses

Request samples

Content type
application/json
{
  • "name": "VIP Customers",
  • "description": "High-value customers with over $1000 in purchases",
  • "refreshType": "once",
  • "isActive": true,
  • "disableList": false,
  • "tags": "VIP,High-value",
  • "definition": {
    }
}

Response samples

Content type
application/json
{
  • "segment": {
    }
}

Get all segments for the organization

Retrieves a paginated list of segments with support for filtering by active status and searching by name/description.

Authorizations:
bearer
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

isActive
boolean
Example: isActive=true

Filter by segment active status

search
string
Example: search=VIP

Search segments by name or description

tags
string
Example: tags=VIP,High-value

Filter segments that contain any of the provided tags

Responses

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Get a segment by key

Authorizations:
bearer
path Parameters
segmentKey
required
string

Segment key

Responses

Response samples

Content type
application/json
{
  • "segment": {
    }
}

Update a segment

Updates segment properties. Changes to name and description are automatically synchronized to the linked audience.

Authorizations:
bearer
path Parameters
segmentKey
required
string
Example: seg_01H9X8Y7Z6P5Q4R3S2T1V0W9

Unique segment identifier

Request Body schema: application/json
required
version
number >= 1

Segment version number for optimistic locking

Responses

Request samples

Content type
application/json
{
  • "version": 2
}

Response samples

Content type
application/json
{
  • "segment": {
    }
}

Audience List

Get a set of members from an audience with pagination support

Authorizations:
bearer
path Parameters
audienceKey
required
string

Audience key

query Parameters
limit
number [ 1 .. 1000 ]
Default: 100
Example: limit=100

Maximum number of members to return (1-1000)

lastEvaluatedKey
string
Example: lastEvaluatedKey=eyJtZW1iZXJJZCI6MTIzLCJhdWRpZW5jZUtleSI6ImF1ZF8wMUFSWjNOREVLVFNWNFJSRkZRNjlHNUZBViJ9

Pagination token from previous response to get next page of results (base64 encoded)

Responses

Response samples

Content type
application/json
{
  • "members": [
    ],
  • "lastEvaluatedKey": "eyJtZW1iZXJJZCI6MTIzLCJhdWRpZW5jZUtleSI6ImF1ZF8wMUFSWjNOREVLVFNWNFJSRkZRNjlHNUZBViJ9",
  • "count": 100
}

Add and remove multiple members to a persisted audience

Authorizations:
bearer
path Parameters
audienceKey
required
string

Audience key

Request Body schema: application/json
required
addLoyaltyMemberIds
Array of strings <= 1000 items

Array of loyalty member IDs to add to the audience

removeLoyaltyMemberIds
Array of strings <= 1000 items

Array of loyalty member IDs to remove from the audience

Responses

Request samples

Content type
application/json
{
  • "addLoyaltyMemberIds": [
    ],
  • "removeLoyaltyMemberIds": [
    ]
}

Response samples

Content type
application/json
{
  • "added": [
    ],
  • "removed": [
    ]
}

Audiences

Get organization's audiences

Authorizations:
bearer
query Parameters
page
number >= 0
Example: page=0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

matcherType
string
Enum: "attribute-matcher" "list-matcher" "null-matcher"

Filter by matcher type

search
string
Example: search=VIP customers

Search audiences by name or description

audienceKeys
string
Example: audienceKeys=aud_123,aud_456,aud_789

Filter audiences by specific audience keys (comma-separated)

Responses

Request samples


      curl -X 'GET' \
      'https://api.sandbox.qurable.io/v2/audiences?page=0&limit=10' \
      -H 'accept: application/json' \
      -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Create a new audience

Authorizations:
bearer
Request Body schema: application/json
required
active
required
boolean
name
required
string
description
string
matcherType
required
string
Enum: "attribute-matcher" "list-matcher" "null-matcher"
matcher
object
segmentKey
string
refreshedAt
string <date-time>
memberCount
number

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "name": "string",
  • "description": "string",
  • "matcherType": "attribute-matcher",
  • "matcher": { },
  • "segmentKey": "string",
  • "refreshedAt": "2019-08-24T14:15:22Z",
  • "memberCount": 0
}

Response samples

Content type
application/json
{
  • "audience": {
    }
}

Get an audience by key

Authorizations:
bearer
path Parameters
audienceKey
required
string

Responses

Request samples


        curl -X 'GET' \
        'https://api.sandbox.qurable.io/v2/audiences/{audienceKey}' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer {YOUR_TOKEN}'

Response samples

Content type
application/json
{
  • "audience": {
    }
}

Update an existing audience

Authorizations:
bearer
path Parameters
audienceKey
required
string
Request Body schema: application/json
required
active
boolean
name
string
description
string
matcherType
string
Enum: "attribute-matcher" "list-matcher" "null-matcher"
matcher
object
segmentKey
string
refreshedAt
string <date-time>
memberCount
number

Responses

Request samples

Content type
application/json
{
  • "active": true,
  • "name": "string",
  • "description": "string",
  • "matcherType": "attribute-matcher",
  • "matcher": { },
  • "segmentKey": "string",
  • "refreshedAt": "2019-08-24T14:15:22Z",
  • "memberCount": 0
}

Response samples

Content type
application/json
{
  • "audience": {
    }
}

Segment Definitions

Get the semantic data model

Returns the semantic data model definition including available facts, dimensions, and their attributes. This model can be used to construct segment definitions. The model may be customized per organization based on custom semantic model configuration.

Authorizations:
bearer

Responses

Response samples

Content type
application/json
{
  • "model": {
    }
}

Estimate member count for a segment definition

Estimates the number of members that would match the given segment definition. Also returns the total organization member count and the percentage of members that match.

Authorizations:
bearer
Request Body schema: application/json
required
definition
required
object

DSL-based audience definition to estimate member count

Responses

Request samples

Content type
application/json
{
  • "definition": {
    }
}

Response samples

Content type
application/json
{
  • "estimation": {
    }
}

Get available values for a dimension

Returns paginated and searchable values for a specific dimension within the organization context. Supported dimensions: memberGender, memberType, memberTag, tier, purchaseLocation, purchaseTag. Supports pagination (page, limit) and case-insensitive search by name.

Authorizations:
bearer
path Parameters
dimensionKey
required
string
query Parameters
page
number >= 1
Default: 1
Example: page=1

Page number (1-indexed)

limit
number [ 1 .. 1000 ]
Default: 100
Example: limit=100

Items per page

search
string
Example: search=gold

Search term for dimension value names (case-insensitive)

Responses

Response samples

Content type
application/json
{
  • "dimensionValues": {
    }
}

Ledgers

Gets a single Ledger for the current organization.

Authorizations:
bearer
path Parameters
ledgerKey
required
string
header Parameters
X-Q-Forwarded-Org
string

Organization Key

X-Q-Forwarded-User
string

User Key

Responses

Response samples

Content type
application/json
{
  • "ledger": {
    }
}

Updates a single Ledger in the current organization.

Authorizations:
bearer
path Parameters
ledgerKey
required
string
header Parameters
X-Q-Forwarded-Org
string

Organization Key

X-Q-Forwarded-User
string

User Key

Request Body schema: application/json
required
name
required
string
description
string

Responses

Request samples

Content type
application/json
{
  • "name": "Main Loyalty Program Ledger",
  • "description": "This is the main Loyalty Program Ledger"
}

Response samples

Content type
application/json
{
  • "ledger": {
    }
}

Gets all Ledgers for the current organization.

Authorizations:
bearer
query Parameters
page
number >= 0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

header Parameters
X-Q-Forwarded-Org
string

Organization Key

X-Q-Forwarded-User
string

User Key

Responses

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}

Creates a single Ledger in the current organization.

Authorizations:
bearer
header Parameters
X-Q-Forwarded-Org
string

Organization Key

X-Q-Forwarded-User
string

User Key

Request Body schema: application/json
required
name
required
string
description
string

Responses

Request samples

Content type
application/json
{
  • "name": "Main Loyalty Program Ledger",
  • "description": "This is the main Loyalty Program Ledger"
}

Response samples

Content type
application/json
{
  • "ledger": {
    }
}

Ledger Accounts

Gets all Ledger's Accounts

Authorizations:
bearer
path Parameters
ledgerKey
required
string
query Parameters
page
number >= 0

The page number for pagination

limit
number [ 1 .. 25 ]
Example: limit=10

The limit of items to return per page

order
string

Order of columns in result in the format 'column,asc|desc?'. Samples: ?order=col1 or ?order=col1,asc

header Parameters
X-Q-Forwarded-Org
string

Organization Key

X-Q-Forwarded-User
string

User Key

Responses

Response samples

Content type
application/json
{
  • "totalCount": 0,
  • "page": 0,
  • "limit": 0,
  • "results": [
    ]
}