March 21, 2026

Ecommerce, Events, and Loyalty API updates

Ecommerce — New product fields

Two new fields are now supported on the POST /products and POST /products/batch endpoints, as well as the GET /products/{id} response:

  • brand — Brand name of the product. String, max 128 characters. Example: "Adidas".
  • description — Description of the product. String, max 3000 characters. Example: "Shoes for sports".

metaInfo limit updated: The size limit for the metaInfo field has changed from 1000 KB to 20,000 characters (total across all keys and values). The maximum number of keys remains 20.

Events API — New GET endpoint

A new GET /events endpoint is available to retrieve events filtered by contact, name, object type, or date range.

Query parameters:

ParameterDescription
contact_idFilter by contact ID (repeatable)
event_nameFilter by event name (repeatable)
object_typeFilter by object type (repeatable)
startDate / endDateDate range filter (YYYY-MM-DD or RFC3339). Defaults to the past 6 months.
limitMax events to return. Default 100, max 10000.
offsetEvents to skip for pagination. Default 0.

The response includes a count field for pagination and an events array sorted by event_date descending.

See Event endpoints for the full reference.

Events API — Batch events breaking changes

These are breaking changes to the POST /events/batch endpoint.

Response code changed: 204202

Successful batch requests now return 202 Accepted instead of 204 No Content. The response body is no longer empty — it returns a JSON object:

1{
2 "message": "Batch accepted. Valid events have been added to the processing queue.",
3 "count": 7
4}

Update any client code that checks for 204 on batch event responses.

Partial success status renamed: partialSuccesspartiallyQueued

The status field in the 207 partial success response body has been renamed from partialSuccess to partiallyQueued. Update any client code parsing this field.

Loyalty — Internal balance definitions and tier groups

Balance definitions and tier groups now support a meta object with an isInternal flag:

1"meta": {
2 "isInternal": true
3}

Internal balance definitions are excluded from member-facing balance reads by default. Pass includeInternal=true as a query parameter to include them.

The includeInternal query parameter is available on the following endpoints:

  • GET /loyalty/config/programs/{pid}/balance-definitions
  • GET /loyalty/balance/programs/{pid}/subscriptions/{cid}/balances
  • GET /loyalty/balance/programs/{pid}/balances
  • GET /loyalty/config/programs/{pid}/members

Loyalty — Transaction list filters

The transaction history endpoint (GET /loyalty/balance/programs/{pid}/subscriptions/{cid}/transactions) now supports additional query parameters:

ParameterDescription
statusFilter by status: draft, completed, rejected, cancelled, expired
transactionTypeFilter by type: credit or debit

The offset parameter now represents a page number (not a record skip count).