Gift card offline redemption
- POST
/gift-card/offline/batchPost a terminal's stored sales - GET
/gift-card/offline/policyWhat a terminal is allowed to do while it is offline - GET
/gift-card/{reference}/qrThe QR a till scans
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
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/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"
}' {
"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"
} {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"terminalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"batchSequence": 0,
"status": "string",
"itemCount": 0,
"replayedItems": 0,
"rejectedItems": 0,
"totalAmount": 0,
"settledAmount": 0,
"shortfallAmount": 0,
"sequenceGap": true,
"processedDateTime": "2026-09-25T10:00:00Z",
"rejectionReason": "string"
},
"description": "Gift card offline batch accepted successfully"
} Responses
| Status | When |
|---|---|
200 | Gift 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
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Query parameters
| Name | Default |
|---|---|
terminalReference | Optional |
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" {
"data": {
"terminalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"storeReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"merchantReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"floorLimit": 0,
"currencyCode": "string",
"batchMaxItems": 0,
"acceptedPrograms": [
"string"
],
"signingKeys": [
{
"keyId": "string",
"algorithm": "SHA256withECDSA",
"publicKey": "string"
}
],
"policyExpiresAt": "2026-09-25T10:00:00Z",
"nextSequence": 0
},
"description": "Gift card offline policy retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Gift 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
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Query parameters
| Name | Default |
|---|---|
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" {
"data": {
"qr": "string",
"payloadType": "string",
"payloadNonce": "string",
"warning": "string"
},
"description": "Gift card QR produced successfully"
} Responses
| Status | When |
|---|---|
200 | Gift 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