Reconciliation.
Stablecoin settlements are easier to reconcile than card payments — every payment is a single on-chain transaction with a deterministic hash, and there is no T+2 batch deposit. The trade-off is that each payment is its own deposit, so your accounting system needs the right primitives. This page describes what the API gives you today, and what the dashboard / native integrations will add later.
What every payment row carries
Every confirmed payment exposes the fields a finance team needs to post a journal entry. Pull from GET /v1/workspaces/:ws/payments. API responses use camelCase keys (the SDKs preserve that shape one-to-one):
{
"id": "pay_9fX0a2E1",
"status": "confirmed",
"createdAt": "2026-04-17T09:14:02Z",
"confirmedAt": "2026-04-17T09:14:08Z",
"amountMinor": 19900, // gross, in token minor units
"feeMinor": 199, // platform fee at confirm time
"netMinor": 19701, // amountMinor − feeMinor
"currency": "USD",
"token": "USDC",
"chain": "base",
"txHash": "0x9a2f...3bc1",
"blockNumber": 24822413,
"confirmations": 12,
"customerId": "cus_9fX0a2E1",
"subscriptionId": null,
"invoiceId": null
}Monthly fee statement
Platform fees are accrued per-payment (feeMinor on each row) and aggregated into a single monthly statement at GET /v1/workspaces/:ws/fee-statements. That gives finance teams two ways to book fees: per-payment (granular) or per-month (one journal entry). Same total either way. The fee-statements endpoint is currently session-authenticated (dashboard only); API-key access is coming with the public billing read surface.
Refunds and dunning
Refunds emit refund.broadcast and refund.confirmed webhooks, with their own tx hashes for chain-of-custody. Failed renewals run the dunning cascade (1 / 3 / 7 / 14 days) and emit subscription.past_due events — book those against an A/R account if you carry receivables.
Timestamps and timezone
All API timestamps are UTC ISO-8601. The dashboard displays in your account-local zone (set under Settings → General).
CSV export
Append ?format=csv to the payments OR invoices list endpoint. Both CSVs carry the core record + customer + invoice identity columns appended at the end so index-based consumers stay compatible while name-based readers find the new fields by header. Cells starting with =, +, -, or @ are prefixed with a single quote to defeat formula injection in Excel / Sheets / Numbers. The export is paginated server-side at 5 000 rows per request — scope to a fiscal period with &from=2026-04-01&to=2026-06-30 (both bounds inclusive on created_at).
Payments CSV columns
created_at, id, status, amount_minor, fee_minor, net_minor, currency, chain, token, tx_hash, customer_id, subscription_id, invoice_id, confirmations, confirmed_at, customer_name, customer_email, invoice_number
Invoices CSV columns
created_at, id, number, status, customer_id, subscription_id, amount_minor, currency, chain, token, due_at, issued_at, paid_at, memo, customer_name, customer_email, payment_tx_hash, payment_amount_usd, payment_confirmed_at
payment_amount_usd is the USD-equivalent at confirmation, computed as amount_minor / 100. USDC and USDT are USD-pegged 1:1; if non-pegged tokens are added later, this column will source from per-payment price snapshots captured at confirm time (FX-rate snapshots on the roadmap below).
# Q2 2026 payments, single workspace
curl -H "Authorization: Bearer $OPENSETTLE_API_KEY" \
"https://api.opensettle.io/v1/workspaces/$WORKSPACE_ID/payments?format=csv&from=2026-04-01&to=2026-06-30" \
> payments-q2-2026.csv
# Same period, invoices
curl -H "Authorization: Bearer $OPENSETTLE_API_KEY" \
"https://api.opensettle.io/v1/workspaces/$WORKSPACE_ID/invoices?format=csv&from=2026-04-01&to=2026-06-30" \
> invoices-q2-2026.csvFrom the dashboard, the Invoices and Payments pages each carry an Export-CSV button with a popover for presets (this month, last month, this quarter, year-to-date, custom range) — admin or owner role required.
On the roadmap
Scheduled daily/weekly CSV drops to S3 or email, FX-rate snapshots captured at confirm time, and native connectors for QuickBooks / Xero / NetSuite are all on the post-launch roadmap once we have enough merchants to know which mappings actually matter. Until then, the API surface above plus the on-demand CSV is what your finance team integrates against.