CTe — Conhecimento de Transporte Eletrônico
O CTe (modelo 57) é o documento fiscal obrigatório para transporte de cargas no Brasil. Substitui o Conhecimento de Transporte em papel e deve ser emitido pela transportadora antes do início do transporte.
Endpoint base: https://api.engineapi.com.br/cte
Emissão Emita via JSON — sem XML, sem SOAP
Cancelamento Cancele em até 24h após autorização
Carta de Correção Corrija dados sem cancelar o documento
Pré-requisitos
Conta e API Key
Gere sua API Key em Dashboard → Configurações → API Keys .
Empresa emissora (transportadora)
Cadastre o CNPJ da transportadora via POST /companies. Guarde o id como issuerId.
Certificado digital
Faça upload do .pfx via POST /companies/{issuerId}/certificate.
Ambiente definido
Use environment: 2 (homologação) para testes, environment: 1 para produção.
Verificar Status do Serviço
Antes de emitir, confirme que a SEFAZ está operacional para CTe:
curl https://api.engineapi.com.br/cte/status?uf=SP \
-H "x-api-key: SUA_API_KEY"
{
"status" : "online" ,
"model" : "57" ,
"service" : "CTe" ,
"provider" : "acbr" ,
"uf" : "SP"
}
Emitir CTe
curl -X POST https://api.engineapi.com.br/cte \
-H "x-api-key: SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"issuerId": "ISSUER_ID",
"naturezaOperacao": "PRESTACAO DE SERVICO DE TRANSPORTE",
"cfop": "5353",
"valorTotal": 850.00,
"remetente": {
"cnpj": "11222333000144",
"nome": "Empresa Remetente SA",
"endereco": {
"logradouro": "Rua das Indústrias",
"numero": "100",
"bairro": "Industrial",
"codigoMunicipio": "3550308",
"municipio": "São Paulo",
"uf": "SP",
"cep": "04001000"
}
},
"destinatario": {
"cnpj": "99888777000155",
"nome": "Empresa Destinatária Ltda",
"endereco": {
"logradouro": "Av Rio Branco",
"numero": "200",
"bairro": "Centro",
"codigoMunicipio": "3304557",
"municipio": "Rio de Janeiro",
"uf": "RJ",
"cep": "20040020"
}
},
"modal": {
"tipo": "rodoviario",
"rntrc": "12345678",
"veiculo": {
"placa": "ABC1234",
"uf": "SP"
},
"motorista": {
"nome": "João Silva",
"cpf": "12345678901"
}
},
"documentos": [{
"chaveNFe": "35260211222333000144550010000000011000000019"
}],
"icms": {
"origem": 0,
"cst": "00",
"baseCalculo": 850.00,
"aliquota": 12,
"valor": 102.00
}
}'
const cte = await fetch ( 'https://api.engineapi.com.br/cte' , {
method: 'POST' ,
headers: {
'x-api-key' : process . env . ENGINE_API_KEY ! ,
'Content-Type' : 'application/json' ,
},
body: JSON . stringify ({
issuerId: 'ISSUER_ID' ,
naturezaOperacao: 'PRESTACAO DE SERVICO DE TRANSPORTE' ,
cfop: '5353' ,
valorTotal: 850.00 ,
remetente: { /* ... */ },
destinatario: { /* ... */ },
modal: {
tipo: 'rodoviario' ,
rntrc: '12345678' ,
veiculo: { placa: 'ABC1234' , uf: 'SP' },
motorista: { nome: 'João Silva' , cpf: '12345678901' },
},
documentos: [{ chaveNFe: '35260211222333000144550010000000011000000019' }],
icms: { origem: 0 , cst: '00' , baseCalculo: 850.00 , aliquota: 12 , valor: 102.00 },
}),
}). then ( r => r . json ());
console . log ( 'CTe autorizado:' , cte . accessKey );
Campos de Referência
Raiz
Campo Tipo Obrigatório Descrição issuerIdstring (UUID) Sim ID da transportadora emissora naturezaOperacaostring Sim Ex: "PRESTACAO DE SERVICO DE TRANSPORTE" cfopstring Sim 5353 (estadual) ou 6353 (interestadual)valorTotalnúmero Sim Valor total do frete em R$ remetenteobjeto Sim Quem envia a carga destinatarioobjeto Sim Quem recebe a carga modalobjeto Sim Dados do modal de transporte documentosarray Sim NFes vinculadas ao transporte icmsobjeto Sim Dados tributários expedidorobjeto Não Se diferente do remetente recebedorobjeto Não Se diferente do destinatário seguroobjeto Não Seguro da carga
Modal Rodoviário
Campo Tipo Obrigatório Descrição rntrcstring Sim Registro Nacional de Transportadores veiculo.placastring Sim Placa do veículo trator veiculo.ufstring Sim UF da placa motorista.nomestring Sim Nome do motorista motorista.cpfstring Sim CPF do motorista
Response de Sucesso
{
"success" : true ,
"cte" : {
"id" : "3fa85f64-5717-4562-b3fc-2c963f66afa6" ,
"accessKey" : "35260211222333000144570010000000011000000019" ,
"status" : "AUTHORIZED" ,
"protocol" : "135260000001234" ,
"xmlUrl" : "/cte/xml/354602..." ,
"pdfUrl" : "/cte/pdf/354602..." ,
"createdAt" : "2026-04-27T02:00:00.000Z"
}
}
Cancelar CTe
curl -X POST https://api.engineapi.com.br/cte/35260.../cancelar \
-H "x-api-key: SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "motivo": "Erro nos dados do remetente informados" }'
O cancelamento de CTe é permitido em até 24 horas após a autorização e requer um motivo com no mínimo 15 caracteres.
Carta de Correção (CC-e)
curl -X POST https://api.engineapi.com.br/cte/35260.../cce \
-H "x-api-key: SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "correcao": "Corrijo a placa do veículo de ABC1234 para XYZ9876" }'
São permitidas até 20 cartas de correção por CTe. A CC-e não pode alterar o remetente, destinatário, valores ou dados fiscais — apenas informações complementares.
Próximos passos
MDFe Manifesto obrigatório para transporte interestadual
Webhooks Receba eventos de CTe em tempo real