API reference · Cards & gift cards

Gift card offline redemption

POST Post a terminal's stored sales

POST /gift-card/offline/batch

Each item is replayed in sequence under the card's row lock. Expiry is judged as at the moment of sale; the balance as it stands now. An item already accepted moves no money a second time, and what a card can no longer fund is the merchant's loss, reported on the batch and on their settlement statement. The signed canonical form is pipe-joined: terminalReference|batchSequence|openedDateTime|closedDateTime|itemCount then, for each item ordered by sequence, sequence|cardCode|amount|redeemedDateTime|payloadNonce. Every timestamp is rendered as uuuu-MM-dd'T'HH:mm:ss.SSS and every amount with trailing zeros stripped, so that how a client happens to print a number or a time cannot change what it signed.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typeapplication/json

Example

Request body: SubmitGiftCardOfflineBatchRequest · Response: GenericResponseGiftCardOfflineBatchResponse

curl -X POST "https://api.bridgemoni.com/gift-card/offline/batch" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -H "Content-Type: application/json" \
  -d '{
  "terminalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
  "batchSequence": 0,
  "openedDateTime": "2026-09-25T10:00:00Z",
  "closedDateTime": "2026-09-25T10:00:00Z",
  "items": [
    {
      "sequence": 0,
      "cardCode": "string",
      "amount": 3500.0,
      "redeemedDateTime": "2026-09-25T10:00:00Z",
      "operatorUserReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
      "payloadNonce": "string"
    }
  ],
  "signature": "string"
}'

Responses

StatusWhen
200Gift card offline batch accepted successfully

GET What a terminal is allowed to do while it is offline

GET /gift-card/offline/policy

Refreshed whenever the terminal has connectivity. policyExpiresAt is a hard stop: a terminal whose policy has expired must refuse offline redemption entirely rather than work from stale acceptance rules.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Query parameters

NameDefault
terminalReferenceOptional

Example

Response: GenericResponseGiftCardOfflinePolicyResponse

curl -X GET "https://api.bridgemoni.com/gift-card/offline/policy?terminalReference=value" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Gift card offline policy retrieved successfully

GET The QR a till scans

GET /gift-card/{reference}/qr

Pass offline=true for a payload a disconnected terminal can verify by itself against a published public key. The f field in that payload is the FACE VALUE AT ISSUANCE, not the spendable balance: a terminal must never show it as a balance, and authorises against the lower of its own floor limit and the card's offline cap.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
reference

Query parameters

NameDefault
offline

Example

Response: GenericResponseGiftCardQrResponse

curl -X GET "https://api.bridgemoni.com/gift-card/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/qr?offline=value" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Gift card QR produced successfully

Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors