Cardy docs

Changelog

Every partner-visible change to the Loyalty API, newest first. Changes within /v1 are additive: we do not remove fields, rename error codes, change types, or make optional fields required. If we ever need to break something it will be /v2, running alongside /v1 — never a deadline handed to you.

2026-08-29

allowed_operations now means "this will work". Four card types used to advertise redeem_points and then refuse it. If you were defensively handling a refusal on an operation we had listed, you no longer need to: every operation in the list is one the card can perform. Cards that hold money advertise redeem_amount instead, and cards that hold no spendable balance advertise no redemption at all.

No action needed. If you were suppressing buttons that we listed but that failed in practice, you can stop.

Back-dated sales beyond the offline window are now refused. occurred_at older than the store's offline window (24 hours by default) now answers VALIDATION_ERROR with details: ["occurred_at"]. It was previously accepted silently, which let a mis-configured till post sales into periods a store had already reconciled.

Action needed only if you back-date by more than a day. Normal offline batching is unaffected.

Subscription and multipass cards now report their points balance. balances.points was null on these cards and is now a number, so redemption against them works. Nothing changed shape — a field that was always present stopped being empty.


Entries begin here. Earlier changes predate the published API and are not listed; if you integrated before this date, nothing in the list above requires work beyond what each entry states.

Cardy Loyalty API Questions your integration cannot answer belong in an email, not a retry loop.