Emitindo um CT-e
POST /v1/cte/emitir
curl -X POST https://api.conota.dev/v1/cte/emitir \
-H "X-API-Key: $CONOTA_API_KEY" \
-H "Content-Type: application/json" \
-d @cte.json
Devolve 202 com um job_id. A emissão é assíncrona, como todo documento aqui — ver
Emissão assíncrona.
Modelo 57 — carga
{
"cpf_cnpj": "11222333000181",
"referencia_externa": "frete-4471",
"nota": {
"identificacao": {
"modelo": 57,
"cfop": "5353",
"natureza_operacao": "PRESTACAO DE SERVICO DE TRANSPORTE",
"serie": "1", "numero": "1",
"data_emissao": "2026-09-06T10:00:00-03:00",
"tipo_servico": "0",
"codigo_municipio_inicio": "3106200", "municipio_inicio": "BELO HORIZONTE", "uf_inicio": "MG",
"codigo_municipio_fim": "3550308", "municipio_fim": "SAO PAULO", "uf_fim": "SP"
},
"emitente": { "cnpj": "11222333000181", "razao_social": "TRANSPORTADORA EXEMPLO" },
"remetente": { "cnpj": "11222333000181", "razao_social": "REMETENTE EXEMPLO" },
"destinatario": { "cnpj": "11222333000181", "razao_social": "DESTINATARIO EXEMPLO" },
"tomador": { "indice": "0" },
"prestacao": {
"valor_total": "1500.00", "valor_receber": "1500.00",
"componentes": [{ "nome": "FRETE VALOR", "valor": "1500.00" }]
},
"imposto": { "icms": { "cst": "00", "base_calculo": "1500.00", "aliquota": "12.00", "valor": "180.00" } },
"carga": {
"valor_carga": "50000.00", "produto_predominante": "ELETRODOMESTICOS",
"quantidades": [{ "unidade": "01", "tipo_medida": "PESO BRUTO", "quantidade": "1200.0000" }]
},
"documentos": { "nfe": [{ "chave_acesso": "3126..." }] },
"rodoviario": { "rntrc": "12345678" }
}
}
Modelo 67 — outros serviços
Muda a estrutura, não só um campo: um tomador só, e servico no lugar de carga.
{
"cpf_cnpj": "11222333000181",
"nota": {
"identificacao": { "modelo": 67, "tipo_servico": "6", "cfop": "5357", "...": "..." },
"emitente": { "...": "..." },
"tomador": { "cnpj": "11222333000181", "razao_social": "CONTRATANTE EXEMPLO" },
"servico": { "descricao": "TRANSPORTE DE PESSOAS", "quantidade": "1.0000" },
"prestacao": { "...": "..." },
"imposto": { "...": "..." },
"rodoviario": { "taf": "123456789" }
}
}
tipo_servico no 67: 6 transporte de pessoas · 7 transporte de valores · 8 excesso de
bagagem.
Detalhes que evitam rejeição
O autorizador exige dd/mm/aaaa, mas isso é problema nosso. Mande
2026-09-06T10:00:00-03:00 como no resto da API — a conversão acontece aqui.
No CT-e o grupo de ICMS muda de forma conforme o CST. Você manda sempre em
imposto.icms, com o cst, e o Conota monta o grupo certo:
| CST | Grupo |
|---|---|
00 | tributação normal |
20 | com redução de base |
40, 41, 51 | isento / não tributado |
60 | ICMS cobrado por substituição tributária |
90 | outros |
Simples Nacional usa imposto.icms.simples_nacional: true.
Se indicador_ie_tomador marca contribuinte, a inscrição estadual daquele papel tem de
estar preenchida e válida. ISENTO não serve. É a rejeição 481, e ela é fácil de
provocar sem perceber, porque o tomador costuma ser apontado por índice — o campo que falta
está em outro objeto.
Complemento e substituição
identificacao.tipo_cte define a finalidade:
| Valor | O que é |
|---|---|
0 | normal |
1 | complemento de valores |
3 | substituição — corrige um CT-e já emitido |
"identificacao": { "tipo_cte": "3" },
"substituicao": { "chave": "3126...", "altera_tomador": "0" }
tipo_cte = 2 (Anulação) não existe maisNo leiaute 3.00 havia CT-e de Anulação. No 4.00 ele foi removido — o valor saiu da
lista permitida e o grupo infCteAnu saiu do schema.
O Conota recusa tipo_cte = 2 com o motivo, em vez de deixar você descobrir pela
rejeição da SEFAZ. Para corrigir um CT-e emitido, o caminho é a substituição.
Idempotência
referencia_externa faz o reenvio devolver o job original em vez de emitir de novo. Em
frete isso importa mais que na NF-e: um retry de rede vira um segundo CT-e cobrando o mesmo
serviço. Ver Referência externa.
Numeração
A numeração é sua: identificacao.numero. O Conota transmite o que recebeu. Ver
Referência de campos para a lista completa.