Receipt payload
The generic adapter accepts a flexible JSON receipt, so most POS systems can send what they already have with little mapping. This page lists the accepted fields and how each one is normalized.
Example
{
"store_id": "STORE_001",
"transaction_id": "TXN_0001",
"timestamp": "2026-09-26T15:04:05Z",
"currency": "CAD",
"amounts_in_cents": true,
"subtotal": 1400,
"tax": 175,
"total": 1575,
"payment_token": "tok_from_your_processor",
"items": [
{ "sku": "GEN-001", "description": "Notebook", "quantity": 2, "unit_cents": 500, "category": "Stationery" }
]
}
Receipt fields
When several names are listed, the first one present wins.
| Field (accepted names) | Normalized to | Notes |
|---|---|---|
store_id, storeId, location_id, locationId, merchant_id | Store | Must match a store ID registered during onboarding. Unmapped stores are held. |
transaction_id, transactionId, id | Transaction ID | Unique per sale. Reuse it on retries. |
timestamp, purchased_at, created_at | Purchase time | ISO 8601. Defaults to the time received. |
currency | Currency | ISO 4217, e.g. CAD. Defaults to USD. |
total_cents, or grand_total, grandTotal, total, amount | Grand total | |
tax_cents, or tax_total, taxTotal, tax | Tax total | |
subtotal_cents, or subtotal | Subtotal | Defaults to grand total minus tax. |
payment_token, paymentToken | Payment reference | Processor token or fingerprint. Never a card number. |
card_last4 | Last four digits | Used as the payment reference when no token is sent. |
items or line_items | Line items | See below. |
Line item fields
| Field (accepted names) | Notes |
|---|---|
sku | Used for recall matching. Send it whenever you have it. |
description or name | Shown on the receipt. |
quantity | Defaults to 1. |
unit_cents, or unit_price, unitPrice, price | Price of one unit. |
category | Optional. Used for shopper spending categories. |
Money
Send money in integer cents and set "amounts_in_cents": true, or use the *_cents fields, which are always read as cents. Without either, amounts are read as decimal currency units and converted to cents. Integer cents avoid rounding surprises, so prefer them.
Unknown fields
Extra fields are accepted and ignored by normalization, so you can send your POS's native payload with the fields above added.