ipsofacturaHablar con Ventas →
← Blog
Carta PorteAPI

Complemento Carta Porte en tu API: de cero a timbrado sin morir en el intento

11 Ago 2026|10 min de lectura

Imagina que tienes un sistema de logística funcionando perfecto. Facturas, pagos, rutas. Todo tranquilo. Entonces el SAT decide que cada vez que se mueva mercancía en territorio nacional, el transportista debe adjuntar un complemento especial al CFDI: el Complemento Carta Porte. Y de repente tu XML que antes timbraba sin problemas empieza a regresar errores que ni Google sabe explicar bien.

Si estás en ese punto, este artículo es para ti.


Primero lo primero: ¿qué es el Complemento Carta Porte?

El Complemento Carta Porte es una extensión del CFDI 4.0 que documenta el traslado de mercancías. No reemplaza a la factura: se adjunta a ella como un complemento que detalla exactamente qué se transporta, desde dónde, hacia dónde, en qué vehículo y con qué operador.

El SAT lo introdujo para tener trazabilidad fiscal del movimiento de bienes en México. Si un camión carga mercancía sin este complemento, tanto el transportista como el dueño de la carga se exponen a multas y retención de la mercancía en carretera.

¿Quién lo necesita?

  • Empresas de transporte de carga federal
  • Negocios que mueven su propia mercancía en vehículos propios (distribución, retail, manufactura)
  • Cualquier operación donde haya traslado físico de bienes entre ubicaciones distintas

Si tu sistema genera CFDIs para alguno de estos casos, necesitas integrar el Complemento Carta Porte.


¿Cómo funciona en la práctica?

Antes de tocar una sola línea de código, vale la pena entender el flujo de negocio:

  1. Un transportista va a mover mercancía del punto A al punto B
  2. Antes de salir, se genera un CFDI de tipo Traslado (o Ingreso si hay cobro por el flete) con el Complemento Carta Porte adjunto
  3. El CFDI se timbra con el PAC y se obtiene el folio fiscal
  4. El operador lleva ese CFDI (en XML o en PDF con código QR) como su "carta de porte" digital
  5. Si lo detienen en carretera, el inspector de la SCT puede verificar el folio en el portal del SAT

El complemento no es solo burocracia: es el documento que le dice a cualquier autoridad en el camino qué hay en ese camión, de quién es, y que todo está en regla fiscalmente.


La versión vigente: Carta Porte 3.1

A partir de 2024, la versión oficial es la 3.1. Si tu integración todavía usa el namespace de la versión 3.0 (http://www.sat.gob.mx/CartaPorte30), el PAC la rechazará con el error CO1001.

El primer lugar donde esto se nota es en el namespace del XML. El nodo raíz de tu CFDI debe declarar el complemento así:

<cfdi:Comprobante
  xmlns:cfdi="http://www.sat.gob.mx/cfd/4"
  xmlns:cartaporte31="http://www.sat.gob.mx/CartaPorte31"
  xsi:schemaLocation="
    http://www.sat.gob.mx/cfd/4 cfdv40.xsd
    http://www.sat.gob.mx/CartaPorte31 CartaPorte31.xsd">

Hay un detalle que atrapa a casi todos en la primera integración: ese xmlns:cartaporte31 debe ir en el nodo raíz <cfdi:Comprobante>, no en el nodo <cfdi:Complemento>. Si lo pones en el lugar equivocado, recibes el error CO1002 y el mensaje no deja muy claro dónde está el problema.


La anatomía del complemento

El Complemento Carta Porte tiene una estructura jerárquica. No es un nodo plano de atributos: es un árbol que describe el viaje completo.

CartaPorte (Version="3.1")
  ├── Ubicaciones
  │     └── Ubicacion × 2 o más   ← origen, destino, y escales intermedias
  ├── Mercancias
  │     └── Mercancia × 1 o más   ← qué se transporta
  ├── Autotransporte               ← si el medio es carretera
  │     ├── IdentificacionVehicular
  │     ├── Seguros
  │     └── Remolques
  └── FiguraTransporte
        └── TiposFigura            ← operador, propietario, arrendador

Para transporte marítimo, aéreo o ferroviario, el nodo Autotransporte se reemplaza por TransporteMaritimo, TransporteAereo o TransporteFerroviario según corresponda.

Los atributos que más duelen si se equivocan

El nodo raíz CartaPorte tiene atributos obligatorios que no son obvios:

AtributoEjemploPor qué importa
Version"3.1"Nunca "3.0". Siempre "3.1"
TranspInternac"No"Si es "Sí", activas validaciones adicionales de comercio exterior
PesoBrutoTotal"1500.000"Suma del peso de toda la mercancía declarada
UnidadPeso"KGM"Del catálogo c_ClaveUnidadPeso. KGM = kilogramos
NumTotalMercancias"3"Debe coincidir exactamente con los nodos Mercancia que declares

Ubicaciones: origen y destino

Se necesitan mínimo dos nodos Ubicacion: uno de origen (TipoUbicacion="Origen") y uno de destino (TipoUbicacion="Destino"). Cada uno lleva el RFC de quien remite o recibe, y el domicilio fiscal.

<cartaporte31:Ubicacion
  TipoUbicacion="Origen"
  IDUbicacion="OR000001"
  RFCRemitenteDestinatario="ABC010101XYZ"
  NombreRemitenteDestinatario="Empresa Origen SA de CV"
  FechaHoraSalidaLlegada="2025-08-07T08:00:00"
  DistanciaRecorrida="320">
  <cartaporte31:Domicilio
    Calle="Av. Industrial"
    NumeroExterior="100"
    Municipio="Monterrey"
    Estado="NLE"
    Pais="MEX"
    CodigoPostal="64000"/>
</cartaporte31:Ubicacion>

Lo nuevo en la versión 3.1: regímenes aduaneros

La diferencia estructural más importante entre 3.0 y 3.1 es el nuevo nodo RegimenesAduaneros. Permite declarar hasta 10 regímenes aduaneros por Carta Porte, algo que antes era imposible.

Esto es relevante para operaciones de importación temporal, maquila o tránsito internacional. Los valores del catálogo c_RegimenAduanero más usados son:

ClaveDescripción
IMDImportación definitiva
EXDExportación definitiva
ITRImportación temporal para retorno en mismo estado
ITEImportación temporal para elaboración o transformación
TRATránsito

Si tu operación no involucra comercio exterior, este nodo es opcional y puedes ignorarlo.


Un problema que nadie menciona: los catálogos que cambian

Los catálogos del SAT no son estáticos. El SAT los actualiza periódicamente y si tu sistema usa una copia desactualizada, el PAC rechaza el CFDI aunque el XML esté perfectamente formado.

El campo más afectado es c_NumAutorizacionNaviero (para transporte marítimo). Solo en los últimos meses:

  • Noviembre 2025: Se agregaron 26 nuevos códigos de autorización con sufijo /2025
  • Enero 2026: 14 códigos adicionales

Si tienes catálogos hardcodeados, un envío marítimo puede fallar de la nada porque el código de naviero que usabas ya no aparece en la versión más reciente. La solución es refrescar los catálogos al menos una vez al mes desde el repositorio oficial.


Los errores más comunes y cómo resolverlos

Después de revisar integraciones fallidas, estos son los cinco problemas que aparecen una y otra vez:

ErrorQué significa en la prácticaCómo resolverlo
301El XML no pasa la validación del XSDValida localmente contra el esquema antes de enviar al PAC
CO1001Namespace del complemento no reconocidoAsegúrate de usar cartaporte31, no cartaporte30
CO1002Namespace declarado en el lugar equivocadoMover xmlns:cartaporte31 al nodo raíz <cfdi:Comprobante>
CO1003URL del esquema faltanteAgregar la URL de CartaPorte31.xsd al xsi:schemaLocation del nodo raíz
Valor de catálogo inválidoCampo con un valor que ya no existe en el catálogo SATActualizar copia local de catálogos

Antes de enviar a timbrado: tu checklist

  • ☐ El namespace xmlns:cartaporte31 está en <cfdi:Comprobante>, no en <cfdi:Complemento>
  • Version="3.1" en el nodo raíz del complemento
  • xsi:schemaLocation incluye la URL del esquema CartaPorte31.xsd
  • ☐ Hay mínimo 2 nodos Ubicacion (un origen y un destino)
  • NumTotalMercancias coincide con la cantidad de nodos Mercancia
  • FechaHoraSalidaLlegada en formato YYYY-MM-DDTHH:mm:ss
  • ☐ Catálogos actualizados
¿Listo para automatizar?

Empieza a timbrar en menos de 2 horas.

Primeros 100 timbres sin costo. Sandbox listo. Sin contrato anual.

Hablar con Ventas →

Más artículos

8 min · API
Cómo integrar una API de facturación SAT en tu sistema
5 min · CFDI
¿Qué es el timbrado de CFDI 4.0? Guía completa