Referencia de la API/Primeros pasos
Paga a cualquiera, en cualquier lugar, desde código.
Pagos a cuentas bancarias en 40 monedas, dinero móvil, billeteras o un número de teléfono. Lotes con aprobaciones, links de pago, cuentas virtuales y webhooks firmados. Generada desde la especificación OpenAPI; comisiones, límites y tiempos de llegada llegan en cada canal y cada cotización.
Un solo saldo en USDC. Fondea por transferencia bancaria en USD, EUR o MXN, o en cadena. Paga a cuentas bancarias en 40 monedas, a una cuenta de pago móvil, a una billetera o a un teléfono o email. El primer pago son cinco llamadas: listar canales, guardar un destinatario con los campos del corredor, cotizar, enviar con una clave de idempotencia y consultar o suscribirse.
List channels
/channelsEvery destination with status, coverage, recipient type, limits, typical arrival and your fee at your current tier.
Respuesta 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
/recipientsParámetros
Idempotency-Keyheaderstringopcional
| Campo | Tipo | obligatorio | Notas |
|---|---|---|---|
| type | RecipientType | obligatorio | |
| country | string | opcional | |
| currency | string | opcional | |
| name | string | opcional | |
| kind | enum: individual, business | opcional | |
| external_id | string | opcional | |
| bank_account | object | opcional | Fields from the channel requirements. |
| pagomovil | object | opcional | |
| wallet | object | opcional | |
| phone | object | opcional | |
| object | opcional | ||
| decaf_user | object | opcional |
Solicitud
{
"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"
}
}Respuesta 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"
}Errores: 422 recipient_not_ready
Create a quote
/quotesPrice one payout on one channel. Provide source_amount or destination_amount. Valid 60 seconds.
| Campo | Tipo | obligatorio | Notas |
|---|---|---|---|
| channel | string | obligatorio | |
| source_amount | Amount | opcional | Decimal string. Up to two decimals for fiat, six for USDC. |
| destination_amount | Amount | opcional | Decimal string. Up to two decimals for fiat, six for USDC. |
Solicitud
{
"channel": "chats_hkd",
"source_amount": "2500.00"
}Respuesta 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"
}Errores: 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.
Parámetros
Idempotency-Keyheaderstringopcional
| Campo | Tipo | obligatorio | Notas |
|---|---|---|---|
| recipient_id | string | opcional | |
| recipient | InlineRecipient | opcional | |
| channel | string | obligatorio | |
| quote_id | string | opcional | |
| source_amount | Amount | opcional | Decimal string. Up to two decimals for fiat, six for USDC. |
| destination_amount | Amount | opcional | Decimal string. Up to two decimals for fiat, six for USDC. |
| reference | string | opcional | |
| memo | string | opcional | Travels with the payment where the rail supports it. |
| message | string | opcional | Claim links only. Shown to the recipient. |
Solicitud
{
"recipient_id": "rcp_9d1a",
"channel": "spei_mxn",
"quote_id": "qt_5m2n",
"source_amount": "1000.00",
"reference": "INV-2026-0912",
"memo": "Freight, week 37"
}Respuesta 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"
}Errores: 400 validation_error, channel_unavailable, amount_out_of_range; 402 insufficient_balance; 409 idempotency_conflict; 410 quote_expired
Ejemplos: 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.
Parámetros
idpathstringobligatorio
Preguntas sobre la referencia
Preguntas sobre la referencia.
Obtén acceso
Construye contra el sandbox esta semana.
Cuéntanos los corredores que necesitas y a quién pagas. Las claves de sandbox las emite una persona.