Guia de TED
Este guia explica como enviar e receber TED (Transferência Eletrônica Disponível) através da CorpX API. TED é uma modalidade de transferência interbancária do BACEN que opera em janela específica e é assíncrona por design — diferente do PIX (instantâneo) e da transferência interna (mesmo banco).
Visão Geral
TED é uma transferência entre bancos diferentes processada pelo SPB (Sistema de Pagamentos Brasileiro), com janela de envio em dias úteis (06:30–17:00) e liquidação no mesmo dia útil quando enviada dentro da janela.
Quando usar TED em vez de PIX?
- Valores muito altos acima do limite PIX configurado para a conta
- Compatibilidade com sistemas legados que ainda exigem TED
- Contraparte que aceita apenas TED (ex.: alguns convênios públicos)
- Boleto interbancário ou folha de pagamento corporativa em alguns ERPs
Para o dia-a-dia (pagamentos rápidos, menores que R$ 1MM, dentro/fora de horário comercial), PIX é sempre preferível — instantâneo, 24/7, tipicamente mais barato.
Banco liquidante MT Bank (para receber TED)
Quando alguém quiser enviar TED para você, instrua a contraparte a usar os dados abaixo:
O código 681 é o que a contraparte vai digitar no campo “Banco” do app/internet banking dela. Não confunda com o ISPB (8 dígitos) — bancos pedem o 3 dígitos do código Compe.
Quando uma TED chega na sua conta, você recebe o webhook ted.in.received (ver Webhooks).
Janela e tempos
A TED segue a janela do BACEN — fora dela, a transação fica agendada para o próximo dia útil.
Polling defensivo do servidor
Para garantir que nenhuma TED fique “presa” mesmo se o webhook do liquidante falhar, o TEDOut.Workflow faz polling no extrato MT a cada 1 minuto por até 48 horas. Se nesse período a TED não aparece como liquidada, é marcada como FAILED (timeout). Você sempre tem o estado final consistente via GET /v1/accounts/{accountId}/ted/{tedId} ou via webhook ted.out.failed.
Custos e limites
- TED OUT (enviar): tarifa fixa por operação — consulte no Backoffice → Extrato com filtro
operation=FEE(GET /v1/accounts/{accountId}/statement?operation=FEE) - TED IN (receber): tarifa de recepção quando aplicável
- Mínimo: R$ 0,01
- Máximo: sem teto BACEN; CorpX permite até o limite operacional da conta (configurável via Policies)
Tarifas exatas variam por contrato — consulte o seu acordo comercial.
1. Enviar TED
Endpoint: POST /v1/accounts/{accountId}/ted/out
Campos
Resposta (202 Accepted)
O tedId é único da CorpX (ted-{identifier}) e é a chave para consultar status e correlacionar com webhooks.
2. Consultar status
Endpoint: GET /v1/accounts/{accountId}/ted/{tedId}
O caminho anterior GET /v1/accounts/{accountId}/transfers/ted/{tedId} continua funcionando
por retrocompatibilidade, mas está deprecated desde a v2.22.0 e será removido em uma próxima
major. Migre para /ted/{tedId} quando puder.
Resposta (200)
Estados
Webhooks TED
A forma recomendada de acompanhar TEDs é assinando os webhooks — você é notificado em tempo real sem precisar fazer polling.
Eventos disponíveis
Todos os eventos usam o envelope canônico de webhooks (id, type,
occurredAt, schemaVersion, environment, tenantId, accountId,
data) — o mesmo de PIX, boleto e transferências internas. Veja
Webhooks.
Payload ted.out.requested
Payload ted.out.confirmed
Payload ted.out.failed
Payload ted.in.received
Dedup
Cada webhook tem id único e determinístico (ex.: ted-{tedId}-confirmed). Use o id na sua base para dedup em caso de re-entrega (acontece em retries do nosso dispatcher quando seu endpoint demora a responder 2xx). O alias legado ted.payment reusa o mesmo payload com id próprio (ted-{tedId}-payment) — diferencie pelo type para não descartar o evento canônico.
Erros comuns
Erros no workflow (status final FAILED)
Reconciliação
A CorpX faz polling defensivo a cada minuto por até 48h após enviar uma TED, mesmo que o webhook do liquidante chegue normalmente. Isso garante que estado interno e estado real do banco estejam sempre alinhados.
Para reconciliar do seu lado:
- Tempo real: assine os webhooks
ted.out.{requested,confirmed,failed}eted.in.received - Lookup pontual:
GET /v1/accounts/{accountId}/ted/{tedId} - Extrato:
GET /v1/accounts/{accountId}/statement(TEDs aparecem comoperation=TED) - Timeline detalhada:
GET /v1/accounts/{accountId}/transactions/timeline?identifier={identifier}— a rota aceita exatamente um deidentifier(o seu, o mesmo enviado na criação) ouendToEndId. Não existe filtrotedIdnessa rota: mandar?tedId=devolve400 invalid_query
Deprecação de ted.payment
O evento ted.payment (catálogo legado v1) é mantido como alias de ted.out.confirmed para compatibilidade. Ambos são disparados juntos no mesmo terminal.
- Novos integradores: assinem
ted.out.confirmed(mais descritivo, alinhado comboleto.paid,pix.out.completed) - Integradores legados: podem continuar com
ted.paymentaté a v3.0 (data a ser anunciada) - Migração: desassinar
ted.payment+ assinarted.out.confirmed— payloads são idênticos