List transactions
Lists ledger entries newest first (created_at desc, id desc tiebreak). Cursor pagination: default 25, max 100; filters compose with the cursor.
Common patterns
- Customer history:
?customer_id=cus_... - Cashback only:
?card_type=reward&type[]=cashback.earn&type[]=cashback.redeem - Incremental sync from a known anchor: hold your last-ingested id and walk forward with
ending_beforeuntil an empty page - Un-reversed redemptions:
?action=redeem&reversed=false - Reconcile one receipt:
?external_id=pos-receipt-abc-123
See Pagination.
Authorizations
Your secret API key as a Bearer token: Authorization: Bearer vxn_sk_.... Keys are created and scoped in the dashboard - see Authentication.
Query Parameters
Filter to entries recorded by one team member (tm_ id): the person who booked the entry. Only matches source: "manual" entries - the only origin that carries a person. The account owner's id also matches older manual entries recorded before the person was captured. Combine with created[gte|lte] for per-staff shift reports.
^tm_[A-Za-z0-9]+$Filter by transaction type. Accepts a single value (?type=points.earn) OR an array of up to 10 values (?type[]=points.earn&type[]=points.redeem) - same toggle pattern as localized fields on the Card resource.
card.issue, card.link, card.unlink, cashback.earn, cashback.redeem, coupon.issue, coupon.redeem, discount.apply, discount.tier_change, employee_discount.apply, gift_card.create, gift_card.refund, gift_card.spend, gift_card.topup, import, manual_adjust, membership.activate, membership.expire, membership.renew, membership.use, points.earn, points.manual_adjust, points.redeem, purchase, reversal, stamp.add, stamp.bonus, stamp.redeem, tier.change Response
Paginated transaction list.
Cursor-paginated transaction list (newest first, created_at desc, id desc).
Cursor for the next page in the direction you are already paging, or null when this page ends the collection. has_more: true always comes with a non-null next_cursor.
Feed it back to the SAME parameter you used: starting_after when paging forward (the default), or ending_before when paging backward. Treat it as opaque and do not parse it.
You no longer need to take the last object's id yourself. That still works and is unchanged, but deriving the cursor from the page put the burden of knowing the sort direction on you, and it broke silently on any endpoint whose cursor is not the object id.
"cus_iofv5j4hn6bphinmmyat27tc5y"