[MX] Bill of Lading — Road (Carta Porte Autotransporte)

What is a Carta Porte?

A Carta Porte is a CFDI complement that certifies the legal transport of goods by road in Mexico. It is required by SAT for any movement of goods between locations. Brinta embeds the CartaPorte 3.1 complement automatically based on document_type.

FieldValue
invoice_typetransport
document_typebill of lading road
e_invoicetrue
currencyMXN

Structure Overview

Think of the Carta Porte as describing who moves what, from where to where, and in what vehicle.

ObjectWhat it representsSAT mapping
senders[]Origin locationsUbicacion (Origen)
beneficiaries[]Destination locationsUbicacion (Destino)
transportation_companies[]Drivers, owners, carriersFiguraTransporte
vehicleThe truck, permits, insuranceAutotransporte
items[].categories[]The goods being transportedMercancias/Mercancia

The issuer (Emisor) is derived automatically from supplier_company_id. Do not send it separately.


Field by Field

Root Level

export_reason

SAT field c_MotivoTraslado. Use 01 for domestic transport — goods moving within Mexico without export intent.

reason

SAT field c_UsoCFDI. Use G03 for general transport. The buyer typically provides this.


senders[] — Origin Locations

Each entry is an origin point (Ubicacion Origen). If goods are picked up from multiple locations, add one entry per location.

company.name and company.legal_name

Name of the entity at the origin — the sender or warehouse. Does not need to be the same as the invoice issuer.

company.type

ValueWhen to use
businessLegal entity sending the goods
personIndividual sending the goods

company.address

Full address of the origin location.

FieldRequiredNotes
address_line_1YesStreet and number
neighborhoodNoColonia
cityYesCity name
municipalityYesMunicipality name (e.g. Benito Juarez)
stateYesISO 3166-2 code (e.g. MX-CMX for CDMX, MX-NLE for Nuevo León)
countryYesMX
postal_codeYes5-digit Mexican postal code

company.tax_registrations

Include the RFC of the origin entity. Required by SAT.

company.transportation_data.date_time

Departure datetime from this origin location. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.

  • Maps to SAT FechaHoraSalidaLlegada.
  • Must be on or after invoice_date.

company.transportation_data.distance

Distance in kilometers from this origin to the next destination.

  • Required for origin locations only — do not include in beneficiaries.
  • Maps to SAT DistanciaRecorrida.
  • Use the actual road distance, not straight-line.

beneficiaries[] — Destination Locations

Same structure as senders[], with one key difference:

company.transportation_data.date_time

Arrival datetime at this destination. No distance field needed.


transportation_companies[] — Transport Figures

Who is physically involved in moving the goods. You can have multiple entries — one per figure type.

company.type

This field uses SAT codes, not business/person:

ValueSAT meaningWhen to send
01OperadorThe driver operating the vehicle. Always required.
02PropietarioThe owner of the vehicle (if different from the driver). Include when the truck is owned by a company, not the driver.
03ArrendadorThe lessor — company that leases the vehicle. Include when the vehicle is leased.
04NotificadoA notified party. Include when SAT or customs requires notification of a third party.

In most road transport operations, you'll send at least one 01 (driver). Add 02 if the truck is company-owned.

company.tax_registrations

For drivers (type: "01"), always include two entries:

typeWhat it is
RFCDriver's personal RFC
license number MXMexican driver's license number

For owners/companies (type: "02", "03"), include only RFC.

company.transportation_data.vehicle_type

SAT c_ParteTransporte code. Identifies which role this figure plays with respect to the vehicle.

  • 01 — the figure is associated with the main vehicle.
  • Use 01 in most cases.

vehicle — Road Vehicle

All vehicle attributes are sent as categories[] entries using list as the key and code as the value.

Required fields

list valueWhat to send in codeSAT field
vehicle configurationSAT c_ConfigAutotransporte code (e.g. C2 for 2-axle truck)ConfigVehicular
vehicle gross weightMax gross weight in tons (e.g. 15000)PesoBrutoVehicular
plateVehicle license plate (e.g. ABC-1234)PlacaVM
year model4-digit year (e.g. 2022)AnioModeloVM
insurance nameName of civil liability insurer (e.g. QUALITAS)AseguraRespCivil
insurance policy numberPolicy numberPolizaRespCivil
SICT permit typeSAT c_TipoPermiso code (e.g. TPAF10)PermSCT
SICT permit numberSICT permit numberNumPermisoSCT

Optional fields

list valueWhat to send in codeSAT field
trailer typeSAT c_SubTipoRem code (e.g. CTR005)SubTipoRem
trailer plateTrailer license platePlaca (remolque)
cargo insurance nameName of cargo insurerAseguraCarga
cargo insurance policy numberCargo policy numberPolizaCarga

items[] — Goods Being Transported

Each item represents a type of merchandise being carried. The categories[] array describes the physical properties.

amount

The declared commercial value of the goods. Use 0 if this is a purely internal transfer with no commercial value.

categories[]

Linking items to locations

When you have multiple senders or beneficiaries, you must link each item to its specific origin and destination using IDs:

list valueWhat to send in codePurpose
sender idID matching the origin (e.g. OR000001)Links this item to a specific senders[] entry
beneficiary idID matching the destination (e.g. DE000001)Links this item to a specific beneficiaries[] entry

The code values here must match an identifier you assign consistently. If you only have one sender and one beneficiary, you still need to include these fields.

Weight and classification

list valueWhat to send in codeRequiredSAT field
(no list)SAT c_ClaveProdServ product codeYesBienesTransp
unitSAT c_ClaveUnidad unit codeYesClaveUnidad
weight unitWeight unit code (always KGM for kilograms)YesUnidadPesoMerc
gross weightTotal gross weight of this itemYesPesoBruto
net weightNet weight without packagingNoPesoNeto
tare weightWeight of packagingNoPesoTara
piecesNumber of individual piecesNoNumPiezas

Full Example Payload

{
  "supplier_company_id": "{{company_id}}",
  "invoice_number": "CP001",
  "invoice_serie": "CP",
  "invoice_type": "transport",
  "document_type": "bill of lading road",
  "invoice_date": "2025-09-03",
  "export_reason": "01",
  "e_invoice": true,
  "currency": "MXN",
  "reason": "G03",
  "buyer": {
    "company": {
      "name": "CLIENTE EJEMPLO S.A. DE C.V.",
      "legal_name": "CLIENTE EJEMPLO S.A. DE C.V.",
      "type": "business",
      "address": { "address_line_1": "Av. Reforma 500", "postal_code": "06600", "country": "MX" },
      "tax_registrations": [
        { "type": "RFC", "number": "CEJ890423H71", "level": "country", "location": "MX", "status": "Regimen general" }
      ]
    }
  },
  "items": [
    {
      "name": "Electronicos varios",
      "quantity": 10,
      "unit_amount": 5000,
      "amount": 50000,
      "taxes": [
        { "amount": 8000, "name": "VAT", "rate": 0.16, "rate_type": "percentage", "adds_to_final_amount": true }
      ],
      "categories": [
        { "code": "43211500" },
        // SAT c_ClaveProdServ — no "list" field
        { "code": "E48", "list": "unit" },
        { "code": "KGM", "list": "weight unit" },
        { "code": "150.00", "list": "gross weight" },
        { "code": "140.00", "list": "net weight" },
        { "code": "10.00", "list": "tare weight" },
        { "code": "10", "list": "pieces" },
        { "code": "OR000001", "list": "sender id" },
        // Must match an identifier you use consistently for this origin
        { "code": "DE000001", "list": "beneficiary id" }
        // Must match an identifier you use consistently for this destination
      ]
    }
  ],
  "senders": [
    {
      "company": {
        "name": "REMITENTE EJEMPLO S.A. DE C.V.",
        "legal_name": "REMITENTE EJEMPLO S.A. DE C.V.",
        "type": "business",
        "address": {
          "address_line_1": "Insurgentes 1122",
          "neighborhood": "Del Valle",
          "city": "CDMX",
          "municipality": "Benito Juarez",
          "state": "MX-CMX",
          "country": "MX",
          "postal_code": "03100"
        },
        "tax_registrations": [
          { "type": "RFC", "number": "REM930215S87", "level": "country", "location": "MX" }
        ],
        "transportation_data": {
          "date_time": "2025-09-03T08:00:00",
          // Departure time from this origin
          "distance": 450.5
          // Kilometers to the next destination — road distance, not straight-line
        }
      }
    }
  ],
  "beneficiaries": [
    {
      "company": {
        "name": "DESTINATARIO EJEMPLO S.A. DE C.V.",
        "legal_name": "DESTINATARIO EJEMPLO S.A. DE C.V.",
        "type": "business",
        "address": {
          "address_line_1": "Av. Constitucion 500",
          "city": "Monterrey",
          "state": "MX-NLE",
          "country": "MX",
          "postal_code": "64000"
        },
        "tax_registrations": [
          { "type": "RFC", "number": "DES890423H71", "level": "country", "location": "MX" }
        ],
        "transportation_data": {
          "date_time": "2025-09-04T18:00:00"
          // Arrival time at destination — no "distance" field here
        }
      }
    }
  ],
  "vehicle": {
    "categories": [
      { "code": "C2", "list": "vehicle configuration" },
      // SAT c_ConfigAutotransporte — 2-axle truck
      { "code": "15000", "list": "vehicle gross weight" },
      { "code": "ABC-1234", "list": "plate" },
      { "code": "2022", "list": "year model" },
      { "code": "QUALITAS", "list": "insurance name" },
      { "code": "QUA-123456", "list": "insurance policy number" },
      { "code": "TPAF10", "list": "SICT permit type" },
      // SAT c_TipoPermiso — permit type from SICT registry
      { "code": "1234567890", "list": "SICT permit number" },
      { "code": "CTR005", "list": "trailer type" },
      { "code": "XYZ-5678", "list": "trailer plate" }
    ]
  },
  "transportation_companies": [
    {
      "company": {
        "name": "JUAN PEREZ GARCIA",
        "legal_name": "JUAN PEREZ GARCIA",
        "type": "01",
        // 01 = Operador (driver) — always required
        "address": {
          "address_line_1": "Calle Juarez 100",
          "city": "Monterrey",
          "state": "MX-NLE",
          "country": "MX",
          "postal_code": "64000"
        },
        "tax_registrations": [
          { "type": "RFC", "number": "PEGJ850312AB1", "level": "country", "location": "MX" },
          { "type": "license number MX", "number": "L-12345678", "level": "country", "location": "MX" }
          // Drivers always need both RFC and license number MX
        ],
        "transportation_data": { "vehicle_type": "01" }
      }
    }
  ]
}

Common Mistakes

MistakeWhat happensFix
sender id / beneficiary id don't match any locationSAT validation errorUse consistent IDs — the value in categories[] must correspond to your own location identifiers
distance included in beneficiariesBrinta validation errorOnly include distance in senders, not beneficiaries
Driver missing license number MXSAT rejects the figureAlways send both RFC and license number MX for type: "01"
company.type uses business instead of SAT codeIncorrect figure classificationUse 01, 02, 03, or 04 — not business/person
vehicle configuration code not in SAT catalogSAT validation errorUse official c_ConfigAutotransporte catalog values
distance in straight-line kmPossible SAT audit flagUse actual road distance in kilometers