Pular para o conteúdo principal

O que faz

POST /api/spei/cash-out solicita o envio de SPEI a uma CLABE de destino. No sandbox, o pipeline contábil completo é exercitado — saldo é debitado, tarifa é cobrada, registro no extrato é gerado — mas a chamada ao Banxico é simulada. A resposta HTTP é sempre 201 Created com status: PENDING. O resultado final chega via webhook cash_out ~1 segundo depois (cenário success) ou conforme o cenário forçado.

Pré-requisito

Sua conta sandbox precisa ter saldo. Faça pelo menos um cash-in antes — o saldo simulado é debitado igual produção.

Exemplo

curl -X POST https://sandbox.mx.ntxpay.com/api/spei/cash-out \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "amountCentavos": 15000,
    "destinationClabe": "012180001234567890",
    "beneficiaryName": "Maria Lopez",
    "beneficiaryTaxId": "LOPM850101ABC",
    "externalId": "payout-001",
    "description": "Pagamento de fornecedor"
  }'

Response (201)

{
  "id": 12346,
  "externalId": "payout-001",
  "status": "PENDING",
  "amountCentavos": 15000,
  "clabe": "012180001234567890"
}

Webhook esperado

Após ~1 segundo (cenário success):
{
  "event": "cash_out",
  "deliveryId": "...",
  "transaction": {
    "id": 12346,
    "externalId": "payout-001",
    "status": "CONFIRMED",
    "amountCentavos": 15000,
    "clabe": "012180001234567890",
    "referenceNumerical": "9876543",
    "confirmedAt": "2026-03-26T10:00:01.000Z"
  },
  "errorCode": null,
  "errorMessage": null
}

Cenários de erro úteis

Force comportamentos específicos via header X-Sandbox-Scenario:
curl -X POST https://sandbox.mx.ntxpay.com/api/spei/cash-out \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Sandbox-Scenario: error:insufficient-funds" \
  -H "Content-Type: application/json" \
  -d '{ ... }'
CenárioQuando usar
error:insufficient-fundsValidar UX quando seu cliente tenta pagar sem saldo
error:invalid-clabeValidar parsing/validação de CLABE no seu front
error:account-not-foundValidar erro pós-rede (CLABE existe na sua base, mas não na rede SPEI)
error:bank-rejectedValidar fallback genérico
delayed:30sValidar UX de “transferência em andamento”
Veja Cenários para a lista completa.

Validações síncronas

Mesmo no sandbox, algumas validações ocorrem antes do retorno 201:
Erro síncronoHTTPQuando
400 INVALID_AMOUNT400amountCentavos <= 0
400 INVALID_CLABE_FORMAT400CLABE com formato inválido (não-numérica, comprimento errado)
400 DUPLICATE_EXTERNAL_ID400externalId já usado em outra transação dessa conta
400 INSUFFICIENT_FUNDS400Saldo real abaixo de amountCentavos + tarifa (sem usar cenário)
Cenários com prefixo error: afetam o webhook — a resposta síncrona é sempre 201 PENDING. Já validações estruturais como formato/duplicidade quebram síncrono.