Référence API/Premiers pas
Payez n’importe qui, n’importe où, depuis votre code.
Paiements vers des comptes bancaires en 40 devises, mobile money, portefeuilles ou un numéro de téléphone. Lots avec approbations, liens de paiement, comptes virtuels et webhooks signés. Générée depuis la spécification OpenAPI ; frais, limites et délais reviennent sur chaque canal et chaque devis.
Un seul solde en USDC. Alimentez par virement en USD, EUR ou MXN, ou on-chain. Payez vers des comptes bancaires en 40 devises, un compte de paiement mobile, un portefeuille ou un téléphone ou e-mail. Un premier paiement tient en cinq appels : lister les canaux, enregistrer un bénéficiaire avec les champs du corridor, obtenir un devis, envoyer avec une clé d’idempotence, puis interroger ou s’abonner.
List channels
/channelsEvery destination with status, coverage, recipient type, limits, typical arrival and your fee at your current tier.
Réponse 200
{
"data": [
{
"id": "spei_mxn",
"status": "live",
"country": "MX",
"currency": "MXN",
"rail": "spei",
"recipient_type": "bank_account",
"arrival": {
"min": "PT0M",
"max": "PT5M"
},
"limits": {
"min": "30.12",
"max": "300000.00",
"currency": "USDC"
},
"fee": {
"percent": "0.35",
"flat": "0.50",
"currency": "USDC"
}
},
{
"id": "claim_link",
"status": "live",
"country": null,
"currency": "USDC",
"rail": "claim_link",
"recipient_type": "phone",
"arrival": {
"min": "PT0M",
"max": "P30D"
},
"limits": {
"min": "1.00",
"max": "50000.00",
"currency": "USDC"
},
"fee": {
"percent": "0",
"flat": "0",
"currency": "USDC"
}
}
]
}Create a recipient
/recipientsParamètres
Idempotency-Keyheaderstringfacultatif
| Champ | Type | obligatoire | Notes |
|---|---|---|---|
| type | RecipientType | obligatoire | |
| country | string | facultatif | |
| currency | string | facultatif | |
| name | string | facultatif | |
| kind | enum: individual, business | facultatif | |
| external_id | string | facultatif | |
| bank_account | object | facultatif | Fields from the channel requirements. |
| pagomovil | object | facultatif | |
| wallet | object | facultatif | |
| phone | object | facultatif | |
| object | facultatif | ||
| decaf_user | object | facultatif |
Requête
{
"type": "bank_account",
"country": "HK",
"currency": "HKD",
"external_id": "vendor-4471",
"name": "Brightway Electronics Ltd",
"kind": "business",
"bank_account": {
"bank_name": "HSBC",
"account_number": "123456789012",
"swift": "HSBCHKHHHKH",
"id_document_number": "12345678-000-01-23-4"
}
}Réponse 201
{
"id": "rcp_9d1a",
"type": "bank_account",
"country": "HK",
"currency": "HKD",
"name": "Brightway Electronics Ltd",
"kind": "business",
"external_id": "vendor-4471",
"status": "ready",
"channels": [
"chats_hkd"
],
"bank_account": {
"bank_name": "HSBC",
"account_number": "•••• 9012",
"swift": "HSBCHKHHHKH"
},
"created_at": "2026-09-16T14:59:00Z"
}Erreurs: 422 recipient_not_ready
Create a quote
/quotesPrice one payout on one channel. Provide source_amount or destination_amount. Valid 60 seconds.
| Champ | Type | obligatoire | Notes |
|---|---|---|---|
| channel | string | obligatoire | |
| source_amount | Amount | facultatif | Decimal string. Up to two decimals for fiat, six for USDC. |
| destination_amount | Amount | facultatif | Decimal string. Up to two decimals for fiat, six for USDC. |
Requête
{
"channel": "chats_hkd",
"source_amount": "2500.00"
}Réponse 201
{
"id": "qt_5m2n",
"channel": "chats_hkd",
"source_amount": "2500.00",
"source_currency": "USDC",
"destination_amount": "19491.72",
"destination_currency": "HKD",
"rate": "7.8280",
"fees": {
"provider": "1.25",
"decaf": "8.75",
"fx_spread": "3.90",
"total": "13.90",
"currency": "USDC"
},
"arrival": {
"min": "PT1M",
"max": "P3D"
},
"expires_at": "2026-09-16T15:04:05Z"
}Erreurs: 400 validation_error, channel_unavailable, amount_out_of_range
Create a payout
/payoutsOne transfer to one recipient on one channel. Pass a saved recipient_id or an inline recipient. Either source_amount or destination_amount. quote_id is optional; without it the payout is priced at execution.
Paramètres
Idempotency-Keyheaderstringfacultatif
| Champ | Type | obligatoire | Notes |
|---|---|---|---|
| recipient_id | string | facultatif | |
| recipient | InlineRecipient | facultatif | |
| channel | string | obligatoire | |
| quote_id | string | facultatif | |
| source_amount | Amount | facultatif | Decimal string. Up to two decimals for fiat, six for USDC. |
| destination_amount | Amount | facultatif | Decimal string. Up to two decimals for fiat, six for USDC. |
| reference | string | facultatif | |
| memo | string | facultatif | Travels with the payment where the rail supports it. |
| message | string | facultatif | Claim links only. Shown to the recipient. |
Requête
{
"recipient_id": "rcp_9d1a",
"channel": "spei_mxn",
"quote_id": "qt_5m2n",
"source_amount": "1000.00",
"reference": "INV-2026-0912",
"memo": "Freight, week 37"
}Réponse 201
{
"id": "po_1b7e",
"status": "submitted",
"channel": "spei_mxn",
"recipient_id": "rcp_9d1a",
"source_amount": "1000.00",
"source_currency": "USDC",
"destination_amount": "16865.35",
"destination_currency": "MXN",
"rate": "16.86535",
"fees": {
"provider": "0.50",
"decaf": "5.00",
"total": "5.50",
"currency": "USDC"
},
"reference": "INV-2026-0912",
"estimated_arrival": "2026-09-16T15:20:00Z",
"provider_reference": null,
"attempts": 1,
"created_at": "2026-09-16T15:01:12Z"
}Erreurs: 400 validation_error, channel_unavailable, amount_out_of_range; 402 insufficient_balance; 409 idempotency_conflict; 410 quote_expired
Exemples: Create a payout
curl -X POST https://sandbox.api.decaf.so/v1/payouts \
-H "Authorization: Bearer $DECAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"recipient_id":"rcp_9d1a","channel":"spei_mxn","quote_id":"qt_5m2n","source_amount":"1000.00","reference":"INV-2026-0912","memo":"Freight, week 37"}'Get a payout
/payouts/{id}Includes an attempts array with timing, status and provider error per attempt.
Paramètres
idpathstringobligatoire
FAQ de la référence
Questions sur la référence.
Obtenir l’accès
Développez sur le sandbox dès cette semaine.
Dites-nous les corridors dont vous avez besoin et qui vous payez. Les clés sandbox sont délivrées par une personne.