Outros documentos fiscais
CT-e
5 endpoints
A API de CT-e (modelo 57, leiaute 4.00 + NT2025/001) permite emitir, cancelar, corrigir (CC-e) e consultar Conhecimentos de Transporte Eletrônicos. O CT-e documenta a prestação de serviço de transporte de cargas. Suporta 6 modais (rodoviário, aéreo, aquaviário, ferroviário, dutoviário, multimodal) e 4 tipos de CT-e (Normal, Complemento, Anulação, Substituto). Os dados de negócio vão no corpo do /create; os campos técnicos da chave de acesso (cCT, cDV, cUF, dhEmi, mod) são calculados automaticamente pelo servidor. Os campos serie e nCT são opcionais: quando omitidos (ou 0) o servidor aloca a numeração automaticamente; quando enviados no request, são respeitados (útil para pular a numeração, por exemplo após uma duplicidade no Fisco).
| Endpoint | Método | Descrição |
|---|---|---|
/api/cte/create | POST | Emitir CT-e |
/api/cte/cancel | POST | Cancelar CT-e (evento 110111) |
/api/cte/cce | POST | Carta de Correção — CC-e (evento 110110) |
/api/cte/consult | POST | Consultar situação do CT-e |
O tomador do serviço (quem paga o frete) é definido em ide.toma: 0=Remetente, 1=Expedidor, 2=Recebedor, 3=Destinatário, 4=Outros (neste caso preencha ide.toma4).
/api/cte/createEmitir CT-e
Emite um CT-e a partir do corpo enviado. O cliente envia apenas os dados de negócio; os campos de identificação técnica da chave de acesso são calculados pelo servidor (ver a nota abaixo da tabela ide). O débito de crédito ocorre somente em produção (tpAmb=1) e quando o CT-e é autorizado. Os exemplos abaixo cobrem o caso mais comum: modal rodoviário (modal=01) e CT-e Normal (tpCTe=0).
Headers obrigatórios
| Header | Tipo | Descrição |
|---|---|---|
| token | string | Token da empresa emissora |
| sign | string | Assinatura MD5: MD5(token + path + body + timestamp) |
| timestamp | string | Unix timestamp em segundos (janela de 5 minutos) |
ide (tpAmb, CFOP, natOp, modal, tpCTe, toma, cMunIni, UFIni, cMunFim, UFFim); emit com CNPJ ou CPF e xNome; rem com CNPJ ou CPF; dest com CNPJ ou CPF; vPrest.vTPrest > 0; imp (com uma variante de ICMS). Para tpCTe=0 (Normal): infCTeNorm com infCarga (proPred + ao menos 1 infQ) e infModal (o modal correspondente a ide.modal; para modal=01, rodo.RNTRC é obrigatório). Demais campos opcionais.
Body — raiz
| Campo | Tipo | Descrição |
|---|---|---|
| ide * | object | Identificação do CT-e |
| emit * | object | Dados do emitente (transportador) |
| rem * | object | Remetente da carga |
| dest * | object | Destinatário da carga |
| vPrest * | object | Valores da prestação do serviço |
| imp * | object | Impostos (ICMS + tributos) |
| infCTeNorm * | object | Corpo do CT-e Normal — obrigatório quando tpCTe=0 (Normal) ou 3 (Substituto) |
| exped | object | Expedidor (opcional) |
| receb | object | Recebedor (opcional) |
| compl | object | Dados complementares (observações, fluxo, entrega) |
| infCteComp | object | Chave do CT-e complementado — obrigatório quando tpCTe=1 (Complemento): { chCTe } |
| infCteAnu | object | Chave do CT-e anulado — obrigatório quando tpCTe=2 (Anulação): { chCte, dEmi } |
| autXML | array | CNPJs/CPFs autorizados a acessar o XML: [{ CNPJ } | { CPF }] |
| infRespTec | object | Responsável técnico — preenchido automaticamente pelo servidor por UF |
ide — Identificação
| Campo | Tipo | Descrição |
|---|---|---|
| tpAmb * | int | Ambiente: 1=produção, 2=homologação |
| CFOP * | int | Código fiscal da operação (ex.: 5353 dentro do estado, 6353 interestadual) |
| natOp * | string | Natureza da operação (ex.: "PRESTACAO DE SERVICO DE TRANSPORTE") |
| modal * | string | Modal: "01"=rodoviário, "02"=aéreo, "03"=aquaviário, "04"=ferroviário, "05"=dutoviário, "06"=multimodal |
| tpCTe * | int | Tipo do CT-e: 0=Normal, 1=Complemento, 2=Anulação, 3=Substituto |
| tpServ * | int | Tipo de serviço: 0=Normal, 1=Subcontratação, 2=Redespacho, 3=Redespacho Intermediário, 4=Serviço Vinculado a Multimodal |
| toma * | int | Tomador do serviço: 0=Remetente, 1=Expedidor, 2=Recebedor, 3=Destinatário, 4=Outros |
| toma4 | object | Dados do tomador — obrigatório quando toma=4 (ver tabela abaixo) |
| indIEToma | int | Indicador de IE do tomador: 1=Contribuinte ICMS, 2=Isento, 9=Não Contribuinte (quando 9, a IE do tomador é omitida automaticamente) |
| cMunIni * | long | Código IBGE do município de início da prestação (7 dígitos) |
| xMunIni | string | Nome do município de início |
| UFIni * | string | UF de início (2 letras) |
| cMunFim * | long | Código IBGE do município de fim da prestação (7 dígitos) |
| xMunFim | string | Nome do município de fim |
| UFFim * | string | UF de fim (2 letras) |
| cMunEnv | long | Código IBGE do município de emissão |
| xMunEnv | string | Nome do município de emissão |
| UFEnv | string | UF de emissão |
| retira | int | Retira na origem: 0=Sim, 1=Não. Default: 1 |
| xDetRetira | string | Detalhes da retirada |
| tpImp | int | Formato do DACTE: 1=Retrato, 2=Paisagem. Default: 1 |
| infPercurso | array | UFs do percurso: [{ UFPer }] |
| dhCont | string | Data/hora de entrada em contingência (ISO 8601) |
| xJust | string | Justificativa da contingência |
| serie | int | Série do CT-e (3 dígitos da chave de acesso). Opcional — auto-alocada (série de CT-e da empresa) quando omitida ou 0; respeitada quando enviada |
| nCT | long | Número do CT-e (compõe a chave de acesso). Opcional — auto-incrementado pelo servidor quando omitido ou 0; respeitado quando enviado (útil para pular a numeração, ex.: após uma duplicidade) |
Preenchidos automaticamente pelo servidor — não é necessário enviá-los: mod (fixo 57), cCT (código numérico de 8 dígitos), cDV (dígito verificador), cUF (derivado da UF do emitente), dhEmi (data/hora atual), tpEmis (default 1=Normal), procEmi e verProc.
toma4 — Tomador "Outros" (quando ide.toma=4)
| Campo | Tipo | Descrição |
|---|---|---|
| CNPJ ⚠ / CPF ⚠ | string | Documento do tomador (um dos dois) |
| IE | string | Inscrição Estadual |
| xNome | string | Razão social/nome |
| xFant, fone, email | string | Nome fantasia, telefone, e-mail |
| enderToma | object | Endereço: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, cPais, xPais } |
emit — Emitente (transportador)
| Campo | Tipo | Descrição |
|---|---|---|
| CNPJ ⚠ | string | CNPJ do emitente (14 dígitos) |
| CPF ⚠ | string | CPF do emitente (11 dígitos) |
| IE | string | Inscrição Estadual |
| IEST | string | Inscrição Estadual do substituto tributário |
| xNome * | string | Razão social |
| xFant | string | Nome fantasia |
| CRT | int | Código de Regime Tributário: 1=Simples Nacional, 2=SN excesso de sublimite, 3=Regime Normal, 4=MEI. Default: 3 |
| enderEmit | object | Endereço: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, fone } |
rem — Remetente
| Campo | Tipo | Descrição |
|---|---|---|
| CNPJ ⚠ / CPF ⚠ | string | Documento do remetente (um dos dois) |
| IE | string | Inscrição Estadual (ou "ISENTO") |
| xNome | string | Razão social/nome |
| xFant, fone, email | string | Nome fantasia, telefone, e-mail |
| enderReme | object | Endereço do remetente (estrutura abaixo) |
| locColeta | array | Locais de coleta (opcional): [{ CNPJ|CPF, xNome, xLgr, nro, xBairro, cMun, xMun, UF }] |
dest — Destinatário
| Campo | Tipo | Descrição |
|---|---|---|
| CNPJ ⚠ / CPF ⚠ | string | Documento do destinatário (um dos dois) |
| IE | string | Inscrição Estadual (ou "ISENTO") |
| xNome | string | Razão social/nome |
| fone, email, ISUF | string | Telefone, e-mail, Inscrição na SUFRAMA |
| enderDest | object | Endereço do destinatário (estrutura abaixo) |
| locEnt | object | Local de entrega (opcional): { CNPJ|CPF, xNome, xLgr, nro, xBairro, cMun, xMun, UF } |
exped / receb — Expedidor / Recebedor (opcionais)
| Campo | Tipo | Descrição |
|---|---|---|
| CNPJ / CPF | string | Documento (um dos dois) |
| IE, xNome, fone, email | string | Inscrição Estadual, nome, telefone, e-mail |
| enderExped / enderReceb | object | Endereço (mesma estrutura genérica abaixo) |
Endereço (enderEmit / enderReme / enderExped / enderReceb / enderDest)
| Campo | Tipo | Descrição |
|---|---|---|
| xLgr | string | Logradouro |
| nro | string | Número |
| xCpl | string | Complemento |
| xBairro | string | Bairro |
| cMun | string | Código IBGE do município (7 dígitos) |
| xMun | string | Nome do município |
| CEP | string | CEP (8 dígitos) — não usado em enderEmit |
| UF | string | Sigla da UF (2 letras) |
| cPais | string | Código do país (opcional, default 1058 Brasil) |
| xPais | string | Nome do país (opcional) |
| fone | string | Telefone (somente em enderEmit) |
vPrest — Valores da Prestação
| Campo | Tipo | Descrição |
|---|---|---|
| vTPrest * | decimal | Valor total da prestação do serviço (> 0) |
| vRec | decimal | Valor a receber |
| Comp | array | Componentes do valor: [{ xNome, vComp }] — ex.: "FRETE PESO", "PEDÁGIO", "GRIS" |
imp — Impostos
| Campo | Tipo | Descrição |
|---|---|---|
| ICMS * | object | Tributação do ICMS — preencher apenas uma das variantes (ver abaixo) |
| vTotTrib | decimal | Valor aproximado total de tributos |
| infAdFisco | string | Informações adicionais de interesse do Fisco |
| ICMSUFFim | object | DIFAL (partilha interestadual, opcional): { vBCUFFim, pFCPUFFim, pICMSUFFim, pICMSInter, vFCPUFFim, vICMSUFFim, vICMSUFIni } |
| infTribFed | object | Tributos federais (opcional): { vPIS, vCOFINS, vIR, vINSS, vCSLL } |
ICMS — variantes (preencher só uma)
| Variante | Quando usar | Campos |
|---|---|---|
| ICMS00 | Tributação normal | { vBC, pICMS, vICMS } (CST 00) |
| ICMS20 | Com redução de base de cálculo | { pRedBC, vBC, pICMS, vICMS } (CST 20) |
| ICMS45 | Isenta / não tributada / diferida | { CST } — "40"=Isenta, "41"=Não tributada, "51"=Diferido |
| ICMS60 | ICMS cobrado por substituição tributária | { vBCSTRet, vICMSSTRet, pICMSSTRet, vCred } (CST 60) |
| ICMS90 | Outros (regime especial) | { pRedBC, vBC, pICMS, vICMS, vCred } (CST 90) |
| ICMSOutraUF | ICMS devido a outra UF | { pRedBCOutraUF, vBCOutraUF, pICMSOutraUF, vICMSOutraUF } |
| ICMSSN | Emitente do Simples Nacional | { CST: "90", indSN: 1 } |
infCTeNorm — CT-e Normal (obrigatório para tpCTe=0/3)
| Campo | Tipo | Descrição |
|---|---|---|
| infCarga * | object | Informações da carga (tabela abaixo) |
| infDoc | object | Documentos transportados (tabela abaixo) |
| infModal * | object | Informações do modal (tabela abaixo) |
| docAnt | object | Documentos anteriores (subcontratação/redespacho): { emiDocAnt[]{ CNPJ|CPF, IE, UF, xNome, idDocAnt[] } } |
| seg | array | Seguro da carga: [{ respSeg, xSeg, CNPJ, nApol, nAver, vCarga }] — respSeg: 1=Remetente…6=Tomador |
| cobr | object | Cobrança/faturas: { fat{ nFat, vOrig, vDesc, vLiq }, dup[]{ nDup, dVenc, vDup } } |
| veicNovos | array | Veículos novos transportados: [{ chassi, cCor, xCor, cMod, vUnit, vFrete }] |
| infCteSub | object | Substituição — obrigatório quando tpCTe=3: { chCte, indAltToma, refNF, tomaICMS, tomaNaoICMS } |
infCTeNorm.infCarga — Carga
| Campo | Tipo | Descrição |
|---|---|---|
| proPred * | string | Produto predominante |
| vCarga | decimal | Valor total da carga |
| xOutCat | string | Outras características da carga (ex.: FRIA, GRANEL, REFRIGERADA) |
| vCargaAverb | decimal | Valor da carga para efeito de averbação |
| infQ[] * | array | Quantidades — mínimo 1: [{ cUnid, tpMed, qCarga }] |
| infQ[].cUnid | string | Unidade: "00"=M³, "01"=KG, "02"=TON, "03"=UNIDADE, "04"=LITROS, "05"=MMBTU |
| infQ[].tpMed | string | Tipo de medida (ex.: "PESO BRUTO", "PESO DECLARADO") |
| infQ[].qCarga | decimal | Quantidade |
infCTeNorm.infDoc — Documentos transportados
| Campo | Tipo | Descrição |
|---|---|---|
| infNFe | array | NF-es por chave de acesso: [{ chave, PIN, dPrev, infUnidCarga[], infUnidTransp[] }] — chave com 44 dígitos |
| infNF | array | Notas em papel (legado): [{ mod, serie, nDoc, dEmi, vBC, vICMS, vProd, vNF, nCFOP, nPeso, … }] |
| infOutros | array | Outros documentos: [{ tpDoc, descOutros, nDoc, dEmi, vDocFisc }] — tpDoc: "00"=Declaração, "10"=Dutoviário, "99"=Outros |
infCTeNorm.infModal — Modais (preencher só o correspondente a ide.modal)
| Modal | Objeto | Campos |
|---|---|---|
| 01 Rodoviário | rodo | { RNTRC* } — RNTRC com 8 dígitos ou "ISENTO". Opcional: occ[] (ordens de coleta) |
| 02 Aéreo | aereo | { nMinu, nOCA, dPrevAereo, natCarga{ xDime, cInfManu[] }, tarifa{ CL, cTar, vTar }, peri[] } — dPrevAereo AAAA-MM-DD |
| 03 Aquaviário | aquav | { vPrest, vAFRMM, xNavio, nViag, direc, irin, tpNav, balsa[], detCont[] } — direc: N/L/S/O; tpNav: 0=Interior, 1=Cabotagem |
| 04 Ferroviário | ferrov | { tpTraf, respFat, ferrEmi, vFrete, chCTeFerroOrigem, ferroEnv[] } — tpTraf: 0=Próprio, 1=Mútuo, 2=Rodoferroviário, 3=Rodoviário |
| 05 Dutoviário | duto | { vTar, dIni, dFim } — datas AAAA-MM-DD |
| 06 Multimodal | multimodal | { COTM, indNegociavel, seg[] } — indNegociavel: 0=Não, 1=Sim |
Todo o bloco infModal aceita versaoModal (default "4.00").
compl — Dados complementares (opcional)
| Campo | Tipo | Descrição |
|---|---|---|
| xCaracAd, xCaracSer, xEmi | string | Característica adicional do transporte / do serviço / nome do emissor |
| origCalc, destCalc | string | Município de origem / destino para cálculo do frete |
| xObs | string | Observações gerais |
| ObsCont / ObsFisco | array | Observações livres do contribuinte / fisco: [{ xCampo, xTexto }] |
| fluxo, Entrega | object | Fluxo de carga (origem/passagem/destino/rota) e previsão de entrega |
* Campo obrigatório. ⚠ Pelo menos um de CNPJ ou CPF é obrigatório no grupo.
/api/cte/cancelCancelar CT-e
Cancela um CT-e autorizado (evento 110111). Requer que o CT-e tenha sido autorizado (possua protocolo) e ainda não esteja cancelado.
Headers obrigatórios
| Header | Tipo | Descrição |
|---|---|---|
| token | string | Token da empresa emissora |
| sign | string | Assinatura MD5 |
| timestamp | string | Unix timestamp em segundos |
Body
| Campo | Tipo | Descrição |
|---|---|---|
| chCTe * | string | Chave de acesso do CT-e (44 dígitos) |
| xJust * | string | Justificativa do cancelamento (mínimo 15 caracteres por exigência Fisco) |
| nProt | string | Protocolo de autorização. Opcional: quando omitido, usa o protocolo registrado na emissão |
* Campo obrigatório.
/api/cte/cceCarta de Correção (CC-e)
Registra uma Carta de Correção Eletrônica (evento 110110) sobre um CT-e autorizado. A CC-e não pode corrigir valores que impactem o imposto, dados cadastrais que mudem emitente/tomador/remetente/destinatário, ou a data de emissão. Cada correção indica o grupo, campo e novo valor.
Headers obrigatórios
| Header | Tipo | Descrição |
|---|---|---|
| token | string | Token da empresa emissora |
| sign | string | Assinatura MD5 |
| timestamp | string | Unix timestamp em segundos |
Body
| Campo | Tipo | Descrição |
|---|---|---|
| chCTe * | string | Chave de acesso do CT-e (44 dígitos) |
| infCorrecao[] * | array | Correções (mínimo 1, até 20) |
| infCorrecao[].grupoAlterado * | string | Grupo alterado (ex.: "ide", "rem", "dest") |
| infCorrecao[].campoAlterado * | string | Campo alterado (ex.: "xNome") |
| infCorrecao[].valorAlterado * | string | Novo valor |
| infCorrecao[].nroItemAlterado | int | Número do item alterado (quando o grupo for uma lista) |
* Campo obrigatório. A condição de uso (xCondUso) é preenchida automaticamente pelo servidor.
/api/cte/consultConsultar situação do CT-e
Consulta a situação do CT-e no Fisco a partir da chave de acesso. Quando o CT-e está cancelado (registro local), a resposta reflete o cancelamento.
Headers obrigatórios
| Header | Tipo | Descrição |
|---|---|---|
| token | string | Token da empresa emissora |
| sign | string | Assinatura MD5 |
| timestamp | string | Unix timestamp em segundos |
Body
| Campo | Tipo | Descrição |
|---|---|---|
| chCTe * | string | Chave de acesso do CT-e (44 dígitos) |
* Campo obrigatório.
/api/cte/get_listListar CT-e (com paginação)
Lista os CT-e da empresa com paginação. Parâmetros passados via query string (não no body). O filtro de tempo é opcional, mas se enviado exige ambos start_create_time e end_create_time.
Headers obrigatórios
| Header | Tipo | Descrição |
|---|---|---|
| token | string | Token da empresa emissora |
| sign | string | Assinatura MD5 (path inclui a query string) |
| timestamp | string | Unix timestamp em segundos |
Query string
| Parâmetro | Tipo | Descrição |
|---|---|---|
| page * | int | Número da página (≥ 1) |
| page_size * | int | Tamanho da página (1–50) |
| start_create_time | long | Unix timestamp em milissegundos — início (exige end_create_time) |
| end_create_time | long | Unix timestamp em milissegundos — fim |
| status | string | Filtrar por status. Valores: "Success" (autorizado), "Canceled" (cancelado), "Processing" (em processamento), "Failed" (falhou), "Unknown" (desconhecido) |
* Campo obrigatório.