TED e transferências
TED para outras instituições e transferência interna entre contas do parceiro, com favoritos. Valores em centavos. Toda conta de origem precisa pertencer ao parceiro do token.
Como acompanhar o desfecho
A TED emite os webhooks ted.confirmed (liquidada) e ted.failed (rejeitada ou expirada). A transferência interna emite transfer.confirmed e transfer.failed. Você também pode consultar o status a qualquer momento em GET /transfers/:id, cujo campo status passa por processing, accepted, settled, confirmed, completed, rejected, timeout, cancelled ou refunded.
Enviar TED
http
POST /api/partner/v1/transfers/ted
Authorization: Bearer {{access_token}}
Content-Type: application/json
Idempotency-Key: {{uuid}}
{
"account_id": 1042,
"amount": 25000,
"recipientName": "João Pereira",
"recipientDocument": "98765432100",
"recipientBankCode": "12345678",
"recipientBranch": "0001",
"recipientAccount": "123456",
"purposeCode": "10",
"description": "Pagamento fornecedor"
}- Escopo:
transfer:write - Obrigatórios:
account_id,amount,recipientName,recipientDocument,recipientBankCode(ISPB da instituição de destino),recipientAccount. - Opcionais:
recipientBranch,purposeCode(padrão"10"),description.
Os dados do remetente (nome, documento, agência e conta) vêm da conta de origem, você não precisa enviá-los.
Resposta 202:
json
{
"status": "accepted",
"transactionId": "TED20260711d8a3695bc594e2577c23",
"amount": 25000,
"message": "TED enviado para processamento via SPB/BACEN"
}Faltando um campo obrigatório, a resposta é 422 com a mensagem Campos obrigatórios SPB ausentes: .... Uma conta bloqueada ou encerrada responde 422 com code: "account_blocked".
Transferência interna
Move dinheiro entre duas contas do próprio parceiro. Origem e destino são validados antes de a transferência ocorrer, e não é possível transferir para a mesma conta.
http
POST /api/partner/v1/transfers/internal
Authorization: Bearer {{access_token}}
Content-Type: application/json
Idempotency-Key: {{uuid}}
{
"account_id": 1042,
"destination_account_id": 1043,
"amount": 5000,
"description": "Aporte"
}- Escopo:
transfer:write· Obrigatórios:account_id,destination_account_id,amount
Resposta 202:
json
{ "status": "accepted", "transactionId": "TEF...", "amount": 5000, "message": "Transferência interna aceita para processamento" }Sem destination_account_id responde 422; origem igual ao destino responde 422; destino de outro parceiro responde 403.
Consultar transferência
http
GET /api/partner/v1/transfers/{id}
Authorization: Bearer {{access_token}}- Escopo:
transfer:read
json
{
"data": {
"transactionId": "TED20260711d8a3...",
"type": "ted",
"status": "settled",
"amount": 25000,
"recipientKey": "123456",
"direction": "outbound",
"createdAt": "2026-07-11T10:00:00Z",
"completedAt": "2026-07-11T10:00:02Z"
}
}Uma transação de outro parceiro responde 403; um id desconhecido responde 404.
TED recebida (créditos)
Créditos de TED recebidos de outras instituições, com devolução ao remetente comandada pelo cliente.
Listar TED recebidas
http
GET /api/partner/v1/ted/credits?account_id=1042
Authorization: Bearer {{access_token}}- Escopo:
transfer:read· Filtro opcionalstatus.
json
{
"data": {
"credits": [
{ "id": "9d4f2c1a-7b3e-4c91-8a52-0f1e2d3c4b5a", "numCtrlStr": "STR20260714000000123", "amount": 150075, "senderName": "JOAO PEREIRA", "senderDocument": "12345678901", "senderIspb": "60746948", "status": "credited_member", "refundable": true, "settlementDate": "2026-07-14", "receivedAt": "2026-07-14T21:00:00Z" }
],
"total": 1
}
}Valores em centavos, os mais recentes primeiro (até 50). refundable fica true enquanto o crédito pode ser devolvido pelo cliente.
Devolver TED recebida
Comanda a devolução integral do crédito ao remetente, pela mensagem STR0010. Não há devolução parcial: o motor devolve o valor original da operação.
http
POST /api/partner/v1/ted/credits/{id}/refund
Authorization: Bearer {{access_token}}
Content-Type: application/json
{ "account_id": 1042, "reason": "70" }- Escopo:
transfer:write·reasoné opcional (padrão70) e restrito aos códigos abaixo:
reason | Motivo |
|---|---|
1 | Conta encerrada |
2 | Agência ou conta inválida |
3 | CPF/CNPJ ausente ou divergente |
4 | Mensagem inválida para o tipo de transferência |
5 | Divergência de titularidade |
9 | Fraude |
31 | CPF/CNPJ inapto na Receita Federal |
70 | Por solicitação do cliente da IF Recebedora (padrão) |
72 | Não conformidade no pagamento |
84 | Conta inválida para o tipo ou finalidade da transferência |
Resposta 202 (aceite, não o desfecho):
json
{ "data": { "refundId": "9d4f2c1a-7b3e-4c91-8a52-0f1e2d3c4b5a", "numCtrlStr": "STR20260714000000123", "amount": 150075, "status": "processing" } }O valor fica reservado na conta até o desfecho, que chega pelos webhooks ted.refund.requested, ted.refund.completed e ted.refund.failed, descritos em Webhooks. Um crédito de outra conta ou inexistente responde 404; devolução já em andamento, crédito já devolvido, motivo inválido ou saldo insuficiente respondem 422.
Favoritos
Beneficiários salvos para reutilizar em transferências. O account_id é obrigatório em todas as chamadas.
http
POST /api/partner/v1/transfers/favorites # criar (transfer:write)
GET /api/partner/v1/transfers/favorites?account_id=1042 # listar (transfer:read)
DELETE /api/partner/v1/transfers/favorites/{id}?account_id=1042 # remover (transfer:write)
Authorization: Bearer {{access_token}}Corpo do POST: name, document, bankCode, branch, accountNumber são obrigatórios; accountType (padrão checking), pixKey e pixKeyType são opcionais. A resposta 201 traz { id, name, document, bankCode, branch, accountNumber, accountType, pixKey, pixKeyType, createdAt }.