Terminals
A terminal is a point of sale your shoppers pay through. It is identified by its terminal id, and that id can be encoded in anything the shopper can read — a QR code, an NFC tag, a deep link, a printed number. When the Fluense app reads it, it resolves the terminal's latest checkout and the shopper authorizes it.
| Type | Behaviour |
|---|---|
REUSABLE |
A permanent terminal id for a counter or register — present it as a QR code, write it to an NFC tag, or link to it. One active checkout at a time: creating a new one supersedes the previous pending checkout. |
USE_ONCE |
Created automatically when a checkout is made without a terminal_id — useful for one-off payment links. |
Create
Session or API key (the key's org must own the terminal).
curl -s https://api.fluense.social/terminals \
-H "authorization: Bearer $SESSION" \
-H 'content-type: application/json' \
-d '{"title":"Front counter"}'{ "id": "019a…" }List
curl -s https://api.fluense.social/terminals -H "authorization: Bearer $SESSION"{
"terminals": [
{ "id": "019a…", "title": "Front counter", "terminal_type": "REUSABLE", "status": "ACTIVE", "created_at": "2026-10-08T09:12:00Z" }
]
}Update
PATCH /terminals/{id} with title and/or status (ACTIVE or INACTIVE).
{ "ok": true }Resolve the active checkout
GET /terminals/{id}/checkout returns the latest non-expired checkout for the terminal — the endpoint behind the terminal id, whether the shopper scanned a QR, tapped an NFC tag or opened a link. API keys see their own terminals; consumer sessions can read any terminal (they are the shopper paying).
{
"id": "019a…",
"merchant_id": "019a…",
"terminal_id": "019a…",
"items": [ { "product_id": "sku-1", "display_name": "Desk lamp", "unit_price": 8900, "qty": 1, "cashback_rate": 500 } ],
"currency": "USD",
"total": 9700,
"status": "PENDING",
"expires_at": "2026-10-09T09:12:00Z"
}404 no active checkout on this terminal means the previous checkout expired, was paid, or was superseded — create a new one.
POS flow
POST /checkoutswithterminal_id(your key).- Poll
GET /terminals/{id}/checkoutor let the shopper read the terminal id (QR, NFC, link). - The shopper authorizes; you capture with
POST /charges/{auth_id}/capture.