Decaf
Sommaire

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

GET/channels

Every 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

POST/recipients

Paramètres

  • Idempotency-Keyheaderstringfacultatif
ChampTypeobligatoireNotes
typeRecipientTypeobligatoire
countrystringfacultatif
currencystringfacultatif
namestringfacultatif
kindenum: individual, businessfacultatif
external_idstringfacultatif
bank_accountobjectfacultatifFields from the channel requirements.
pagomovilobjectfacultatif
walletobjectfacultatif
phoneobjectfacultatif
emailobjectfacultatif
decaf_userobjectfacultatif

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

POST/quotes

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

ChampTypeobligatoireNotes
channelstringobligatoire
source_amountAmountfacultatifDecimal string. Up to two decimals for fiat, six for USDC.
destination_amountAmountfacultatifDecimal 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

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.

Paramètres

  • Idempotency-Keyheaderstringfacultatif
ChampTypeobligatoireNotes
recipient_idstringfacultatif
recipientInlineRecipientfacultatif
channelstringobligatoire
quote_idstringfacultatif
source_amountAmountfacultatifDecimal string. Up to two decimals for fiat, six for USDC.
destination_amountAmountfacultatifDecimal string. Up to two decimals for fiat, six for USDC.
referencestringfacultatif
memostringfacultatifTravels with the payment where the rail supports it.
messagestringfacultatifClaim 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

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