GET /consumer/v1/redemptions) takes the same query parameters. Each reference page lists exactly which sort fields, search fields and filters that operation supports.
Pages
The response is a page envelope:
pageandperPageecho the values that were applied.totalis the exact number of matching items;totalPagesisceil(total / perPage)and0when nothing matches.- A
pagebeyondtotalPagesis not an error: you get200with an emptydataarray and the real totals. - There are no
nextorprevlinks. Compute the next page frompageandtotalPages. - A
pageorperPageoutside the allowed range is answered with400 data-failed-validation: themore.validationErrorsitem haspropertypageorperPage, the constraintinvalid-pageandparams.min/params.max.
Sorting
sort is one field, optionally prefixed with - for descending order (sort=field or sort=-field):
- Use one of the fields the operation allows. Any other value, a comma-separated list included, is answered with
400 data-failed-validation: the item haspropertysort, the constraintinvalid-sortandparams.allowed, the sortable fields. - The default is the resource’s natural time field, descending (for example
-createdAtor-redeemedAt). - The server always appends
idin the direction of your sort field, so the order is total and stable even when several items share a timestamp. - Sorting by a localised text field uses the language of your request.
Searching
search is a free-text term of 1 to 255 characters (an empty value is ignored).
- It matches case-insensitively as a substring over the operation’s search fields, for example a redemption entity’s
refId,displayNameandemail. - A term that is a numeric id, or an exact
refIdorexternalRef, also matches by equality. searchand filters are combined with AND.
Filtering
Filters use bracket notation:filter[<field>][<operator>]=<value>, or filter[<field>]=<value> for the default operator.
Rules:
- Field names are the JSON property names; nested properties use dots (
filter[redemptionEntity.refId]=customer:48213). - A value with an unescaped comma means
in:filter[status]=completed,voided. Write a literal comma inside a value as\,and a backslash as\\. nullis not a value: usefilter[redemptionLinkId][isNull]=true.- Several filters are combined with AND; the same field may appear with several operators to form a range.
- At most 20
filter[…]parameters per request and 100 values perinlist; more is answered like an invalid filter (below). - Timestamps need an offset (
2026-10-01T00:00:00Z); ranges are half-open, so combinegteandlt. - An unknown field, an operator the field does not support or a value of the wrong type is answered with
400 data-failed-validation: the item’spropertyis the parameter (filter[redeemedAt][gte]) and its constraint isinvalid-filter. A query parameter the operation does not declare at all gets the constraintunknown-parameterin the same response.
--data-urlencode do it:
Invalid list parameters
Every problem with the list parameters of one request is reported in one400 data-failed-validation response, with one more.validationErrors item per problem:
page × perPage, but deep pages are slow and shift while rows are added. For large result sets, narrow the list with filters, sync incrementally (below) or walk time windows as described in Downloading large lists.
Syncing large collections
Page numbers shift when items are added while you page, so an offset walk can skip or repeat items. To keep a local copy in sync:1
Filter by a time field and sort by it
Request
filter[redeemedAt][gte]=<last timestamp you stored>&sort=redeemedAt&perPage=100 (use the time field the operation offers, for example redeemedAt or createdAt).2
Walk the pages
Read pages until
page equals totalPages. For a long backlog, restart every 100 pages with a new gte value: the largest timestamp you have seen.3
Deduplicate by id
gte returns the boundary item again; upsert by id so repeats do not matter.Downloading large lists
There are no export endpoints: to get a whole list (for a CSV or spreadsheet file, or a one-off extract), page through the list operation itself. The dashboards’ “Download CSV / Excel” action works the same way.- Send
perPage=100(the maximum on every list) and the same filters, search and sort on every request. For a small list, plain paging frompage=1tototalPagesis enough. - For a large list (we recommend it above about 100 pages), walk time windows on the list’s download key instead, so rows added while you download do not shift the pages:
createdAt, orredeemedAtfor redemptions (each reference page lists the operators; the key supportsgt,gte,lt,lte).- Fix a cut-off when you start:
filter[redeemedAt][lte]=<start time>and sort by-redeemedAt. - Read pages 1 to 100.
- Start again at
page=1withfilter[redeemedAt][lte]=<redeemedAt of the last row you received>, and drop rows whoseidyou already have. Stop when a page has fewer than 100 rows.
- Fix a cut-off when you start:
- Rows created after the cut-off are not included; take them in your next run.
- Send one request at a time. On
429wait forRetry-After, then repeat the same request. Requests are limited at the network edge per source IP address (see Limits → Edge limits), and a 50,000-row download (500 requests) stays far below that limit.