Data handling
Learn how to pass and retrieve data with our APIs.
RESTful Calls
REST is a standardized technology that uses JSON to pass structured requests and responses and the HTTP protocol to invoke and select methods.
When providing input, you must ensure that the request is well-formed, paying attention to make sure that the JSON request definition adheres to the required case sensitivity which can be different depending on the method or operation you're calling.
Make sure to check, where provided, the sample request and response for each method or operation that you are going to call.
Dates and times
When you are using date/time values in your operation or method calls, you must be aware that our API runs on UTC (Coordinated Universal Time) and returns all dates/times in UTC in ISO 8601 format.
Paging through data
We use Seek pagination (also referred to as Continuation token or Cursor technique) for pagination.
This technique is simple to use as you only have to state a maximum number of data items to return per call, and optionally set a marker to indicate where the result set should start from.
Passing the pagination parameters
The parameters to control the pagination should be passed on the query string of the URI:
Query String Parameter | Data Type | Comments |
---|---|---|
limit | integer | Optional parameter, with an acceptable range of 0 - 10,000 and a default value of 5,000. |
marker | string | Optional parameter, request starts at the beginning of the data set if omitted. |
sort | string | Optional, see each call's documentation to see what sort options they support. |
For the initial call to a service that supports pagination you would normally not pass any of the pagination parameters, as you are starting a new data set, and this call will return a set of pagination links which you can then subsequently use to move through the data set.
Pagination links
Pagination links are helpful URI links and markers to retrieve related data pages when returning a page of data, such as the next page link, previous page link, and so on.
These links can be used to navigate the data set. For API calls, use the marker value to move through the data set when passed in the marker query string.
Pagination links are returned by service calls that support pagination as follows:
Field | Type | Mandatory | Notes |
---|---|---|---|
_links | links object | Yes | The pagination links to aid data set navigation. |
_items | array | Yes | The returned data items in this page. |
links object:
Field | Type | Mandatory | Notes |
---|---|---|---|
self | linkDetails object | Yes | The pagination links to aid data set navigation. |
first | linkDetails object | Yes | The returned data items in this page. |
prev | linkDetails object | No | Only returned if not at the start of the search, as there is no previous page at the beginning of a data set. |
next | linkDetails object | No | Only returned if not at the end of the search, as there is no next page at the end of a data set. |
last | linkDetails object | No | Only returned when it is easy to calculate the last page in the data set, so for dynamic data sets this isn't returned. |
linkDetails object:
Field | Type | Mandatory | Notes |
---|---|---|---|
link | string | Yes | The URI to use to access the page of data the link refers to. |
marker | string | Yes | The marker value to pass to start a data retrieval at this page. |
Example In this example, the limit is set to 2 and this is the returned response from the first page:
URI: https://{region}-api.dotdigital.com/loyalty/v1/members?limit=2
{
"_links": {
"self": {
"link": "https://{region}-api.dotdigital.com/loyalty/v1/members",
"marker": "12456"
},
"first": {
"link": "https://{region}-api.dotdigital.com/loyalty/v1/members",
"marker": "12456"
},
"next": {
"link": "https://{region}-api.dotdigital.com/loyalty/v1/members",
"marker": "12458"
}
},
"_items": [
{
"id": 12345,
"firstName": "Some",
"lastName": "Member",
"email": "[email protected]",
"telephoneNumber": "+447123123123",
"birthdayDate": "2025-09-16",
"lastActivityDate": "2025-09-16T16:28:32.809Z",
"pointsExpirationDate": "2025-09-16T16:28:32.809Z",
"joinedDate": "2025-09-16T16:28:32.809Z",
"pointsBalance": 0,
"emailMarketingConsentState": "Subscribed",
"smsMarketingConsentState": "Unsubscribed",
"eligibleRewards": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"cost": 10,
"type": "FreeShippingCouponCode",
"name": "Free P&P",
"available": true
}
],
"eligibleRules": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"points": 5,
"type": "Purchase",
"definition": "{}",
"alreadyFulfilled": false
}
],
"currentTier": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"achievedDate": "2025-09-16T16:28:32.809Z",
"name": "First purchase",
"level": 1
}
},
{
"id": 12346,
"firstName": "Some",
"lastName": "OtherMember",
"email": "[email protected]",
"telephoneNumber": "+447123123123",
"birthdayDate": "2025-09-16",
"lastActivityDate": "2025-09-16T16:28:32.809Z",
"pointsExpirationDate": "2025-09-16T16:28:32.809Z",
"joinedDate": "2025-09-16T16:28:32.809Z",
"pointsBalance": 0,
"emailMarketingConsentState": "Subscribed",
"smsMarketingConsentState": "Unsubscribed",
"eligibleRewards": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"cost": 10,
"type": "FreeShippingCouponCode",
"name": "Free P&P",
"available": true
}
],
"eligibleRules": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"points": 5,
"type": "Purchase",
"definition": "{}",
"alreadyFulfilled": false
}
],
"currentTier": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"achievedDate": "2025-09-16T16:28:32.809Z",
"name": "First purchase",
"level": 1
}
}
]
}

Updated 24 days ago