FiscalAPI
Carta porte: guía completa para cumplir con el SAT

Carta porte: guía completa para cumplir con el SAT

4 de abril de 2026

Si transportas mercancías por territorio mexicano y no llevas tu carta porte, te van a detener en el primer retén. No es una exageración. Desde 2022, la carta porte se volvió obligatoria para todo traslado de bienes y las multas por no portarla pueden superar los $17,000 MXN. El problema no es la regulación en sí, es que la documentación del SAT asume que ya sabes cómo funciona todo. Y no, no lo sabes. Nadie lo sabe la primera vez.

He integrado la carta porte en sistemas de logística, marketplaces y ERPs. Cada integración me enseñó algo que la guía del SAT no menciona. Aquí está todo lo que necesitas para implementarla correctamente.

Qué es la carta porte

La carta porte es un complemento del CFDI que ampara el traslado de bienes o mercancías dentro del territorio nacional. No es un documento independiente. Es un complemento que se adjunta a un CFDI de tipo Ingreso (cuando cobras por el flete) o a un CFDI de tipo Traslado (cuando mueves tu propia mercancía sin generar ingreso).

La base legal está en el artículo 29 del Código Fiscal de la Federación y en las reglas 2.7.1.9 y 2.7.1.51 de la Resolución Miscelánea Fiscal. La versión vigente del complemento es la 3.1, obligatoria desde 2024.

La carta porte aplica para transporte por carretera, ferrocarril, aéreo y marítimo. La mayoría de las integraciones que llegan a Fiscalapi son de autotransporte federal, pero el complemento cubre todos los medios.

Cuándo necesitas carta porte

No todo movimiento de mercancía requiere carta porte. La confusión viene de que el SAT define excepciones que no son obvias.

1

Transporte de mercancías por carretera federal#

Cualquier traslado de bienes que circule por tramos de jurisdicción federal requiere carta porte. Esto incluye prácticamente cualquier ruta entre estados y muchas rutas dentro del mismo estado si cruzan carreteras federales.

2

Transporte de mercancías por cuenta propia#

Si una empresa mueve su propia mercancía (no es transportista), necesita CFDI de Traslado con complemento carta porte. El dueño de la mercancía es el emisor.

3

Servicio de transporte contratado#

Cuando contratas a un transportista, el transportista emite un CFDI de Ingreso con complemento carta porte. El cobro del flete y la carta porte van en el mismo CFDI.

4

Transporte aéreo, ferroviario o marítimo#

Misma lógica. El complemento se adapta al medio de transporte con campos específicos para cada tipo de vehículo.

5

Intermediarios logísticos#

Si operas como agente de carga o intermediario, también necesitas emitir carta porte. El SAT quiere trazabilidad completa de la cadena de transporte.

No necesitas carta porte si el traslado es dentro de una zona urbana o suburbana sin cruzar carreteras federales. Tampoco la necesitas para traslados locales de bienes que no excedan los 30 km. Pero ojo: "zona urbana" tiene una definición específica del SAT que no siempre coincide con lo que tú consideras urbano. En caso de duda, emítela.

CFDI Ingreso vs CFDI Traslado con carta porte

Esta es la decisión fundamental. El tipo de CFDI depende de quién mueve la mercancía y si hay un cobro de por medio.

Quién lo emite: El transportista que cobra por el servicio de flete.

Cuándo se usa: Cuando una empresa contrata a un tercero para transportar su mercancía.

Qué incluye: El cobro del servicio de transporte (con IVA), más el complemento carta porte con todos los datos de la mercancía, origen, destino y vehículo.

Uso de CFDI: S01 (Sin Obligación Fiscal) para el receptor, o el que corresponda si el flete genera deducción.

En mi experiencia, el 70% de las cartas porte que procesamos en Fiscalapi son de este tipo. La empresa de transporte es la emisora y el dueño de la mercancía es el receptor.

Campos clave del complemento carta porte

La estructura del complemento es extensa. Estos son los campos que causan más errores en producción:

SecciónCampoDescripciónErrores comunes
UbicacionesOrigen y DestinoDirección completa con código postal del catálogo SATCP incorrecto o no del catálogo
MercancíasBienesTranspClave del producto del catálogo SATUsar clave genérica en lugar de la específica
MercancíasCantidad y PesoEnKgCantidad y peso de la mercancíaPeso no coincide con la realidad
AutotransportePermSCTTipo de permiso SCT del transportistaPermiso vencido o tipo incorrecto
AutotransporteNumPermisoSCTNúmero del permisoNúmero con formato incorrecto
AutotransporteIdentificacionVehicularPlaca y año del vehículoPlaca incorrecta o vehículo no registrado
FiguraTransporteTipoFiguraOperador, propietario o arrendadorOmitir al operador del vehículo
FiguraTransporteRFCFiguraRFC del operador/propietarioRFC no registrado en SAT

El campo de Ubicaciones requiere códigos postales del catálogo del SAT, no los códigos postales de Correos de México. Son diferentes. He visto integraciones fallar porque el código postal de la dirección fiscal del cliente no existía en el catálogo SAT. Verifica siempre contra el catálogo de códigos postales del SAT.

Flujo de emisión de carta porte

Carta porte 3.1: qué cambió

La versión 3.1 trajo cambios significativos respecto a la 3.0. Los más relevantes para desarrolladores:

La migración de 3.0 a 3.1 no fue opcional. Si tu sistema genera cartas porte, ya debería estar en 3.1. Si todavía estás en 3.0, el PAC va a rechazar tus timbrados.

Los cambios principales incluyen nuevos campos obligatorios para material peligroso, ajustes en la estructura de ubicaciones para incluir datos más específicos del domicilio, y la adición de campos para comercio exterior cuando la mercancía cruza fronteras.

También se actualizó el catálogo de claves de unidad de medida para mercancías peligrosas y se refinaron las reglas de validación para el peso bruto total vs la suma de pesos individuales.

Cómo emitir carta porte con Fiscalapi

La API de Fiscalapi maneja toda la complejidad del complemento. Tú envías los datos estructurados y Fiscalapi construye el XML, lo sella y lo timbra.

var invoice = new Invoice
{
    VersionCode = "4.0",
    InvoiceTypeCode = "T", // Traslado
    Currency = "XXX", // Sin moneda para traslado
    Total = 0,
    Issuer = new Issuer
    {
        Rfc = "TRA850101AAA",
        TaxRegimeCode = "601",
        Name = "Transportes del Norte SA de CV"
    },
    Recipient = new Recipient
    {
        Rfc = "TRA850101AAA", // Mismo RFC para traslado propio
        CfdiUseCode = "S01",
        TaxRegimeCode = "601",
        Name = "Transportes del Norte SA de CV"
    },
    CartaPorte = new CartaPorte
    {
        TranspInternac = "No",
        Ubicaciones = new List<Ubicacion>
        {
            new Ubicacion
            {
                TipoUbicacion = "Origen",
                RFCRemitenteDestinatario = "TRA850101AAA",
                FechaSalida = "2026-04-04T08:00:00",
                CodigoPostal = "45116"
            },
            new Ubicacion
            {
                TipoUbicacion = "Destino",
                RFCRemitenteDestinatario = "REC920501BBB",
                FechaLlegada = "2026-04-04T18:00:00",
                CodigoPostal = "06600"
            }
        },
        Mercancias = new Mercancias
        {
            PesoBrutoTotal = 500.00m,
            UnidadPeso = "KGM",
            Mercancia = new List<Mercancia>
            {
                new Mercancia
                {
                    BienesTransp = "25174800",
                    Descripcion = "Bombas centrifugas industriales",
                    Cantidad = 10,
                    ClaveUnidad = "H87",
                    PesoEnKg = 500.00m
                }
            },
            Autotransporte = new Autotransporte
            {
                PermSCT = "TPAF01",
                NumPermisoSCT = "000000",
                PlacaVM = "ABC1234",
                AnioModeloVM = 2024
            }
        }
    }
};

var result = await fiscpiClient.Invoices.CreateAsync(invoice);

Errores comunes y cómo resolverlos

Después de procesar miles de cartas porte, estos son los errores que veo repetirse:

Código postal no válido. El catálogo de códigos postales del SAT no incluye todos los CP de México. Algunos códigos postales nuevos o de zonas rurales no están en el catálogo. La solución es usar el CP más cercano que sí exista en el catálogo del SAT.

Peso bruto total no coincide. El campo PesoBrutoTotal debe ser mayor o igual a la suma de PesoEnKg de todas las mercancías. Si no cuadra, el PAC rechaza el timbrado. He visto esto fallar cuando se agregan mercancías después de calcular el peso total.

Permiso SCT vencido. El SAT valida que el tipo de permiso SCT coincida con el tipo de vehículo. TPAF01 es para autotransporte federal de carga general. Si usas un tipo de permiso que no corresponde al vehículo declarado, el timbrado falla sin un mensaje de error claro.

Figura de transporte omitida. Desde la versión 3.0, es obligatorio incluir al operador del vehículo con su RFC y licencia. Omitir la figura de transporte es causa de rechazo inmediato.

Preguntas frecuentes sobre carta porte

La carta porte parece compleja al principio, pero una vez que entiendes la lógica de Ingreso vs Traslado y mapeas correctamente tus datos de mercancía y transporte, el flujo es predecible. La clave está en los catálogos del SAT. Si tus códigos postales, claves de producto y permisos SCT son correctos, el timbrado pasa sin problemas. Puedes consultar la documentación técnica de Fiscalapi para ver todos los campos disponibles y sus validaciones.