Carta Porte 3.1
Attach a carta_porte object to a type I or T invoice to include the Complemento Carta Porte 3.1 for road transport. It is rejected on any other type.
Add carta_porte as a top-level key in the standard POST /v1/issued-invoices request body alongside items, issuer, receiver, etc. See Issue an invoice for the base fields.
Example (type T)
{
"entity_id": "9b1c0e2a-4d3f-4a1b-8c2d-1e2f3a4b5c6d",
"type": "T",
"issuer": { "fiscal_regime": "601", "place_of_issue": "06600" },
"receiver": {
"rfc": "XAXX010101000",
"name": "PUBLICO EN GENERAL",
"postal_code": "06600",
"fiscal_regime": "616",
"cfdi_use": "S01"
},
"payment_form": "99",
"payment_method": "PUE",
"currency": "MXN",
"items": [
{
"product_code": "78101800",
"unit_code": "E48",
"description": "Road freight transport services",
"quantity": 1,
"unit_price": 0.00,
"tax_object": "01"
}
],
"carta_porte": {
"international": false,
"total_distance": 450,
"locations": [
{
"kind": "origin",
"rfc": "XOXX010101000",
"datetime": "2026-07-01T08:00:00",
"address": {
"street": "Av. Industria 100",
"postal_code": "64000",
"state": "NL",
"municipality": "Monterrey"
}
},
{
"kind": "destination",
"rfc": "EKU9003173C9",
"datetime": "2026-07-01T16:00:00",
"distance": 450,
"address": {
"postal_code": "06600",
"state": "CDMX"
}
}
],
"goods": {
"gross_weight": 5000,
"weight_unit": "KGM",
"items": [
{
"product_code": "24112000",
"description": "Industrial machinery parts",
"quantity": 10,
"unit_code": "H87",
"weight_kg": 5000,
"hazardous": false
}
]
},
"transport": {
"permit_type": "TPAF01",
"permit_number": "1234567890",
"vehicle": {
"config": "VL",
"plate": "ABC1234",
"year": 2022,
"gross_weight": 8000
},
"insurance": {
"liability_insurer": "SEGUROS ATLAS SA",
"liability_policy": "MXP-0001234"
}
},
"operator": {
"name": "Juan Pérez López",
"rfc": "PELJ850312H45",
"license": "D12345678"
}
}
}
Field reference
Root carta_porte fields
| Field |
Type |
Required |
Description |
carta_porte.international |
boolean |
no |
true for international transport. Defaults to false. |
carta_porte.total_distance |
number |
yes |
Total route distance in kilometres (TotalDistRec). Must be ≥ 0. |
carta_porte.locations |
array |
yes |
Route locations (Ubicaciones). Minimum 2. Must include at least one origin and one destination. |
carta_porte.goods |
object |
yes |
Goods being transported (Mercancias). |
carta_porte.transport |
object |
yes |
Vehicle and transport data (Autotransporte). |
carta_porte.operator |
object |
yes |
Driver / operator data (Operadores). |
Locations (carta_porte.locations[])
| Field |
Type |
Required |
Description |
locations[].kind |
string |
yes |
origin (Origen) or destination (Destino). |
locations[].rfc |
string |
yes |
RFC of the origin/destination party, 12–13 characters. |
locations[].datetime |
string |
yes |
Scheduled departure/arrival datetime, ISO 8601 (e.g. 2026-07-01T08:00:00). |
locations[].distance |
number |
no |
Distance from the previous location in km (DistanciaRecorrida). Must be ≥ 0. Typically omitted on origin. |
locations[].address |
object |
yes |
Address of the location. |
locations[].address.street |
string |
no |
Street name and number. |
locations[].address.postal_code |
string |
yes |
Postal code (CodigoPostal). |
locations[].address.state |
string |
yes |
SAT c_Estado code (e.g. NL, CDMX, JAL). |
locations[].address.country |
string |
no |
SAT c_Pais code. Defaults to MEX. Required for international transport. |
locations[].address.municipality |
string |
no |
Municipality name. |
locations[].address.locality |
string |
no |
Locality name. |
locations[].address.neighborhood |
string |
no |
Neighborhood / colonia. |
Goods (carta_porte.goods)
| Field |
Type |
Required |
Description |
goods.gross_weight |
number |
yes |
Total gross weight (PesoTotalMercancias). Must be ≥ 0. |
goods.weight_unit |
string |
no |
SAT c_ClaveUnidadPeso code (e.g. KGM). Defaults to KGM. |
goods.items |
array |
yes |
Individual cargo items (Mercancia). Minimum 1. |
goods.items[].product_code |
string |
yes |
SAT goods code (BienesTransp, catalog c_ClaveProdServCP). |
goods.items[].description |
string |
yes |
Goods description. |
goods.items[].quantity |
number |
yes |
Quantity. Must be > 0.000001. |
goods.items[].unit_code |
string |
yes |
SAT unit code (ClaveUnidad). |
goods.items[].weight_kg |
number |
yes |
Weight in kilograms (PesoEnKg). Must be ≥ 0. |
goods.items[].hazardous |
boolean |
no |
true if goods are hazardous. Defaults to false. |
Transport (carta_porte.transport)
| Field |
Type |
Required |
Description |
transport.permit_type |
string |
yes |
SCT permit type (PermSCT, catalog c_TipoPermiso). E.g. TPAF01. |
transport.permit_number |
string |
yes |
SCT permit number (NumPermisoSCT). |
transport.vehicle |
object |
yes |
Vehicle data (IdentificacionVehicular). |
transport.vehicle.config |
string |
yes |
Vehicle configuration (ConfigVehicular, catalog c_ConfigAutotransporte). E.g. VL. |
transport.vehicle.plate |
string |
yes |
Vehicle plate number (PlacaVM). |
transport.vehicle.year |
integer |
yes |
Vehicle model year (AnioModeloVM). |
transport.vehicle.gross_weight |
number |
yes |
Vehicle gross weight in tonnes (PesoVehiculoCarga). Must be ≥ 0. |
transport.insurance |
object |
yes |
Civil liability insurance (Seguros). |
transport.insurance.liability_insurer |
string |
yes |
Insurer name (AseguraRespCivil). |
transport.insurance.liability_policy |
string |
yes |
Policy number (PolizaRespCivil). |
Operator (carta_porte.operator)
| Field |
Type |
Required |
Description |
operator.name |
string |
yes |
Full legal name of the driver (Nombre). |
operator.rfc |
string |
no |
Operator RFC, 12–13 characters. |
operator.license |
string |
no |
Driver's licence number (NumLicencia). |
Related pages