Skip to main content

Card API — Contract v1

Status: PUBLISHED — finalized 2026-08-26. Every section was reconciled against the running implementation and executed live on the sandbox (api.sbx.oxen.finance), end to end: onboarding, cardholders, cards, funding, transactions, secrets/PIN, webhooks, events, disputes. Changes from here are additive or announced before they ship; shapes and codes in ✅ sections do not change silently. 🔜 marks contract published for design but not yet callable; the completeness ledger tracks what is still open. The OpenAPI document is published as the API Reference and imports directly into Postman, Insomnia or Bruno.

Conventions (auth, envelope, idempotency, errors, pagination) are defined in the Partner Integration Guide and apply to every endpoint here. Endpoints marked 🔑 require Idempotency-Key.

Resource model

client cl_… one end client = one provider company = one collateral pool
├─ cardholder chd_… a person under a client (owner is the first; add more via API)
│ └─ card card_… virtual | physical
├─ funding (read-only sub-resource: deposit address + spending power)
└─ documents (KYB document relay)
transaction (uuid) flat query surface — see the exception below
event evt_… webhook envelope id (guide §8)

Service ids: opaque, ≤40 chars, prefix + 26-char body. Never parsed. This table is the single authority on public prefixes — it supersedes illustrative prefixes used elsewhere. Partners never see operation ids in v1.

The transaction id is the one identifier here that is NOT an service id (§4): it is the issuer's UUID, carries no prefix, and is the only place a provider identifier reaches you — The service stores no transactions, so it has none of its own to give. A transaction's clientId, cardholderId and cardId are still Service ids. The draft published txn_…; nothing ever minted one.


Where each section lives

Section numbers are append-only — §1 is §1 wherever it is printed. This page is the map; each section below is its own page. If you have a #anchor into an older single-page version of this contract written down, find its section here and the anchor still works on that page.

§SectionPage
1Onboarding — the client application, KYB documents, UBOsOnboarding
1Collateral — funding, contract coordinates, withdrawalCollateral & withdrawal
2CardholdersCardholders & cards
3CardsCardholders & cards
4TransactionsTransactions
5Card secrets & PINSecrets & PIN
6EventsEvents
7Error codes added by this contractError codes
8DisputesDisputes

§1 is the only section printed on two pages. It carried both the client application and the money path — a review that runs for days, and a signature that moves collateral — and those are read by different people at different times, so each got a page it can be held open on alone. The section number did not change; only the page it is printed on did.

Conventions that apply to every section — authentication, the response envelope, idempotency, retry safety, pagination, rate limits — are in the Partner Integration Guide, not here.


Contract completeness ledger

Deferred details, each with its publication gate. An endpoint flips 🔜→✅ in the guide only when its rows here are cleared.

Pending itemPublishes with
Client field-level required/optional matrices — COMPANY ✅ republished 2026-08-24 with issuer-shaped flattened person fields; INDIVIDUAL still pendingINDIVIDUAL build
Document type enum✅ 2026-08-24 — company uploads retain 12 issuer values (compliance currently clears two); UBO uploads publish the issuer's separate 19-value person enum
Full application-status fidelity end to end✅ 2026-08-22 — all eleven issuer states map 1:1 provider→contract. The 2026-08-19 check saw only the eight values in the issuer's published schema; the live guide adds notStarted, tosNotAccepted, and exempt, and live sandbox census found two notStarted companies.
Physical-card shipping fields✅ 2026-08-21 — required-when-PHYSICAL, verified against a live issuance
Physical-card activationOpen — sandbox issues physical cards straight to ACTIVE, so no activation step has been observed. If a production programme returns notActivated, an activation endpoint publishes with it.
Transactions field finalization✅ 2026-08-22 — all eight kinds published in §4, mapped from the issuer's live reference. Funding remains open.
Funding read (GET /clients/:id/funding)✅ 2026-08-26 — published as Beta: shapes, network vocabulary (sandbox chains), signed spendingPower, FUNDING_* error rows, rate limits, polling-required guidance. Still open: production network labels (per-chain dated evidence) and production end-to-end enforcement verification (the decline battery), which clears the Beta marker.
Secrets cipher parameters (AES mode, encodings, PIN-block format) & session TTL✅ 2026-08-22 — published in §5, sourced from the issuer's own reference
Per-event data payload schemaswebhooks feature
Automated resolution of parked operations — a 502 on replace blocks that card until an operator clears it by hand (§3)reconciliation sweep