[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.

FieldValue
invoice_typetransport
document_typebill of lading rail
e_invoicetrue
currencyMXN

Key Differences from Road

FeatureRoadRail
transportation_datadate_time + distancedate_time + distance + station_external_id + station_name + station_type
vehicle.categories[]Truck fieldsRailcar fields
vehicle.typeNot requiredSet to rail
Multiple transport figuresUsually 1 driverOften 1 rail company + 1 operator

Field by Field

senders[].company.transportation_data

FieldRequiredWhat to send
date_timeYesDeparture datetime ISO 8601 from the origin station.
station_external_idYesSICT station code (e.g. SLP-01). Maps to SAT NumEstacion.
station_nameYesFull station name (e.g. Estacion San Luis Potosi). Maps to SAT NombreEstacion.
station_typeYesAlways 01 for origin stations. Maps to SAT c_TipoEstacion.
distanceYesDistance in km between origin and destination stations.

beneficiaries[].company.transportation_data

FieldRequiredWhat to send
date_timeYesArrival datetime ISO 8601.
station_external_idYesSICT code of destination station.
station_nameYesDestination station name.
station_typeYesAlways 02 for destination stations.

distance is only required in senders, not in beneficiaries.

transportation_companies[]

Rail transport typically has two figures:

FiguretypeWhen to include
Rail company02 (Propietario)Always — the company that owns and operates the railway.
Operator01 (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

Set vehicle.type to rail. All attributes sent as categories[] entries.

Required fields

list valueWhat to send in codeSAT field
service typeSAT c_TipoDeServicio codeTipoDeServicio
traffic typeSAT c_TipoDeTrafico codeTipoDeTrafico
right of waySAT c_DerechosDePaso codeTipoDerechoDePaso
paid kmKilometers paid for right of way (e.g. 630)KilometrajePagado
railcar typeSAT c_TipoCarro code (e.g. BOXC for boxcar)TipoCarro
railcar plateRailcar identification numberMatriculaCarro
waybill numberRail waybill numberGuiaCarro
railcar net tonnageNet tonnage capacity of the railcarToneladasNetasCarro

Optional fields

list valueWhat to send in codeSAT field
container typeSAT c_Contenedor codeTipoContenedor
empty container weightEmpty container weight in kgPesoContenedorVacio
merchandise net weightNet weight of goods in kgPesoNetoMercancia
insurance nameInsurer nameNombreAseg
insurance policy numberPolicy numberNumPolizaSeguro

Key field explanations

right of way

SAT c_DerechosDePaso. The type of track rights used for this movement.

ValueDescription
01Own track — the carrier owns the rail line
02Interconnection — using another company's track
03Via passage — crossing through another company's track

paid km

The 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

MistakeWhat happensFix
station_type 01 on destinationSAT validation errorOrigin = 01, destination = 02
distance included in beneficiariesBrinta validation errorOnly include distance in senders
Rail company missing operatorIncomplete CFDIAlways include at least one type: "01" operator
Operator missing license number MXSAT rejects the figureAlways send both RFC and license number for operators
paid km doesn't match distanceSAT audit flagThey should match unless special billing applies
right of way missingSAT validation errorAlways required for rail transport