(00)
41 operations. Sandbox needs no approval.
One HTTPS API over verification, custody, accounts, payouts and standing conversion. Everything below is callable with a sandbox key, which moves no real money and is issued from the console without waiting for approval.
curl https://api.skerry.xyz/whoami \ -H "Authorization: Bearer sk_test_…"
That is the quickest way to prove a key works: it answers with the partner, project, mode and scopes behind it. The environment comes from the key rather than the URL, so the same code runs against sandbox and live by swapping one value.
(01)
True of every endpoint.
(02)
5 operations
The two calls worth making first. `/` needs no key and lists what exists; `/whoami` proves the key you were given works and says which environment it is in.
The index. Public, so a new developer can look before they have a key.
This same reference as an OpenAPI 3.1 document, for Postman, a generator or an agent. Public.
The partner, project, mode and scopes behind the key you sent.
What this project may do right now, and what is merely coming.
{ customer_id }
Accept the terms a customer must agree to before they can be verified.
(03)
6 operations
A customer is a business you bring to the platform. It is verified in its own right, and everything else — wallets, accounts, payees — hangs off one.
{ legal_name, address, external_id? }
Onboard a business.
The businesses this project has onboarded.
One business, with its verification state.
{ legal_name?, address?, external_id? }
Correct details on a business.
{ }
Start or re-run verification.
Where verification has got to.
(04)
9 operations
Where a customer's money sits. A wallet holds stablecoin; an account is fiat at a regulated institution; a card spends from one.
{ chain, currency }
Create a stablecoin wallet.
The customer's wallets and balances.
{ currency, country }
Open a fiat account.
The customer's fiat accounts.
{ account_number, routing, country }
Link an external bank account.
{ account_id }
Issue a card against an account.
The customer's cards.
{ chain, currency }
A deposit memo, for chains where one shared address serves everybody.
The customer's deposit memos. A payer who omits the memo cannot be attributed.
(05)
8 operations
A payee is somewhere money can go; a payout sends it there. Quote first when the amount matters — a quote fixes the rate for a short window.
{ name, rail, details }
Add a destination for money.
The customer's payees.
{ from, to, amount, payee_id }
What a payout would cost, at a rate held briefly.
{ payee_id, amount, currency, quote_id? }
Send money to a payee.
Payouts this project has made.
One payout and where it has got to.
Cancel a payout that has not left yet.
The rate between two currencies. `?from=&to=`
(06)
2 operations
A standing order converts on a schedule rather than on a call, so a business can hold one currency and settle in another without writing a cron job.
{ from, to, amount, cadence }
Convert on a schedule.
The customer's standing orders.
(07)
6 operations
Most state changes arrive here rather than in a response, because verification and settlement finish long after the call that started them. Replay is deliberate: a missed delivery is recoverable without asking us.
What has happened, newest first.
Deliver an event again, to every endpoint that wanted it.
{ url, event_types }
Register an endpoint.
The endpoints this project has registered.
{ url?, event_types?, status? }
Change an endpoint's URL, events or status.
Remove an endpoint.
(08)
5 operations
What the platform pays on balances, and what this project has consumed against its plan.
The stablecoins this project can hold.
{ currency }
Enable a coin for this project.
What a balance in this coin earns.
Usage against the plan's limits — the same count a call is refused against.
Anything compliance has asked a customer for.
(09)
14 codes.
Failures carry a stable code. Branch on that, never on the message — messages are written for people and will change.
The body is wrong. `detail.field` names which part.
No key, or not a key we issued. Send it as `Authorization: Bearer sk_…`.
The key was revoked in the console. Issue another.
The plan does not include this. Usage on the project page says where you stand.
The key is narrower than the call. Each operation names its scope.
A live key was used before live was approved. Sandbox still works.
The account is suspended. Nothing will succeed until that is lifted.
No such object in this project — including one that belongs to somebody else.
The object is already there. Usually a retry without an Idempotency-Key.
The same Idempotency-Key is still running. Wait and read the first answer.
Not available for this project. `/capabilities` says what is.
Built, not yet switched on for this project.
A provider failed. Safe to retry with the same Idempotency-Key.
Ours. Quote the `request_id` and we can find the call.