Appearance
List transactions
GET
/transactions
The ledger: every stamp, redemption, reversal and expiry, newest first. Filterable by location, program, card, type and date range, and cursor-paginated — the cursor is a keyset, so a row inserted while you are paging cannot make you skip one. This is the one read a location-restricted key can genuinely narrow, because every transaction carries the site it happened at; asking for a location outside the restriction returns an EMPTY PAGE rather than an error, so a sync loop does not break on it. There is NO endpoint that writes a transaction, and no transactions:write scope: a transaction is the record that a real card was presented at a real place.
Authorizations
ApiKeyBearer
A shop-scoped API key created in the dashboard and shown exactly once. An MCP tmk_ key presented here returns a 401 that names the mistake.
Type
HTTP (bearer)
Parameters
Query Parameters
limit
Page size. Clamped to the maximum (100 by default, PUBLIC_API_MAX_PAGE_SIZE) rather than rejected.
Type
integer
Minimum
1cursor
Opaque cursor from a previous response's next_cursor. Absent next_cursor (null) means the end.
Type
string
location_id
Type
string
program_id
Type
string
card_id
Type
string
type
Type
string
from
Type
string
Format
"date-time"to
Type
string
Format
"date-time"Responses
List transactions
application/json
JSON "data": [ { "id": "trx_docsfixture0001", "card_id": "cin_docsfixture0001", "program_id": "prg_docsfixture0001", "type": "stamp", "location_id": "loc_docsfixture0001", "location_name": "Via Roma 1", "stamps_delta": 1, "value_delta": null, "prize_id": null, "reversed_at": null, "created_at": "2026-08-05T10:15:00.000Z" } ], "next_cursor": "eyJjIjoiMjAyNi0wOC0wNVQxMDoxNTowMC4wMDBaIiwiaSI6ImNpbl9kb2NzZml4dHVyZTAwMDEifQ", "limit": 25
{
}
GET
/transactions