api:read, api:writeAPI path:
/v1/collections (ledger: kind: "collection")Dashboard: Payment Links — Invoices and Checkout tabs
Invoice vs checkout
Every payment link has alinkMode. This controls how many times the URL can be used and how payments are tracked.
Fixed vs open amount
Both modes supportpricingType:
Typical pairings:
- Invoice + fixed — “Pay invoice #1042 for $500”
- Invoice + open — “Send whatever you owe on this bill”
- Checkout + fixed — “Buy this product for $49” (new session each visit)
- Checkout + open — “Donate any amount” (new session each visit)
When to use which
Choose invoice when you create a link for a specific payment event — billing a client, a one-off request, an API-generated link per order line. Choose checkout when one URL should stay live on your site — pricing page, embed widget, “Pay with crypto” button. Each visitor gets their own payment session; the parent link staysactive until you cancel it.
Merchant endpoints
Auth: API key or dashboard JWT. Writes with an API key needIdempotency-Key.
{collectionId} is the RemitFlex payment link UUID from POST or GET /collections (invoice id or checkout parent id).
Discover supported networks and corridors in Networks & corridors (GET /collections/chains and GET /collections/corridors mirror the payment-routes discovery endpoints).
Create an invoice
payUrl. The payer quotes and pays on that same id. Poll GET /collections/{collectionId} or GET /pay/{collectionId} for status (for invoices, both use the same {collectionId}).
Create a checkout link
status: "active". Share payUrl or embed the parent id.
When a payer requests a quote (POST /pay/{parentId}/quote), Remitflex creates a session (child collection). Track that payment with GET /pay/{sessionId} or list sessions on GET /collections/{parentId}.
Update
UsePATCH /collections/{collectionId} on the parent link (invoice or checkout). Sessions cannot be PATCHed.
POST /collections/{collectionId}/logo (multipart). Sync — POST /collections/{collectionId}/sync. Legacy aliases POST .../cancel and PATCH .../embed-config still work.
Payer endpoints
No auth. On pay routes,{collectionId} is the payment link UUID — the invoice id, checkout parent id (for quote), or checkout session id (after quote).
refundTo is required on every deposit quote.
Payer details
When creating a link, setpayerFields to collect information from payers before quoting:
Each field has
required: true or false. On quote (POST /pay/{collectionId}/quote), send collected values in payerDetails:
payerDetails appear on GET /collections/{collectionId} and checkout session lists.
On the hosted pay page, Connect wallet is available for EVM and Solana fixed-amount payments. Bitcoin and Tron payers use Send manually — copy the deposit address and pay from any wallet or exchange.
- Invoice: quote on the invoice
id. - Checkout: quote on the parent checkout
id→ response uses the new session id for deposit and status.
Status values
On
completed, refunded, and failed, Remitflex emails a receipt to the creating dashboard user. When customer receipts are enabled for the organisation (dashboard Settings, or PATCH /v1/org/settings), the payer (if an email was collected) and linked customer are emailed too.
Fixed pricing: quote expires in ~1 min (quoteValidUntil). Open pricing: re-quote on the same origin reuses the deposit address.
Embed
Works for invoice and checkout parent ids.- Theme —
PATCH /collections/{collectionId}(embedConfig) or dashboard Payment Links → Embed - Loader —
embed.jsopens a modal or inline iframe at/embed/{linkId} - Pay UI — theme from
GET /pay/{collectionId}/embed-config(checkout sessions inherit parent theme)
postMessage (type: "remitflex.payment"): opened, status, completed, failed, resize.
Pass ?origin=https://yoursite.com on the iframe URL so messages target your domain only.