Pagar

PIX, TED, boleto e transferência interna saem da sua conta. O corpo é o mesmo do contrato público; o que muda é o host e a assinatura.

Host: https://client.api.corpx.com. Toda escrita leva Idempotency-Key (entra na string canônica). Valores em BRL, no máximo 2 casas decimais.

Não envie X-Transaction-Pin nem X-Acting-Document. A credencial prova posse com chave privada e IP. PIN e travas de horário são da tela do titular — veja Travas.

PIX por chave

Antes, se quiser mostrar o nome: GET /v1/accounts/{accountId}/pix/key/{pixKey}. A transferência consulta o DICT de qualquer forma.

curl -X POST "https://client.api.corpx.com/v1/accounts/$ACCOUNT_ID/pix/out" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Tenant-Id: $TENANT_ID" \
-H "Idempotency-Key: $UUID" \
-H "Content-Type: application/json" \
-H "X-Request-Timestamp: $TS" \
-H "X-Content-SHA256: $SHA" \
-H "X-Request-Signature: $SIG" \
-d '{
"amount": 100.00,
"keyType": "CPF",
"key": "12345678901",
"description": "Pedido 12345",
"identifier": "order-12345"
}'
CampoObrigatórioNotas
amountSim≥ 0,01; 2 casas
keyTypeSimCPF, CNPJ, EMAIL, PHONE, EVP
keySimConforme o tipo
descriptionNãoMáx. 140
identifierNãoSua conciliação; aparece no extrato

A conta de origem é o {accountId} do path. A API confere saldo disponível antes de enviar.

HTTPStatus típicoO que fazer
200COMPLETEDPronto
202TIMEOUT / PENDINGIndeterminado: olhe extrato ou webhook antes de reenviar
207timeout do parceiroIgual: não assuma débito nem crédito
422FAILEDRecusa imediata (partner_rejected, insufficient_funds, pix_key_not_found)

PENDING_APPROVAL nas consultas significa que o liquidante reteve a ordem (antifraude), não que falte uma aprovação sua. TIMEOUT não é final: a API continua consultando por até 7 dias e, se liquidar ou recusar, você recebe pix.out.completed / pix.out.failed com late: true e o mesmo paymentId.

Para volume, prefira POST .../pix/out/async (202 na hora). Síncrono tem limite por conta (hoje 100 req/min; a tendência é 10).

Há também PIX por dados bancários (.../pix/out/bank-account e .../async) e pagamento de QR (.../pix/out/qr-code/async — o síncrono está deprecado). O path legado POST /v1/pix-out (accountId no corpo) não faz parte desta credencial: use sempre POST /v1/accounts/{accountId}/pix/out.

Consultar um PIX enviado

  • GET /v1/accounts/{accountId}/pix/transactions?endToEndId= (ou identifier)
  • GET /v1/accounts/{accountId}/pix/payments e .../pix/payments/lookup

Webhooks: pix.out.completed, pix.out.failed, pix.out.timeout.

Devolver um PIX recebido

POST /v1/accounts/{accountId}/pix/out/refund com o E2E original. Dá para devolver em partes, cada uma com Idempotency-Key e identifier próprios. Prazo BACEN: 90 dias. Sem o E2E, pegue-o no extrato, no webhook pix.in.completed ou no lookup do QR.

{
"originalEndToEnd": "E36741675202601281435001234567",
"amount": 150.00,
"reason": "user-requested"
}

TED

POST /v1/accounts/{accountId}/ted/out — assíncrono (202, status: PROCESSING). Janela BACEN: dias úteis 06:30–17:00. Fora dela, agenda para o próximo dia útil.

{
"value": 5000.00,
"bankCode": "001",
"branch": "1234",
"account": "56789",
"accountType": "CHECKING",
"taxNumber": "12345678900",
"holderName": "JOAO DA SILVA",
"description": "NF 12345",
"identifier": "fornecedor-acme-2026-05"
}

bankCode é Compe de 3 dígitos. ISPB de 8 dígitos é recusado (400 invalid_bank_code). Consulte GET /v1/accounts/{accountId}/ted/{tedId}. Webhooks: ted.out.requested, ted.out.confirmed, ted.out.failed.

No dia a dia, PIX costuma ser a melhor escolha (24/7, instantâneo). TED cabe quando a contraparte só aceita TED ou o valor passa do teto PIX da conta.

Boleto

  1. POST /v1/accounts/{accountId}/boleto/preview com a linha digitável.
  2. Pague o totalUpdated do preview — não o valor de face. Em título vencido os dois diferem; o liquidante recusa qualquer outro valor (422 boleto_amount_mismatch).
  3. POST /v1/accounts/{accountId}/boleto/pay → sempre 202, paymentId no formato bol_{uuid}.
  4. GET /v1/accounts/{accountId}/boleto/payments/{paymentId}.

Refaça o preview no dia do pagamento: juros e multa mudam.

Transferência interna

Entre contas do mesmo banco, sem PIX. Instantânea.

DestinoPath
accountId da APIPOST .../transfers/internal
Agência e contaPOST .../transfers/internal/by-bank-account
CPF/CNPJPOST .../transfers/internal/by-document

Há um preview de nome em GET .../transfers/internal/lookup/{document} (primeiro nome por extenso; demais sobrenomes viram inicial + ***).

Idempotência

A Idempotency-Key é a identidade da tentativa HTTP. Repetir a mesma chave, o mesmo path e o mesmo corpo devolve o resultado original — não um segundo débito. Trocar o corpo com a mesma chave é conflito. Detalhe: Idempotência.

O identifier no corpo é a sua chave de conciliação. Os dois convivem.

Travas do titular

Se o pagamento voltar 423 cashout_locked, 403 cashout_outside_hours ou 403 cashout_source_ip_not_allowed, o titular configurou bloqueio, janela ou lista de IPs no internet banking. Leia o que está em vigor em Travas. Você não altera essas travas pela API.