Data models

Every object the API returns, with field names, types and notes. Conventions used throughout:

Convention Description
Amounts Integer minor units with an ISO-4217 currency (9700 with USD = $97.00). Amounts never mix currencies in one operation
Ids Opaque UUID strings — treat them as case-sensitive and stable
Timestamps RFC 3339 UTC strings (2026-10-08T09:12:00Z)
Pagination limit + cursor request fields; responses carry next_cursor (null when there is no next page)
Errors {"error": "reason"} with the HTTP status carrying the class — see Errors & idempotency

Organization

Returned by GET /orgs, GET /orgs/{id} and org creation.

Field Type Notes
org_id string Organization id
name string Business name
country_code string ISO-3166 alpha-2; sets the default currency and payout rails
status string ACTIVE for a usable organization
role string The caller's role in this org (GET /orgs only)

Member

Returned by GET /orgs/{id}/members.

Field Type Notes
user_id string User id
email string Sign-in email
first_name, last_name string Display name
role string owner, admin, finance, support or developer
status string ACTIVE once the user has joined

Invite

Returned by GET /orgs/{id}/invites.

Field Type Notes
invite_id string Invite id, used to revoke
email string Invited address
role string Role granted on join
status string PENDING until claimed or revoked

API key

Created by POST /apikeys (raw key returned once), listed by GET /orgs/{id}/keys.

Field Type Notes
key string The raw key (fl_test_… / fl_live_…) — create response only, shown once
id / key_id string Key id, used to revoke
prefix string First characters of the key, safe to display
name string Label you gave the key
env string sandbox or live
status string ACTIVE or revoked

Terminal

Returned by GET /terminals and terminal creation.

Field Type Notes
id string Terminal id
title string Display name
terminal_type string REUSABLE (permanent terminal id — present as QR, NFC or link) or USE_ONCE (auto-created per checkout)
status string ACTIVE or INACTIVE
created_at timestamp Creation time

Checkout item

One line in a checkout or sale.

Field Type Notes
product_id string Your SKU or product id
display_name string Human-readable name
unit_price amount Price per unit in minor units
qty integer Quantity, greater than 0
cashback_rate integer Cashback in basis points (500 = 5%, max 10000)
item_image_url string Optional image shown to the shopper
item_url string Optional product link shown to the shopper

Checkout

Returned by checkout creation ({id, terminal_id}), by GET /terminals/{id}/checkout and inside sale details.

Field Type Notes
id string Checkout id — the value used for authorize and capture
terminal_id string Terminal this checkout belongs to
merchant_id string Your organization id
items array Checkout items
currency string ISO-4217
shipping_amount, tax_amount amount As sent at creation
total amount sum(unit_price x qty) + shipping_amount + tax_amount
total_cashback amount The cashback pot for this cart (see Cashback)
order_id string Your reference, echoed back
status string PENDING, AUTHORIZED, CAPTURED, VOIDED, EXPIRED or SUPERSEDED
expires_at timestamp When an unpaid checkout stops being payable
created_at timestamp Creation time

Sale

List rows come from GET /orgs/{id}/sales; GET /sales/{id} adds the cart and authorization.

Field Type Notes
id string Checkout id
terminal_id, terminal_title string Where the sale was made
total_minor amount Gross amount
currency string ISO-4217
cashback_minor amount Cashback pot funded by this sale
status string Checkout status (see above)
created_at timestamp Creation time
auth object Detail only: {id, status} of the charge authorization
items array Detail only: Checkout items

Charge capture result

Returned by POST /charges/{id}/capture.

Field Type Notes
journal_id string Transaction reference for this capture — stable across retries
mdr_fee amount Your processing fee for this charge
recommender_amount amount Cashback earned by the recommender (0 when the purchase did not come from a recommendation)
buyer_amount amount Always 0 at capture — the buyer's share is deferred
deferred_buyer_amount amount Cashback the buyer earns by recommending what they bought
recommender_id string Primary recommender's user id, when present
recommenders array One entry per recommender: {user_id, amount}

Return result

Returned by POST /charges/{id}/return.

Field Type Notes
return_id string Refund reference
refund amount Principal returned to the shopper (goods + pro-rata shipping and tax)
buyer_cut amount Pending buyer cashback removed by this return
rec_cut amount Pending recommender cashback removed by this return
award_adjusted boolean True when pending cashback was reduced or voided

Cashback summary

Returned by GET /orgs/{id}/cashback/summary — one entry per currency.

Field Type Notes
currency string ISO-4217
captured_count integer Number of captured charges
captured_minor amount Gross volume captured
funded_minor amount Cashback funded by you
social_count integer Captures that came from a recommendation
to_buyers_minor amount Cashback earned by buyers
to_recommenders_minor amount Cashback earned by recommenders

Webhook payload

Every delivery carries the event name, a unique delivery id and an HMAC signature in headers (see Webhooks). The JSON body depends on the event:

Event Body fields
checkout.authorized checkout_id, auth_id, total_minor, currency, consumer_id
charge.captured checkout_id, auth_id, mdr_fee, buyer_amount, deferred_buyer_amount, recommender_amount
charge.voided auth_id
charge.returned auth_id, return_id, refund, buyer_cut, rec_cut, award_adjusted

Payout

Created by POST /payouts (returns instruction_id); listed by GET /payouts.

Field Type Notes
instruction_id / id string Payout reference
provider string Banking partner handling the transfer
amount_minor amount Amount sent
currency string ISO-4217
status string PENDING while the banking partner processes, then settled