Skip to main content
Spendin pays a beneficiary in another country on your behalf. You state what the beneficiary should receive — 500 GHS to an MTN number — and we tell you what to send us. You settle in USDT or NGN; we handle the FX, the local rail, and the retries. There is no Spendin balance to top up. Every payout is funded by its own settlement, so money never sits with us between transactions.

How a payout works

1

You request the payout

POST /v1/payouts with the destination and the amount the beneficiary receives. The payout is created with status CREATED.
2

We issue a payment instruction

Within seconds we lock an FX rate and return a payment instruction — a crypto address or a virtual account number, plus the exact amount to send and an expiry. The payout moves to PENDING_PAYMENT.
3

You settle

Send the expected amount to the account in the instruction. When it arrives and confirms, the payout moves to PAYMENT_RECEIVED.Miss the expiry and the payout ends at EXPIRED — a terminal status. Create a new payout to try again.
4

We pay the beneficiary

We dispatch to the local processor (PROCESSING) and the payout settles at SUCCESSFUL or FAILED. If it fails after your money arrived, we return the settlement to a destination you registered up front.
You never have to poll. Every transition is pushed to your webhook endpoint, and the full history lives on the payout itself as a status_timeline.

Start here

Get access

How to get a tenant, complete KYB, and receive your API key.

Quickstart

A live payout end to end, including the two prerequisites people miss.

Corridors

What you can settle in, and where the money can land.

Payout lifecycle

The seven statuses and what drives each transition.

Two things to set up before your first payout

Both are enforced at payout creation, and both fail the request rather than failing quietly later.

A refund destination

Because we hold no balance for you, a payout that fails after you have paid needs somewhere to send the money back. Register that destination first or payout creation returns 422 REFUND_DESTINATION_REQUIRED.

Approved KYB

Your compliance profile must be APPROVED. Until then payout creation returns 403 COMPLIANCE_NOT_APPROVED.

Conventions

Every field in every request and response is snake_case — we never transform casing, so what you send is what we store and what you read back. Timestamps are ISO-8601 in UTC: 2026-08-16T14:30:00.000Z. Every amount travels with its currency. destination_amount is meaningless without destination_currency, and a single payout legitimately spans three currencies at once — the beneficiary’s, yours, and the one the fees are charged in. Field pairs share a prefix, so platform_fee_amount is always denominated in platform_fee_currency.
Never infer a currency from context. A payout priced in GHS with fees charged in USDT is the normal case, not an edge case.