PaymentsView as markdown
Checkouts
A checkout is a cart that becomes a charge once the shopper authorizes it. Create it with an API key; the shopper authorizes it in the Fluense app.
Create
curl -s https://api.fluense.social/checkouts \
-H "x-api-key: $KEY" \
-H 'content-type: application/json' \
-d '{
"terminal_id": "019a…",
"currency": "USD",
"items": [
{ "product_id": "sku-1", "display_name": "Desk lamp", "unit_price": 8900, "qty": 1, "cashback_rate": 500 }
],
"shipping_amount": 0,
"tax_amount": 800,
"total": 9700,
"order_id": "order-1001",
"expires_in_secs": 3600
}'{ "id": "019a…", "terminal_id": "019a…" }Body
| Field | Type | Notes |
|---|---|---|
items |
array | Required, non-empty. Each line: product_id, display_name, unit_price (minor units), qty > 0, cashback_rate (bps, 0–10000), optional item_image_url, item_url |
total |
integer | Required. Must equal sum(unit_price x qty) + shipping_amount + tax_amount |
currency |
string | ISO-4217, default USD. Must match the shopper's account currency |
shipping_amount |
integer | Minor units, default 0 |
tax_amount |
integer | Minor units, default 0 |
terminal_id |
uuid | Optional. Omit to auto-create a USE_ONCE terminal |
order_id |
string | Your reference; echoed in sale responses. Not used for idempotency |
store / shipping |
object | Optional JSON blobs returned with the sale |
user_confirmation_url / user_cancel_url |
string | Optional redirects for hosted flows |
expires_in_secs |
integer | 60 s – 7 days; default 24 h |
Statuses
PENDING → AUTHORIZED → CAPTURED
VOIDED— the authorization was cancelled.EXPIRED— the checkout expired before payment.SUPERSEDED— a newer checkout replaced it on the same reusable terminal.
Authorize (shopper side)
The Fluense app calls this with the shopper's session — it is not a merchant call, but it gates the flow:
POST /checkouts/{id}/authorize # consumer session{ "auth_id": "019a…" }Gates: KYC approved, transaction monitoring, wallet balance >= total. The authorization holds funds for 7 days; capture inside that window.
Errors
400 empty items/bad line/bad cashback_rate— invalid cart.400 total mismatch: server-computed N— recomputetotal.400 terminal belongs to another merchant/only REUSABLE terminals can be reused/terminal inactive.