Skip to main content
OperationsReconciliation

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):

payment.json
{
  "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).

bash
# 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.csv

From 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.