TF Fiscal

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

EndpointMétodoDescripción
/api/cte/createPOSTEmitir CT-e
/api/cte/cancelPOSTCancelar CT-e (evento 110111)
/api/cte/ccePOSTCarta de Corrección — CC-e (evento 110110)
/api/cte/consultPOSTConsultar 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).

POST/api/cte/create

Emitir 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

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)
Campos obligatorios en la solicitud: 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

CampoTipoDescripción
ide *objectIdentificación del CT-e
emit *objectDatos del emisor (transportista)
rem *objectRemitente de la carga
dest *objectDestinatario de la carga
vPrest *objectValores de la prestación del servicio
imp *objectImpuestos (ICMS + tributos)
infCTeNorm *objectCuerpo del CT-e Normal — obligatorio cuando tpCTe=0 (Normal) o 3 (Sustituto)
expedobjectExpedidor (opcional)
recebobjectRecibidor (opcional)
complobjectDatos complementarios (observaciones, flujo, entrega)
infCteCompobjectClave del CT-e complementado — obligatorio cuando tpCTe=1 (Complemento): { chCTe }
infCteAnuobjectClave del CT-e anulado — obligatorio cuando tpCTe=2 (Anulación): { chCte, dEmi }
autXMLarrayCNPJ/CPF autorizados a acceder al XML: [{ CNPJ } | { CPF }]
infRespTecobjectResponsable técnico — rellenado automáticamente por el servidor según la UF

ide — Identificación

CampoTipoDescripción
tpAmb *intAmbiente: 1=producción, 2=homologación
CFOP *intCódigo fiscal de la operación (ej.: 5353 dentro del estado, 6353 interestatal)
natOp *stringNaturaleza de la operación (ej.: "PRESTACAO DE SERVICO DE TRANSPORTE")
modal *stringModal: "01"=carretero, "02"=aéreo, "03"=acuaviario, "04"=ferroviario, "05"=ductoviario, "06"=multimodal
tpCTe *intTipo del CT-e: 0=Normal, 1=Complemento, 2=Anulación, 3=Sustituto
tpServ *intTipo de servicio: 0=Normal, 1=Subcontratación, 2=Reexpedición, 3=Reexpedición Intermedia, 4=Servicio Vinculado a Multimodal
toma *intTomador del servicio: 0=Remitente, 1=Expedidor, 2=Recibidor, 3=Destinatario, 4=Otros
toma4objectDatos del tomador — obligatorio cuando toma=4 (ver tabla abajo)
indIETomaintIndicador de IE del tomador: 1=Contribuyente ICMS, 2=Exento, 9=No Contribuyente (cuando 9, la IE del tomador se omite automáticamente)
cMunIni *longCódigo IBGE del municipio de inicio de la prestación (7 dígitos)
xMunInistringNombre del municipio de inicio
UFIni *stringUF de inicio (2 letras)
cMunFim *longCódigo IBGE del municipio de fin de la prestación (7 dígitos)
xMunFimstringNombre del municipio de fin
UFFim *stringUF de fin (2 letras)
cMunEnvlongCódigo IBGE del municipio de emisión
xMunEnvstringNombre del municipio de emisión
UFEnvstringUF de emisión
retiraintRetira en el origen: 0=Sí, 1=No. Default: 1
xDetRetirastringDetalles de la retirada
tpImpintFormato del DACTE: 1=Vertical, 2=Horizontal. Default: 1
infPercursoarrayUF del recorrido: [{ UFPer }]
dhContstringFecha/hora de entrada en contingencia (ISO 8601)
xJuststringJustificación de la contingencia
serieintSerie 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
nCTlongNú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)

CampoTipoDescripción
CNPJ ⚠ / CPF ⚠stringDocumento del tomador (uno de los dos)
IEstringInscripción Estatal
xNomestringRazón social/nombre
xFant, fone, emailstringNombre de fantasía, teléfono, correo electrónico
enderTomaobjectDirección: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, cPais, xPais }

emit — Emisor (transportista)

CampoTipoDescripción
CNPJ ⚠stringCNPJ del emisor (14 dígitos)
CPF ⚠stringCPF del emisor (11 dígitos)
IEstringInscripción Estatal
IESTstringInscripción Estatal del sustituto tributario
xNome *stringRazón social
xFantstringNombre de fantasía
CRTintCódigo de Régimen Tributario: 1=Simples Nacional, 2=SN exceso de sublímite, 3=Régimen Normal, 4=MEI. Default: 3
enderEmitobjectDirección: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, fone }

rem — Remitente

CampoTipoDescripción
CNPJ ⚠ / CPF ⚠stringDocumento del remitente (uno de los dos)
IEstringInscripción Estatal (o "ISENTO")
xNomestringRazón social/nombre
xFant, fone, emailstringNombre de fantasía, teléfono, correo electrónico
enderRemeobjectDirección del remitente (estructura abajo)
locColetaarrayLugares de recolección (opcional): [{ CNPJ|CPF, xNome, xLgr, nro, xBairro, cMun, xMun, UF }]

dest — Destinatario

CampoTipoDescripción
CNPJ ⚠ / CPF ⚠stringDocumento del destinatario (uno de los dos)
IEstringInscripción Estatal (o "ISENTO")
xNomestringRazón social/nombre
fone, email, ISUFstringTeléfono, correo electrónico, Inscripción en SUFRAMA
enderDestobjectDirección del destinatario (estructura abajo)
locEntobjectLugar de entrega (opcional): { CNPJ|CPF, xNome, xLgr, nro, xBairro, cMun, xMun, UF }

exped / receb — Expedidor / Recibidor (opcionales)

CampoTipoDescripción
CNPJ / CPFstringDocumento (uno de los dos)
IE, xNome, fone, emailstringInscripción Estatal, nombre, teléfono, correo electrónico
enderExped / enderRecebobjectDirección (la misma estructura genérica abajo)

Dirección (enderEmit / enderReme / enderExped / enderReceb / enderDest)

CampoTipoDescripción
xLgrstringCalle/dirección
nrostringNúmero
xCplstringComplemento
xBairrostringBarrio
cMunstringCódigo IBGE del municipio (7 dígitos)
xMunstringNombre del municipio
CEPstringCEP (8 dígitos) — no usado en enderEmit
UFstringSigla de la UF (2 letras)
cPaisstringCódigo del país (opcional, default 1058 Brasil)
xPaisstringNombre del país (opcional)
fonestringTeléfono (solo en enderEmit)

vPrest — Valores de la Prestación

CampoTipoDescripción
vTPrest *decimalValor total de la prestación del servicio (> 0)
vRecdecimalValor a recibir
ComparrayComponentes del valor: [{ xNome, vComp }] — ej.: "FRETE PESO", "PEDÁGIO", "GRIS"

imp — Impuestos

CampoTipoDescripción
ICMS *objectTributación del ICMS — complete solo una de las variantes (ver abajo)
vTotTribdecimalValor aproximado total de tributos
infAdFiscostringInformación adicional de interés del Fisco
ICMSUFFimobjectDIFAL (reparto interestatal, opcional): { vBCUFFim, pFCPUFFim, pICMSUFFim, pICMSInter, vFCPUFFim, vICMSUFFim, vICMSUFIni }
infTribFedobjectTributos federales (opcional): { vPIS, vCOFINS, vIR, vINSS, vCSLL }

ICMS — variantes (completar solo una)

VarianteCuándo usarCampos
ICMS00Tributación normal{ vBC, pICMS, vICMS } (CST 00)
ICMS20Con reducción de base de cálculo{ pRedBC, vBC, pICMS, vICMS } (CST 20)
ICMS45Exenta / no tributada / diferida{ CST } — "40"=Exenta, "41"=No tributada, "51"=Diferido
ICMS60ICMS cobrado por sustitución tributaria{ vBCSTRet, vICMSSTRet, pICMSSTRet, vCred } (CST 60)
ICMS90Otros (régimen especial){ pRedBC, vBC, pICMS, vICMS, vCred } (CST 90)
ICMSOutraUFICMS debido a otra UF{ pRedBCOutraUF, vBCOutraUF, pICMSOutraUF, vICMSOutraUF }
ICMSSNEmisor del Simples Nacional{ CST: "90", indSN: 1 }

infCTeNorm — CT-e Normal (obligatorio para tpCTe=0/3)

CampoTipoDescripción
infCarga *objectInformación de la carga (tabla abajo)
infDocobjectDocumentos transportados (tabla abajo)
infModal *objectInformación del modal (tabla abajo)
docAntobjectDocumentos anteriores (subcontratación/reexpedición): { emiDocAnt[]{ CNPJ|CPF, IE, UF, xNome, idDocAnt[] } }
segarraySeguro de la carga: [{ respSeg, xSeg, CNPJ, nApol, nAver, vCarga }] — respSeg: 1=Remitente…6=Tomador
cobrobjectCobranza/facturas: { fat{ nFat, vOrig, vDesc, vLiq }, dup[]{ nDup, dVenc, vDup } }
veicNovosarrayVehículos nuevos transportados: [{ chassi, cCor, xCor, cMod, vUnit, vFrete }]
infCteSubobjectSustitución — obligatorio cuando tpCTe=3: { chCte, indAltToma, refNF, tomaICMS, tomaNaoICMS }

infCTeNorm.infCarga — Carga

CampoTipoDescripción
proPred *stringProducto predominante
vCargadecimalValor total de la carga
xOutCatstringOtras características de la carga (ej.: FRIA, GRANEL, REFRIGERADA)
vCargaAverbdecimalValor de la carga para efecto de averiguación
infQ[] *arrayCantidades — mínimo 1: [{ cUnid, tpMed, qCarga }]
infQ[].cUnidstringUnidad: "00"=M³, "01"=KG, "02"=TON, "03"=UNIDAD, "04"=LITROS, "05"=MMBTU
infQ[].tpMedstringTipo de medida (ej.: "PESO BRUTO", "PESO DECLARADO")
infQ[].qCargadecimalCantidad

infCTeNorm.infDoc — Documentos transportados

CampoTipoDescripción
infNFearrayNF-e por clave de acceso: [{ chave, PIN, dPrev, infUnidCarga[], infUnidTransp[] }] — chave con 44 dígitos
infNFarrayNotas en papel (legado): [{ mod, serie, nDoc, dEmi, vBC, vICMS, vProd, vNF, nCFOP, nPeso, … }]
infOutrosarrayOtros documentos: [{ tpDoc, descOutros, nDoc, dEmi, vDocFisc }] — tpDoc: "00"=Declaración, "10"=Ductoviario, "99"=Otros

infCTeNorm.infModal — Modales (completar solo el correspondiente a ide.modal)

ModalObjetoCampos
01 Carreterorodo{ RNTRC* } — RNTRC con 8 dígitos o "ISENTO". Opcional: occ[] (órdenes de recolección)
02 Aéreoaereo{ nMinu, nOCA, dPrevAereo, natCarga{ xDime, cInfManu[] }, tarifa{ CL, cTar, vTar }, peri[] } — dPrevAereo AAAA-MM-DD
03 Acuaviarioaquav{ vPrest, vAFRMM, xNavio, nViag, direc, irin, tpNav, balsa[], detCont[] } — direc: N/L/S/O; tpNav: 0=Interior, 1=Cabotaje
04 Ferroviarioferrov{ tpTraf, respFat, ferrEmi, vFrete, chCTeFerroOrigem, ferroEnv[] } — tpTraf: 0=Propio, 1=Mutuo, 2=Rodoferroviario, 3=Carretero
05 Ductoviarioduto{ vTar, dIni, dFim } — fechas AAAA-MM-DD
06 Multimodalmultimodal{ COTM, indNegociavel, seg[] } — indNegociavel: 0=No, 1=Sí

Todo el bloque infModal acepta versaoModal (default "4.00").

compl — Datos complementarios (opcional)

CampoTipoDescripción
xCaracAd, xCaracSer, xEmistringCaracterística adicional del transporte / del servicio / nombre del emisor
origCalc, destCalcstringMunicipio de origen / destino para cálculo del flete
xObsstringObservaciones generales
ObsCont / ObsFiscoarrayObservaciones libres del contribuyente / fisco: [{ xCampo, xTexto }]
fluxo, EntregaobjectFlujo 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.

POST/api/cte/cancel

Cancelar 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

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chCTe *stringClave de acceso del CT-e (44 dígitos)
xJust *stringJustificación del cancelamiento (mínimo 15 caracteres por exigencia de la autoridad fiscal)
nProtstringProtocolo de autorización. Opcional: cuando se omite, usa el protocolo registrado en la emisión

* Campo obligatorio.

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

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chCTe *stringClave de acceso del CT-e (44 dígitos)
infCorrecao[] *arrayCorrecciones (mínimo 1, hasta 20)
infCorrecao[].grupoAlterado *stringGrupo alterado (ej.: "ide", "rem", "dest")
infCorrecao[].campoAlterado *stringCampo alterado (ej.: "xNome")
infCorrecao[].valorAlterado *stringNuevo valor
infCorrecao[].nroItemAlteradointNú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.

POST/api/cte/consult

Consultar 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

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chCTe *stringClave de acceso del CT-e (44 dígitos)

* Campo obligatorio.

GET/api/cte/get_list

Listar 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

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)
start_create_timelongUnix timestamp en milisegundos — inicio (requiere end_create_time)
end_create_timelongUnix timestamp en milisegundos — fin
statusstringFiltrar por estado. Valores: "Success" (autorizado), "Canceled" (cancelado), "Processing" (en proceso), "Failed" (falló), "Unknown" (desconocido)

* Campo obligatorio.