Pular para o conteúdo principal

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

Datas podem ir em ISO 8601

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.

O ICMS depende do CST, e o layout também

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:

CSTGrupo
00tributação normal
20com redução de base
40, 41, 51isento / não tributado
60ICMS cobrado por substituição tributária
90outros

Simples Nacional usa imposto.icms.simples_nacional: true.

Tomador contribuinte precisa de IE

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:

ValorO que é
0normal
1complemento de valores
3substituiçã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 mais

No 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.