Skip to main content

Como enviar uma TED via API

Para enviar uma TED a partir de uma conta da sua empresa, use o endpoint POST /api/v1/ted.

info

Sua aplicação precisa do scope TED_POST e a empresa precisa da funcionalidade TED. Veja Primeiros passos com a API de TED.

Referência completa

Para o schema, parâmetros e exemplos interativos, veja a API Reference.

Corpo da requisição​

CampoTipoObrigatórioDescrição
correlationIDstringsimSeu identificador da TED. No máximo 20 caracteres e sem espaços. Veja Reenvio seguro.
valuenumbersimValor em centavos, inteiro e maior que zero
accountIdstringsimConta de origem, de GET /api/v1/account
receiverobjectsimQuem recebe a TED (veja abaixo)
moveDatestringnãoData de liquidação, YYYY-MM-DD. Padrão: hoje
clientFinalitynumbernãoFinalidade da transferência. Padrão: 10 (crédito em conta). Veja Finalidade
descriptionstringnãoDescrição livre
schedulebooleannãoReservado. Hoje, com o STR fechado, a TED é recusada com 422 (OUTSIDE_STR_SESSION) mesmo com schedule: true

receiver​

CampoTipoDescrição
namestringNome do titular
documentstringCPF ou CNPJ, só dígitos
ispbstringISPB da instituição, 8 dígitos
agencynumberAgência, sem o dígito
accountnumberNúmero da conta
accountTypestringCACC conta corrente, SVGS poupança, SLRY conta salário
O correlationID é curto

O correlationID vai para o STR como número de controle da operação, por isso aceita no máximo 20 caracteres. Um UUID (36 caracteres) é recusado com 400.

Finalidade (clientFinality)​

A finalidade é o código FinlddCli do BACEN que a TED leva ao STR. É por ele que o banco recebedor classifica o crédito (salário, fornecedor, imposto...). Sem clientFinality, a TED vai como 10.

CódigoFinalidade
1Pagamento de impostos, tributos e taxas
2Pagamento a concessionárias de serviço público
3Pagamento de dividendos
4Pagamento de salários
5Pagamento de fornecedores
6Pagamento de honorários
7Pagamento de aluguéis e taxas de condomínio
8Pagamento de duplicatas e títulos
9Pagamento de mensalidade escolar
10Crédito em conta
100Depósito judicial
101Pensão alimentícia

Qualquer outro valor é recusado com 400 (INVALID_REQUEST_BODY).

Exemplo de requisição​

{
"correlationID": "payout-20260203-1",
"value": 150050,
"accountId": "6290ccfd42831958a405debc",
"moveDate": "2026-02-03",
"receiver": {
"name": "Joao da Silva",
"document": "12345678901",
"ispb": "87654321",
"agency": 4321,
"account": 98765,
"accountType": "CACC"
},
"clientFinality": 10,
"description": "Pagamento de serviços"
}

Exemplo de resposta​

Se a TED foi aceita, o status code é 200 e o corpo traz o objeto ted:

{
"ted": {
"correlationID": "payout-20260203-1",
"nuop": "1234567820260203000001",
"status": "PROCESSING",
"type": "PAYMENT",
"direction": "OUT",
"value": 150050,
"moveDate": "2026-02-03",
"accountId": "6290ccfd42831958a405debc",
"sender": {
"name": "Empresa LTDA",
"document": "12345678000199",
"ispb": "12345678",
"agency": 1234,
"account": 567890,
"accountType": "CACC"
},
"receiver": {
"name": "Joao da Silva",
"document": "12345678901",
"ispb": "87654321",
"agency": 4321,
"account": 98765,
"accountType": "CACC"
},
"errorCode": null,
"reason": null,
"bcbCode": null,
"createdAt": "2026-02-03T14:30:00.000Z",
"updatedAt": "2026-02-03T14:30:00.000Z"
}
}
200 não quer dizer que o dinheiro chegou

A resposta confirma que a TED foi aceita. A liquidação é confirmada pelo webhook TED_OUT_CONFIRMED, e a falha pelo TED_OUT_REJECTED. Veja Webhooks de TED.

O nuop (Número Único de Operação) é o identificador da TED no SPB, gerado pela Woovi. Guarde-o para conciliar com o extrato e para falar com o suporte.

Reenvio seguro com o mesmo correlationID​

Reenviar com um correlationID que já existe não cria outra TED: a resposta é 200 com a TED que já existe, sem um segundo débito e sem uma segunda mensagem ao STR. Assim, se a requisição der timeout ou a conexão cair, reenvie com o mesmo correlationID sem risco de pagar duas vezes.

Um correlationID por TED

A TED existente é devolvida como está, mesmo que o reenvio traga outro valor ou outro recebedor, e o novo corpo é ignorado. Para uma TED nova, use um correlationID novo.

Códigos de resposta​

Todo erro traz o errorCode e o error (veja Erros).

StatuserrorCodeQuando
200—TED aceita, ou reenvio de um correlationID existente
400INVALID_REQUEST_BODYCorpo inválido: campo faltando, tipo errado, correlationID com mais de 20 caracteres ou com espaços, clientFinality fora da tabela. O detalhe de cada campo vem em errors
400INVALID_CORRELATION_IDcorrelationID com mais de 20 caracteres
401—AppID ausente ou inválido
403TED_FEATURE_REQUIREDEmpresa sem a funcionalidade TED
403ACCOUNT_NOT_OWNEDA conta de origem é de outra empresa
403—Aplicação sem o scope TED_POST
404SENDER_NOT_FOUND, ACCOUNT_NOT_FOUNDA conta de origem não existe
422INSUFFICIENT_BALANCESaldo insuficiente
422TED_PER_TRANSACTION_LIMIT_EXCEEDEDValor acima do limite de TED por transação
422TED_TOTAL_LIMIT_EXCEEDEDValor acima do limite de TED disponível no dia
422ACCOUNT_LIMIT_NOT_FOUNDA conta não tem limite de TED configurado
422ACCOUNT_BLOCKED_TED_OUTConta bloqueada para envio de TED
422OUTSIDE_STR_SESSIONSTR fechado. Envie de novo quando o STR abrir
422LEDGER_FAILEDNão foi possível debitar o saldo
503TED_LIMIT_SERVICE_UNAVAILABLE, SPB_FAILEDIndisponibilidade temporária. Tente de novo com o mesmo correlationID

Um 422 é uma recusa de negócio: repetir a mesma requisição dá o mesmo resultado. Um 503 é temporário, e o reenvio com o mesmo correlationID é seguro.

Exemplos de erro​

Corpo inválido, com o detalhe de cada campo em errors:

{
"error": "Corpo da requisição inválido",
"errorCode": "INVALID_REQUEST_BODY",
"errors": [
{
"origin": "string",
"code": "too_big",
"maximum": 20,
"inclusive": true,
"path": ["correlationID"],
"message": "Too big: expected string to have <=20 characters"
}
]
}
{
"error": "A empresa não possui o recurso TED habilitado",
"errorCode": "TED_FEATURE_REQUIRED"
}
{
"error": "Saldo insuficiente para completar a transação",
"errorCode": "INSUFFICIENT_BALANCE"
}
{
"error": "Valor acima do limite de TED disponível para o período",
"errorCode": "TED_TOTAL_LIMIT_EXCEEDED"
}
{
"error": "O STR está fora da sessão de hoje, o SPB recusaria a mensagem com EGEN0300",
"errorCode": "OUTSIDE_STR_SESSION"
}

Os limites de TED da conta (por transação e por dia) podem ser consultados em GET /api/v1/limits/{accountId}.

Exemplos em código​

curl --request POST \
--url https://api.woovi.com/api/v1/ted \
--header 'Authorization: {APP_ID}' \
--header 'Content-Type: application/json' \
--data '{
"correlationID": "payout-20260203-1",
"value": 150050,
"accountId": "6290ccfd42831958a405debc",
"receiver": {
"name": "Joao da Silva",
"document": "12345678901",
"ispb": "87654321",
"agency": 4321,
"account": 98765,
"accountType": "CACC"
}
}'