Decaf
Contenido

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

GET/channels

Every 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

POST/recipients

Parámetros

  • Idempotency-Keyheaderstringopcional
CampoTipoobligatorioNotas
typeRecipientTypeobligatorio
countrystringopcional
currencystringopcional
namestringopcional
kindenum: individual, businessopcional
external_idstringopcional
bank_accountobjectopcionalFields from the channel requirements.
pagomovilobjectopcional
walletobjectopcional
phoneobjectopcional
emailobjectopcional
decaf_userobjectopcional

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

POST/quotes

Price one payout on one channel. Provide source_amount or destination_amount. Valid 60 seconds.

CampoTipoobligatorioNotas
channelstringobligatorio
source_amountAmountopcionalDecimal string. Up to two decimals for fiat, six for USDC.
destination_amountAmountopcionalDecimal 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

POST/payouts

One 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
CampoTipoobligatorioNotas
recipient_idstringopcional
recipientInlineRecipientopcional
channelstringobligatorio
quote_idstringopcional
source_amountAmountopcionalDecimal string. Up to two decimals for fiat, six for USDC.
destination_amountAmountopcionalDecimal string. Up to two decimals for fiat, six for USDC.
referencestringopcional
memostringopcionalTravels with the payment where the rail supports it.
messagestringopcionalClaim 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

GET/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.