[MX] Bill of Lading — Sea (Carta Porte Transporte Marítimo)
What is a Carta Porte Ferroviario?
A Carta Porte for rail transport certifies the legal transport of goods by train in Mexico. Required by SAT for any rail cargo movement. Brinta embeds the CartaPorte 3.1 complement automatically.
| Field | Value |
|---|---|
invoice_type | transport |
document_type | bill of lading rail |
e_invoice | true |
currency | MXN |
Key Differences from Road
| Feature | Road | Rail |
|---|---|---|
transportation_data | date_time + distance | date_time + distance + station_external_id + station_name + station_type |
vehicle.categories[] | Truck fields | Railcar fields |
vehicle.type | Not required | Set to rail |
| Multiple transport figures | Usually 1 driver | Often 1 rail company + 1 operator |
Field by Field
senders[].company.transportation_data
senders[].company.transportation_data| Field | Required | What to send |
|---|---|---|
date_time | Yes | Departure datetime ISO 8601 from the origin station. |
station_external_id | Yes | SICT station code (e.g. SLP-01). Maps to SAT NumEstacion. |
station_name | Yes | Full station name (e.g. Estacion San Luis Potosi). Maps to SAT NombreEstacion. |
station_type | Yes | Always 01 for origin stations. Maps to SAT c_TipoEstacion. |
distance | Yes | Distance in km between origin and destination stations. |
beneficiaries[].company.transportation_data
beneficiaries[].company.transportation_data| Field | Required | What to send |
|---|---|---|
date_time | Yes | Arrival datetime ISO 8601. |
station_external_id | Yes | SICT code of destination station. |
station_name | Yes | Destination station name. |
station_type | Yes | Always 02 for destination stations. |
distanceis only required insenders, not inbeneficiaries.
transportation_companies[]
transportation_companies[]Rail transport typically has two figures:
| Figure | type | When to include |
|---|---|---|
| Rail company | 02 (Propietario) | Always — the company that owns and operates the railway. |
| Operator | 01 (Operador) | When there is an individual operator assigned to the train. |
For rail companies (type: "02"), only include RFC in tax_registrations — no license number needed.
For individual operators (type: "01"), include both RFC and license number MX.
vehicle — Railcar
vehicle — RailcarSet vehicle.type to rail. All attributes sent as categories[] entries.
Required fields
list value | What to send in code | SAT field |
|---|---|---|
service type | SAT c_TipoDeServicio code | TipoDeServicio |
traffic type | SAT c_TipoDeTrafico code | TipoDeTrafico |
right of way | SAT c_DerechosDePaso code | TipoDerechoDePaso |
paid km | Kilometers paid for right of way (e.g. 630) | KilometrajePagado |
railcar type | SAT c_TipoCarro code (e.g. BOXC for boxcar) | TipoCarro |
railcar plate | Railcar identification number | MatriculaCarro |
waybill number | Rail waybill number | GuiaCarro |
railcar net tonnage | Net tonnage capacity of the railcar | ToneladasNetasCarro |
Optional fields
list value | What to send in code | SAT field |
|---|---|---|
container type | SAT c_Contenedor code | TipoContenedor |
empty container weight | Empty container weight in kg | PesoContenedorVacio |
merchandise net weight | Net weight of goods in kg | PesoNetoMercancia |
insurance name | Insurer name | NombreAseg |
insurance policy number | Policy number | NumPolizaSeguro |
Key field explanations
right of way
right of waySAT c_DerechosDePaso. The type of track rights used for this movement.
| Value | Description |
|---|---|
01 | Own track — the carrier owns the rail line |
02 | Interconnection — using another company's track |
03 | Via passage — crossing through another company's track |
paid km
paid kmThe distance in kilometers that was actually paid for the right of way. This is the billable distance, which maps to KilometrajePagado in SAT. Usually matches the distance in transportation_data.
Full Example Payload
{
"supplier_company_id": "{{company_id}}",
"invoice_type": "transport",
"document_type": "bill of lading rail",
"invoice_date": "2025-09-03",
"export_reason": "01",
"e_invoice": true,
"currency": "MXN",
"reason": "G03",
"senders": [
{
"company": {
"name": "REMITENTE EJEMPLO S.A. DE C.V.",
"type": "business",
"address": { "address_line_1": "Calle Ferrocarril 1", "state": "MX-SLP", "country": "MX", "postal_code": "78090" },
"tax_registrations": [
{ "type": "RFC", "number": "REM930215S87", "level": "country", "location": "MX" }
],
"transportation_data": {
"date_time": "2025-09-03T06:00:00",
"station_external_id": "SLP-01",
// SICT station code for origin
"station_name": "Estacion San Luis Potosi",
"station_type": "01",
// Always 01 for origin station
"distance": 630.0
}
}
}
],
"beneficiaries": [
{
"company": {
"name": "DESTINATARIO EJEMPLO S.A. DE C.V.",
"type": "business",
"address": { "address_line_1": "Blvd. Industrial 300", "state": "MX-CHH", "country": "MX", "postal_code": "32470" },
"tax_registrations": [
{ "type": "RFC", "number": "DES890423H71", "level": "country", "location": "MX" }
],
"transportation_data": {
"date_time": "2025-09-05T20:00:00",
"station_external_id": "CHH-01",
"station_name": "Estacion Chihuahua",
"station_type": "02"
// Always 02 for destination — no "distance" here
}
}
}
],
"vehicle": {
"type": "rail",
"categories": [
{ "code": "01", "list": "service type" },
// SAT c_TipoDeServicio
{ "code": "01", "list": "traffic type" },
// SAT c_TipoDeTrafico
{ "code": "01", "list": "right of way" },
// 01 = own track
{ "code": "630", "list": "paid km" },
// Billable distance in km
{ "code": "BOXC", "list": "railcar type" },
// SAT c_TipoCarro — BOXC = boxcar
{ "code": "FERR-1234", "list": "railcar plate" },
{ "code": "WB-2025-001", "list": "waybill number" },
{ "code": "90", "list": "railcar net tonnage" },
{ "code": "TC", "list": "container type" },
{ "code": "1000.00", "list": "empty container weight" },
{ "code": "99000.00", "list": "merchandise net weight" },
{ "code": "QUALITAS", "list": "insurance name" },
{ "code": "QUA-123456", "list": "insurance policy number" }
]
},
"transportation_companies": [
{
"company": {
"name": "FERROVIARIA EJEMPLO S.A. DE C.V.",
"type": "02",
// 02 = Propietario — the rail company
"address": { "address_line_1": "Av. Insurgentes Sur 1000", "state": "MX-CMX", "country": "MX", "postal_code": "03100" },
"tax_registrations": [
{ "type": "RFC", "number": "FEJ020101CD3", "level": "country", "location": "MX" }
// Rail company — RFC only, no license number
],
"transportation_data": { "vehicle_type": "01" }
}
},
{
"company": {
"name": "CARLOS ROMERO HERNANDEZ",
"type": "01",
// 01 = Operador — the individual train operator
"address": { "address_line_1": "Calle Juarez 55", "state": "MX-SLP", "country": "MX", "postal_code": "78000" },
"tax_registrations": [
{ "type": "RFC", "number": "ROHC750820EF5", "level": "country", "location": "MX" },
{ "type": "license number MX", "number": "L-98765432", "level": "country", "location": "MX" }
// Operator — needs both RFC and license number MX
],
"transportation_data": { "vehicle_type": "01" }
}
}
]
}Common Mistakes
| Mistake | What happens | Fix |
|---|---|---|
station_type 01 on destination | SAT validation error | Origin = 01, destination = 02 |
distance included in beneficiaries | Brinta validation error | Only include distance in senders |
| Rail company missing operator | Incomplete CFDI | Always include at least one type: "01" operator |
Operator missing license number MX | SAT rejects the figure | Always send both RFC and license number for operators |
paid km doesn't match distance | SAT audit flag | They should match unless special billing applies |
right of way missing | SAT validation error | Always required for rail transport |
Updated 3 days ago
