POST /v1/api/payout/fiat:
Internal — sends fiat directly to a Nigerian bank account using the recipient’s bank code and
account number. Tender chooses the payout provider for each payout; you can’t select one.
MoneyGram — starts a MoneyGram payout. You get back a url; your user opens it to complete the
payout with MoneyGram.
Every request needs an Idempotency-Key header, so a retried request never pays out twice. See
Idempotency.
Prerequisites
Authentication guide
These endpoints use Signed (HMAC) authentication — an HMAC-SHA256 signature is required on every request. See the authentication guide for code examples.
Internal bank transfer
1
Submit the payout
Call
POST /payout/fiat with an Idempotency-Key header, method: "internal", the asset,
the amount, and the recipient’s bank_code and account_number.2
Confirm initiation
A successful response returns the payout record with
status: "pending" and its id.3
Poll for completion
Call
GET /payout/{id} until status is completed or failed. There are no payout
webhooks.assetcan be any coin you hold, for exampleusdcorusdt. Your balance of that asset across all chains must coveramount; Tender pays out from the chain where you hold the most of it.- The amount must be at least 20 units of the asset and worth at least $20 USD.
- The bank code must be a supported Nigerian bank.
- An optional
referenceis stored on the payout aswithdrawalReference, so you can match it to your own records.
Payout Fiat API reference
Full parameter list, errors and interactive playground for both methods.
MoneyGram payout
1
Submit the payout
Call
POST /payout/fiat with an Idempotency-Key header, method: "moneygram", the asset
and the amount (at least 15 units). Add any recipient details you already have.2
Send your user to MoneyGram
The response contains
url, transactionId and id. Open url to let your user complete the
payout.3
Poll for completion
Call
GET /payout/{id}. Each call refreshes the status from MoneyGram: providerStatus holds
MoneyGram’s raw status and status becomes completed, failed or processing.first_name, last_name, dob (or date_of_birth), mobile_number,
address, city, postal_code, state_or_province and country — are all optional. Any you
send are pre-filled in the MoneyGram form so your user doesn’t have to type them again.
Funds come from your merchant Stellar wallet. To pay out from one of your Stellar subwallet
addresses instead, pass its address_reference.
Identifying the end user with reference
MoneyGram payouts accept an optional reference field — a stable identifier for the end user the payout is for. It is sent to MoneyGram for reconciliation, and it also determines which MoneyGram consumer the payout is attributed to.
The value must be stable per end user: reuse the same reference for the same person on every payout, and use a different reference for a different person. A per-transaction value (a new order or invoice id each time) would create a new MoneyGram consumer on every payout — re-triggering KYC and fragmenting limits. Omit reference (or set it to your own merchant id) to attribute the payout to your merchant account itself.
Retries and idempotency
- Retrying with the same key and body returns the original response; no second payout is made.
- Reusing a key with a different body, or while the first request is still running, returns
409. - If the first request failed, the key is released and you can retry with it.
- Keys are kept for 24 hours.