Otros documentos fiscales
CT-e
5 endpoints
La API de CT-e (modelo 57, layout 4.00 + NT2025/001) permite emitir, cancelar, corregir (CC-e) y consultar Conocimientos de Transporte Electrónicos. El CT-e documenta la prestación de servicio de transporte de cargas. Admite 6 modales (carretero, aéreo, acuaviario, ferroviario, ductoviario, multimodal) y 4 tipos de CT-e (Normal, Complemento, Anulación, Sustituto). Los datos de negocio van en el cuerpo del /create; los campos técnicos de la clave de acceso (cCT, cDV, cUF, dhEmi, mod) son calculados automáticamente por el servidor. Los campos serie y nCT son opcionales: se asignan automáticamente cuando se omiten (o valen 0), o se respetan cuando se envían en la solicitud (útil para saltar la numeración, por ejemplo tras una duplicidad en la autoridad fiscal).
| Endpoint | Método | Descripción |
|---|---|---|
/api/cte/create | POST | Emitir CT-e |
/api/cte/cancel | POST | Cancelar CT-e (evento 110111) |
/api/cte/cce | POST | Carta de Corrección — CC-e (evento 110110) |
/api/cte/consult | POST | Consultar situación del CT-e |
El tomador del servicio (quien paga el flete) se define en ide.toma: 0=Remitente, 1=Expedidor, 2=Recibidor, 3=Destinatario, 4=Otros (en este caso complete ide.toma4).
/api/cte/createEmitir CT-e
Emite un CT-e a partir del cuerpo enviado. El cliente envía únicamente los datos de negocio; los campos de identificación técnica de la clave de acceso son calculados por el servidor (ver la nota debajo de la tabla ide). El débito de crédito ocurre solo en producción (tpAmb=1) y cuando el CT-e es autorizado. Los ejemplos a continuación cubren el caso más común: modal carretero (modal=01) y CT-e Normal (tpCTe=0).
Headers obligatorios
| Header | Tipo | Descripción |
|---|---|---|
| token | string | Token de la empresa emisora |
| sign | string | Firma MD5: MD5(token + path + body + timestamp) |
| timestamp | string | Unix timestamp en segundos (ventana de 5 minutos) |
ide (tpAmb, CFOP, natOp, modal, tpCTe, toma, cMunIni, UFIni, cMunFim, UFFim); emit con CNPJ o CPF y xNome; rem con CNPJ o CPF; dest con CNPJ o CPF; vPrest.vTPrest > 0; imp (con una variante de ICMS). Para tpCTe=0 (Normal): infCTeNorm con infCarga (proPred + al menos 1 infQ) e infModal (el modal correspondiente a ide.modal; para modal=01, rodo.RNTRC es obligatorio). Los demás campos son opcionales.
Body — raíz
| Campo | Tipo | Descripción |
|---|---|---|
| ide * | object | Identificación del CT-e |
| emit * | object | Datos del emisor (transportista) |
| rem * | object | Remitente de la carga |
| dest * | object | Destinatario de la carga |
| vPrest * | object | Valores de la prestación del servicio |
| imp * | object | Impuestos (ICMS + tributos) |
| infCTeNorm * | object | Cuerpo del CT-e Normal — obligatorio cuando tpCTe=0 (Normal) o 3 (Sustituto) |
| exped | object | Expedidor (opcional) |
| receb | object | Recibidor (opcional) |
| compl | object | Datos complementarios (observaciones, flujo, entrega) |
| infCteComp | object | Clave del CT-e complementado — obligatorio cuando tpCTe=1 (Complemento): { chCTe } |
| infCteAnu | object | Clave del CT-e anulado — obligatorio cuando tpCTe=2 (Anulación): { chCte, dEmi } |
| autXML | array | CNPJ/CPF autorizados a acceder al XML: [{ CNPJ } | { CPF }] |
| infRespTec | object | Responsable técnico — rellenado automáticamente por el servidor según la UF |
ide — Identificación
| Campo | Tipo | Descripción |
|---|---|---|
| tpAmb * | int | Ambiente: 1=producción, 2=homologación |
| CFOP * | int | Código fiscal de la operación (ej.: 5353 dentro del estado, 6353 interestatal) |
| natOp * | string | Naturaleza de la operación (ej.: "PRESTACAO DE SERVICO DE TRANSPORTE") |
| modal * | string | Modal: "01"=carretero, "02"=aéreo, "03"=acuaviario, "04"=ferroviario, "05"=ductoviario, "06"=multimodal |
| tpCTe * | int | Tipo del CT-e: 0=Normal, 1=Complemento, 2=Anulación, 3=Sustituto |
| tpServ * | int | Tipo de servicio: 0=Normal, 1=Subcontratación, 2=Reexpedición, 3=Reexpedición Intermedia, 4=Servicio Vinculado a Multimodal |
| toma * | int | Tomador del servicio: 0=Remitente, 1=Expedidor, 2=Recibidor, 3=Destinatario, 4=Otros |
| toma4 | object | Datos del tomador — obligatorio cuando toma=4 (ver tabla abajo) |
| indIEToma | int | Indicador de IE del tomador: 1=Contribuyente ICMS, 2=Exento, 9=No Contribuyente (cuando 9, la IE del tomador se omite automáticamente) |
| cMunIni * | long | Código IBGE del municipio de inicio de la prestación (7 dígitos) |
| xMunIni | string | Nombre del municipio de inicio |
| UFIni * | string | UF de inicio (2 letras) |
| cMunFim * | long | Código IBGE del municipio de fin de la prestación (7 dígitos) |
| xMunFim | string | Nombre del municipio de fin |
| UFFim * | string | UF de fin (2 letras) |
| cMunEnv | long | Código IBGE del municipio de emisión |
| xMunEnv | string | Nombre del municipio de emisión |
| UFEnv | string | UF de emisión |
| retira | int | Retira en el origen: 0=Sí, 1=No. Default: 1 |
| xDetRetira | string | Detalles de la retirada |
| tpImp | int | Formato del DACTE: 1=Vertical, 2=Horizontal. Default: 1 |
| infPercurso | array | UF del recorrido: [{ UFPer }] |
| dhCont | string | Fecha/hora de entrada en contingencia (ISO 8601) |
| xJust | string | Justificación de la contingencia |
| serie | int | Serie del CT-e (3 dígitos de la clave de acceso). Opcional — autoasignada (serie de CT-e de la empresa) cuando se omite o vale 0; respetada cuando se envía |
| nCT | long | Número del CT-e (compone la clave de acceso). Opcional — autoincrementado por el servidor cuando se omite o vale 0; respetado cuando se envía (útil para saltar la numeración, por ejemplo tras una duplicidad) |
Rellenados automáticamente por el servidor — no es necesario enviarlos: mod (fijo en 57), cCT (código numérico de 8 dígitos), cDV (dígito verificador), cUF (derivado de la UF del emisor), dhEmi (fecha/hora actual), tpEmis (default 1=Normal), procEmi y verProc.
toma4 — Tomador "Otros" (cuando ide.toma=4)
| Campo | Tipo | Descripción |
|---|---|---|
| CNPJ ⚠ / CPF ⚠ | string | Documento del tomador (uno de los dos) |
| IE | string | Inscripción Estatal |
| xNome | string | Razón social/nombre |
| xFant, fone, email | string | Nombre de fantasía, teléfono, correo electrónico |
| enderToma | object | Dirección: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, cPais, xPais } |
emit — Emisor (transportista)
| Campo | Tipo | Descripción |
|---|---|---|
| CNPJ ⚠ | string | CNPJ del emisor (14 dígitos) |
| CPF ⚠ | string | CPF del emisor (11 dígitos) |
| IE | string | Inscripción Estatal |
| IEST | string | Inscripción Estatal del sustituto tributario |
| xNome * | string | Razón social |
| xFant | string | Nombre de fantasía |
| CRT | int | Código de Régimen Tributario: 1=Simples Nacional, 2=SN exceso de sublímite, 3=Régimen Normal, 4=MEI. Default: 3 |
| enderEmit | object | Dirección: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, fone } |
rem — Remitente
| Campo | Tipo | Descripción |
|---|---|---|
| CNPJ ⚠ / CPF ⚠ | string | Documento del remitente (uno de los dos) |
| IE | string | Inscripción Estatal (o "ISENTO") |
| xNome | string | Razón social/nombre |
| xFant, fone, email | string | Nombre de fantasía, teléfono, correo electrónico |
| enderReme | object | Dirección del remitente (estructura abajo) |
| locColeta | array | Lugares de recolección (opcional): [{ CNPJ|CPF, xNome, xLgr, nro, xBairro, cMun, xMun, UF }] |
dest — Destinatario
| Campo | Tipo | Descripción |
|---|---|---|
| CNPJ ⚠ / CPF ⚠ | string | Documento del destinatario (uno de los dos) |
| IE | string | Inscripción Estatal (o "ISENTO") |
| xNome | string | Razón social/nombre |
| fone, email, ISUF | string | Teléfono, correo electrónico, Inscripción en SUFRAMA |
| enderDest | object | Dirección del destinatario (estructura abajo) |
| locEnt | object | Lugar de entrega (opcional): { CNPJ|CPF, xNome, xLgr, nro, xBairro, cMun, xMun, UF } |
exped / receb — Expedidor / Recibidor (opcionales)
| Campo | Tipo | Descripción |
|---|---|---|
| CNPJ / CPF | string | Documento (uno de los dos) |
| IE, xNome, fone, email | string | Inscripción Estatal, nombre, teléfono, correo electrónico |
| enderExped / enderReceb | object | Dirección (la misma estructura genérica abajo) |
Dirección (enderEmit / enderReme / enderExped / enderReceb / enderDest)
| Campo | Tipo | Descripción |
|---|---|---|
| xLgr | string | Calle/dirección |
| nro | string | Número |
| xCpl | string | Complemento |
| xBairro | string | Barrio |
| cMun | string | Código IBGE del municipio (7 dígitos) |
| xMun | string | Nombre del municipio |
| CEP | string | CEP (8 dígitos) — no usado en enderEmit |
| UF | string | Sigla de la UF (2 letras) |
| cPais | string | Código del país (opcional, default 1058 Brasil) |
| xPais | string | Nombre del país (opcional) |
| fone | string | Teléfono (solo en enderEmit) |
vPrest — Valores de la Prestación
| Campo | Tipo | Descripción |
|---|---|---|
| vTPrest * | decimal | Valor total de la prestación del servicio (> 0) |
| vRec | decimal | Valor a recibir |
| Comp | array | Componentes del valor: [{ xNome, vComp }] — ej.: "FRETE PESO", "PEDÁGIO", "GRIS" |
imp — Impuestos
| Campo | Tipo | Descripción |
|---|---|---|
| ICMS * | object | Tributación del ICMS — complete solo una de las variantes (ver abajo) |
| vTotTrib | decimal | Valor aproximado total de tributos |
| infAdFisco | string | Información adicional de interés del Fisco |
| ICMSUFFim | object | DIFAL (reparto interestatal, opcional): { vBCUFFim, pFCPUFFim, pICMSUFFim, pICMSInter, vFCPUFFim, vICMSUFFim, vICMSUFIni } |
| infTribFed | object | Tributos federales (opcional): { vPIS, vCOFINS, vIR, vINSS, vCSLL } |
ICMS — variantes (completar solo una)
| Variante | Cuándo usar | Campos |
|---|---|---|
| ICMS00 | Tributación normal | { vBC, pICMS, vICMS } (CST 00) |
| ICMS20 | Con reducción de base de cálculo | { pRedBC, vBC, pICMS, vICMS } (CST 20) |
| ICMS45 | Exenta / no tributada / diferida | { CST } — "40"=Exenta, "41"=No tributada, "51"=Diferido |
| ICMS60 | ICMS cobrado por sustitución tributaria | { vBCSTRet, vICMSSTRet, pICMSSTRet, vCred } (CST 60) |
| ICMS90 | Otros (régimen especial) | { pRedBC, vBC, pICMS, vICMS, vCred } (CST 90) |
| ICMSOutraUF | ICMS debido a otra UF | { pRedBCOutraUF, vBCOutraUF, pICMSOutraUF, vICMSOutraUF } |
| ICMSSN | Emisor del Simples Nacional | { CST: "90", indSN: 1 } |
infCTeNorm — CT-e Normal (obligatorio para tpCTe=0/3)
| Campo | Tipo | Descripción |
|---|---|---|
| infCarga * | object | Información de la carga (tabla abajo) |
| infDoc | object | Documentos transportados (tabla abajo) |
| infModal * | object | Información del modal (tabla abajo) |
| docAnt | object | Documentos anteriores (subcontratación/reexpedición): { emiDocAnt[]{ CNPJ|CPF, IE, UF, xNome, idDocAnt[] } } |
| seg | array | Seguro de la carga: [{ respSeg, xSeg, CNPJ, nApol, nAver, vCarga }] — respSeg: 1=Remitente…6=Tomador |
| cobr | object | Cobranza/facturas: { fat{ nFat, vOrig, vDesc, vLiq }, dup[]{ nDup, dVenc, vDup } } |
| veicNovos | array | Vehículos nuevos transportados: [{ chassi, cCor, xCor, cMod, vUnit, vFrete }] |
| infCteSub | object | Sustitución — obligatorio cuando tpCTe=3: { chCte, indAltToma, refNF, tomaICMS, tomaNaoICMS } |
infCTeNorm.infCarga — Carga
| Campo | Tipo | Descripción |
|---|---|---|
| proPred * | string | Producto predominante |
| vCarga | decimal | Valor total de la carga |
| xOutCat | string | Otras características de la carga (ej.: FRIA, GRANEL, REFRIGERADA) |
| vCargaAverb | decimal | Valor de la carga para efecto de averiguación |
| infQ[] * | array | Cantidades — mínimo 1: [{ cUnid, tpMed, qCarga }] |
| infQ[].cUnid | string | Unidad: "00"=M³, "01"=KG, "02"=TON, "03"=UNIDAD, "04"=LITROS, "05"=MMBTU |
| infQ[].tpMed | string | Tipo de medida (ej.: "PESO BRUTO", "PESO DECLARADO") |
| infQ[].qCarga | decimal | Cantidad |
infCTeNorm.infDoc — Documentos transportados
| Campo | Tipo | Descripción |
|---|---|---|
| infNFe | array | NF-e por clave de acceso: [{ chave, PIN, dPrev, infUnidCarga[], infUnidTransp[] }] — chave con 44 dígitos |
| infNF | array | Notas en papel (legado): [{ mod, serie, nDoc, dEmi, vBC, vICMS, vProd, vNF, nCFOP, nPeso, … }] |
| infOutros | array | Otros documentos: [{ tpDoc, descOutros, nDoc, dEmi, vDocFisc }] — tpDoc: "00"=Declaración, "10"=Ductoviario, "99"=Otros |
infCTeNorm.infModal — Modales (completar solo el correspondiente a ide.modal)
| Modal | Objeto | Campos |
|---|---|---|
| 01 Carretero | rodo | { RNTRC* } — RNTRC con 8 dígitos o "ISENTO". Opcional: occ[] (órdenes de recolección) |
| 02 Aéreo | aereo | { nMinu, nOCA, dPrevAereo, natCarga{ xDime, cInfManu[] }, tarifa{ CL, cTar, vTar }, peri[] } — dPrevAereo AAAA-MM-DD |
| 03 Acuaviario | aquav | { vPrest, vAFRMM, xNavio, nViag, direc, irin, tpNav, balsa[], detCont[] } — direc: N/L/S/O; tpNav: 0=Interior, 1=Cabotaje |
| 04 Ferroviario | ferrov | { tpTraf, respFat, ferrEmi, vFrete, chCTeFerroOrigem, ferroEnv[] } — tpTraf: 0=Propio, 1=Mutuo, 2=Rodoferroviario, 3=Carretero |
| 05 Ductoviario | duto | { vTar, dIni, dFim } — fechas AAAA-MM-DD |
| 06 Multimodal | multimodal | { COTM, indNegociavel, seg[] } — indNegociavel: 0=No, 1=Sí |
Todo el bloque infModal acepta versaoModal (default "4.00").
compl — Datos complementarios (opcional)
| Campo | Tipo | Descripción |
|---|---|---|
| xCaracAd, xCaracSer, xEmi | string | Característica adicional del transporte / del servicio / nombre del emisor |
| origCalc, destCalc | string | Municipio de origen / destino para cálculo del flete |
| xObs | string | Observaciones generales |
| ObsCont / ObsFisco | array | Observaciones libres del contribuyente / fisco: [{ xCampo, xTexto }] |
| fluxo, Entrega | object | Flujo de carga (origen/paso/destino/ruta) y previsión de entrega |
* Campo obligatorio. ⚠ Al menos uno de CNPJ o CPF es obligatorio en el grupo.
/api/cte/cancelCancelar CT-e
Cancela un CT-e autorizado (evento 110111). Requiere que el CT-e haya sido autorizado (posea protocolo) y que aún no esté cancelado.
Headers obligatorios
| Header | Tipo | Descripción |
|---|---|---|
| token | string | Token de la empresa emisora |
| sign | string | Firma MD5 |
| timestamp | string | Unix timestamp en segundos |
Body
| Campo | Tipo | Descripción |
|---|---|---|
| chCTe * | string | Clave de acceso del CT-e (44 dígitos) |
| xJust * | string | Justificación del cancelamiento (mínimo 15 caracteres por exigencia de la autoridad fiscal) |
| nProt | string | Protocolo de autorización. Opcional: cuando se omite, usa el protocolo registrado en la emisión |
* Campo obligatorio.
/api/cte/cceCarta de Corrección (CC-e)
Registra una Carta de Corrección Electrónica (evento 110110) sobre un CT-e autorizado. La CC-e no puede corregir valores que impacten el impuesto, datos registrales que cambien emisor/tomador/remitente/destinatario, ni la fecha de emisión. Cada corrección indica el grupo, campo y nuevo valor.
Headers obligatorios
| Header | Tipo | Descripción |
|---|---|---|
| token | string | Token de la empresa emisora |
| sign | string | Firma MD5 |
| timestamp | string | Unix timestamp en segundos |
Body
| Campo | Tipo | Descripción |
|---|---|---|
| chCTe * | string | Clave de acceso del CT-e (44 dígitos) |
| infCorrecao[] * | array | Correcciones (mínimo 1, hasta 20) |
| infCorrecao[].grupoAlterado * | string | Grupo alterado (ej.: "ide", "rem", "dest") |
| infCorrecao[].campoAlterado * | string | Campo alterado (ej.: "xNome") |
| infCorrecao[].valorAlterado * | string | Nuevo valor |
| infCorrecao[].nroItemAlterado | int | Número del ítem alterado (cuando el grupo sea una lista) |
* Campo obligatorio. La condición de uso (xCondUso) es rellenada automáticamente por el servidor.
/api/cte/consultConsultar situación del CT-e
Consulta la situación del CT-e en la autoridad fiscal a partir de la clave de acceso. Cuando el CT-e está cancelado (registro local), la respuesta refleja el cancelamiento.
Headers obligatorios
| Header | Tipo | Descripción |
|---|---|---|
| token | string | Token de la empresa emisora |
| sign | string | Firma MD5 |
| timestamp | string | Unix timestamp en segundos |
Body
| Campo | Tipo | Descripción |
|---|---|---|
| chCTe * | string | Clave de acceso del CT-e (44 dígitos) |
* Campo obligatorio.
/api/cte/get_listListar CT-e (paginado)
Lista los CT-e de la empresa con paginación. Los parámetros se pasan por query string (no en el body). El filtro de tiempo es opcional, pero si se envía requiere tanto start_create_time como end_create_time.
Headers obligatorios
| Header | Tipo | Descripción |
|---|---|---|
| token | string | Token de la empresa emisora |
| sign | string | Firma MD5 (path incluye la query string) |
| timestamp | string | Unix timestamp en segundos |
Query string
| Parámetro | Tipo | Descripción |
|---|---|---|
| page * | int | Número de página (≥ 1) |
| page_size * | int | Tamaño de página (1–50) |
| start_create_time | long | Unix timestamp en milisegundos — inicio (requiere end_create_time) |
| end_create_time | long | Unix timestamp en milisegundos — fin |
| status | string | Filtrar por estado. Valores: "Success" (autorizado), "Canceled" (cancelado), "Processing" (en proceso), "Failed" (falló), "Unknown" (desconocido) |
* Campo obligatorio.