[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.
| Field | Value |
|---|---|
invoice_type | transport |
document_type | bill of lading road |
e_invoice | true |
currency | MXN |
Structure Overview
Think of the Carta Porte as describing who moves what, from where to where, and in what vehicle.
| Object | What it represents | SAT mapping |
|---|---|---|
senders[] | Origin locations | Ubicacion (Origen) |
beneficiaries[] | Destination locations | Ubicacion (Destino) |
transportation_companies[] | Drivers, owners, carriers | FiguraTransporte |
vehicle | The truck, permits, insurance | Autotransporte |
items[].categories[] | The goods being transported | Mercancias/Mercancia |
The issuer (
Emisor) is derived automatically fromsupplier_company_id. Do not send it separately.
Field by Field
Root Level
export_reason
export_reasonSAT field c_MotivoTraslado. Use 01 for domestic transport — goods moving within Mexico without export intent.
reason
reasonSAT field c_UsoCFDI. Use G03 for general transport. The buyer typically provides this.
senders[] — Origin Locations
senders[] — Origin LocationsEach 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
company.name and company.legal_nameName of the entity at the origin — the sender or warehouse. Does not need to be the same as the invoice issuer.
company.type
company.type| Value | When to use |
|---|---|
business | Legal entity sending the goods |
person | Individual sending the goods |
company.address
company.addressFull address of the origin location.
| Field | Required | Notes |
|---|---|---|
address_line_1 | Yes | Street and number |
neighborhood | No | Colonia |
city | Yes | City name |
municipality | Yes | Municipality name (e.g. Benito Juarez) |
state | Yes | ISO 3166-2 code (e.g. MX-CMX for CDMX, MX-NLE for Nuevo León) |
country | Yes | MX |
postal_code | Yes | 5-digit Mexican postal code |
company.tax_registrations
company.tax_registrationsInclude the RFC of the origin entity. Required by SAT.
company.transportation_data.date_time
company.transportation_data.date_timeDeparture 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
company.transportation_data.distanceDistance 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
beneficiaries[] — Destination LocationsSame structure as senders[], with one key difference:
company.transportation_data.date_time
company.transportation_data.date_timeArrival datetime at this destination. No distance field needed.
transportation_companies[] — Transport Figures
transportation_companies[] — Transport FiguresWho is physically involved in moving the goods. You can have multiple entries — one per figure type.
company.type
company.typeThis field uses SAT codes, not business/person:
| Value | SAT meaning | When to send |
|---|---|---|
01 | Operador | The driver operating the vehicle. Always required. |
02 | Propietario | The owner of the vehicle (if different from the driver). Include when the truck is owned by a company, not the driver. |
03 | Arrendador | The lessor — company that leases the vehicle. Include when the vehicle is leased. |
04 | Notificado | A 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). Add02if the truck is company-owned.
company.tax_registrations
company.tax_registrationsFor drivers (type: "01"), always include two entries:
type | What it is |
|---|---|
RFC | Driver's personal RFC |
license number MX | Mexican driver's license number |
For owners/companies (type: "02", "03"), include only RFC.
company.transportation_data.vehicle_type
company.transportation_data.vehicle_typeSAT c_ParteTransporte code. Identifies which role this figure plays with respect to the vehicle.
01— the figure is associated with the main vehicle.- Use
01in most cases.
vehicle — Road Vehicle
vehicle — Road VehicleAll vehicle attributes are sent as categories[] entries using list as the key and code as the value.
Required fields
list value | What to send in code | SAT field |
|---|---|---|
vehicle configuration | SAT c_ConfigAutotransporte code (e.g. C2 for 2-axle truck) | ConfigVehicular |
vehicle gross weight | Max gross weight in tons (e.g. 15000) | PesoBrutoVehicular |
plate | Vehicle license plate (e.g. ABC-1234) | PlacaVM |
year model | 4-digit year (e.g. 2022) | AnioModeloVM |
insurance name | Name of civil liability insurer (e.g. QUALITAS) | AseguraRespCivil |
insurance policy number | Policy number | PolizaRespCivil |
SICT permit type | SAT c_TipoPermiso code (e.g. TPAF10) | PermSCT |
SICT permit number | SICT permit number | NumPermisoSCT |
Optional fields
list value | What to send in code | SAT field |
|---|---|---|
trailer type | SAT c_SubTipoRem code (e.g. CTR005) | SubTipoRem |
trailer plate | Trailer license plate | Placa (remolque) |
cargo insurance name | Name of cargo insurer | AseguraCarga |
cargo insurance policy number | Cargo policy number | PolizaCarga |
items[] — Goods Being Transported
items[] — Goods Being TransportedEach item represents a type of merchandise being carried. The categories[] array describes the physical properties.
amount
amountThe declared commercial value of the goods. Use 0 if this is a purely internal transfer with no commercial value.
categories[]
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 value | What to send in code | Purpose |
|---|---|---|
sender id | ID matching the origin (e.g. OR000001) | Links this item to a specific senders[] entry |
beneficiary id | ID matching the destination (e.g. DE000001) | Links this item to a specific beneficiaries[] entry |
The
codevalues 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 value | What to send in code | Required | SAT field |
|---|---|---|---|
| (no list) | SAT c_ClaveProdServ product code | Yes | BienesTransp |
unit | SAT c_ClaveUnidad unit code | Yes | ClaveUnidad |
weight unit | Weight unit code (always KGM for kilograms) | Yes | UnidadPesoMerc |
gross weight | Total gross weight of this item | Yes | PesoBruto |
net weight | Net weight without packaging | No | PesoNeto |
tare weight | Weight of packaging | No | PesoTara |
pieces | Number of individual pieces | No | NumPiezas |
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
| Mistake | What happens | Fix |
|---|---|---|
sender id / beneficiary id don't match any location | SAT validation error | Use consistent IDs — the value in categories[] must correspond to your own location identifiers |
distance included in beneficiaries | Brinta validation error | Only include distance in senders, not beneficiaries |
Driver missing license number MX | SAT rejects the figure | Always send both RFC and license number MX for type: "01" |
company.type uses business instead of SAT code | Incorrect figure classification | Use 01, 02, 03, or 04 — not business/person |
vehicle configuration code not in SAT catalog | SAT validation error | Use official c_ConfigAutotransporte catalog values |
distance in straight-line km | Possible SAT audit flag | Use actual road distance in kilometers |
Updated 3 days ago
