> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cedarai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cross-border (Mexico) waybills

> Carta Porte data requirements for bill-of-lading calls whose origin or destination is in Mexico.

Mexican law (SAT *Carta Porte*) requires customs and tariff data on top of a standard bill of lading whenever a shipment crosses the US–Mexico border. Cedar enforces these rules during 824 application advice validation against every waybill created or updated through [`/ims/waybills/bill-of-lading`](/api-reference/create-bill-of-lading) (and every equivalent inbound EDI message). Missing or malformed data surfaces as an `816*` or `825*` error code on the resulting waybill.

## When the requirements apply

The Carta Porte data block is required when **both** of the following are true:

* `shipmentQualifier` is one of `6` (split first bill), `7` (split subordinate), `B` (single BOL), `C` (consolidated), `F` (stop-off), `M` (master BOL), `S` (submaster BOL), `W` (revenue empty).
* Exactly one of `originStation` and `destinationStation` resolves to Mexico (origin **xor** destination — pure intra-Mexico moves are currently not validated by this rule). Cedar resolves the country from `countryCode` if present, otherwise from `stateOrProvince`.

Empty, intermodal, switch, blind-memo, and company-business qualifiers (`1`, `8`, `E`, `G`, `H`, `I`, `N`, `X`) are exempt regardless of route.

## Where the data goes

Carta Porte data is attached to the **equipment**, not to the top-level `lineItems[]` array:

| Array | Schema | Purpose |
| - | - | - |
| `waybill.lineItems[]` | `LineItem` | Describes the lading commodity for the rail waybill itself. Required on every waybill, MX or not. |
| `waybill.equipmentDetails[].shipmentInfo[]` | `EquipmentShipmentInformation` | Per-equipment Carta Porte block transmitted to Mexican customs. Required only for cross-border waybills. |

The two arrays are **not** interchangeable. `waybill.lineItems[].quantity` is a nested `LineItemQuantity` object (`billedAsQuantity`, `weightQualifier`, etc.); `shipmentInfo[].lineItems[].quantity` is a flat numeric field corresponding to the X12 417 N1001 element.⁠‌​​‌​‌‌‌‌‌‌​​​​‌​‌​​‌​​​⁠ A cross-border waybill needs both populated.

When `waybillTemplateId` is set on a [`/ims/waybills/bill-of-lading`](/api-reference/create-bill-of-lading) request, Cedar merges template data with the request rather than replacing the waybill wholesale.

### `equipmentDetails[].shipmentInfo[]`

* When the request includes `commodityCode` or `commodityDescription` on a `shipmentInfo` line item, that block is taken from the request as-is (template values for that block are not merged in).
* Otherwise, template Carta Porte scaffolding (for example `referenceIdQualifier`, `referenceId`, `extendedReferenceInfo`, and commodity codes on line items) is deep-merged with the request. Request non-null fields such as `quantity`, `weight`, and `weightUnitCode` override the template at the field level.
* Omitted or null request fields do not clear template data.
* When the request includes a non-null `shipmentInfo[].lineItems[].weight`, that value is also written to the lead equipment's `netWeightLbs` and `grossWeightLbs` (converted to pounds when `weightUnitCode` is `K`).

You can send minimal request `shipmentInfo` containing only dynamic line-item fields (`quantity`, `weight`, `weightUnitCode`) and rely on the template for Carta Porte reference data and commodity codes.

### `parties[]`

* **Shipper, consignee, freight bill party, and in-care-of** (one per bill): if the request party includes any body field (name, address, city, and so on), the request owns the entire party body. Otherwise Cedar uses the template party body. `administrativeContacts`, `billingInfo`, and `referenceInfo` from the request and template are all retained — for example, a request shipper address plus template Carta Porte contacts.
* **All other party types** (for example Rule 11): every party from the request and every party from the template is kept.

## Required content of each `shipmentInfo[]` entry

For each commodity on each piece of equipment:

| Field | Required value |
| - | - |
| `referenceIdQualifier` | `UNC` — flags the entry as a UNSPSC-classified commodity. |
| `referenceId` | The UNSPSC code. Must exist in Cedar's Carta Porte reference data, otherwise validation returns `816801010CE`. |
| `extendedReferenceInfo[]` with `referenceIdQualifier = MTC` | At least one entry. `referenceId` must be a 10-digit Mexico Tariff Rate Code with no punctuation, and must exist in the reference data. |
| `lineItems[]` | At least one entry. Each entry must populate `quantity` (N1001), `weight` (N1008), `weightUnitCode` (N1007), and `smallestExteriorPackageType` (N1010). |

## Hazardous shipments

If the waybill has any `hazardousInfo[]` entries, every `shipmentInfo[]` block with `referenceIdQualifier = UNC` must additionally include at least one `extendedReferenceInfo[]` entry with `referenceIdQualifier = MHC` (Mexico SAT Hazardous Code).⁠‌​​‌​‌‌‌‌‌‌​​​​‌​‌​​‌​​​⁠ The MHC value must be prefixed with `UN` and must exist in the Carta Porte reference data.

## Required shipper contact

Cross-border waybills must include a `parties[]` entry with `partyType = SH` (shipper) that has at least one `administrativeContacts[]` entry containing all of:

* `contactFunctionCode = SP`
* a non-empty `name`
* `communicationNumbers[]` with the first entry `qualifier = TE` (telephone) and a non-empty `number`, and the second entry `qualifier = EM` (email) and a non-empty `number`

<Info>
  The same validation runs whether a waybill is created via `/ims/waybills/bill-of-lading` or arrives over EDI.⁠‌​​‌​‌‌‌‌‌‌​​​​‌​‌​​‌​​​⁠ The error codes returned in 824 application advice are identical, so the troubleshooting flow is the same regardless of source.
</Info>


## Related topics

- [API Introduction](/user-docs/api-reference/introduction.md)
- [Create bill of lading](/api-reference/create-bill-of-lading.md)
- [Update bill of lading](/api-reference/update-bill-of-lading.md)
- [Update equipment notes](/api-reference/update-equipment-notes.md)
- [List railcar inventory](/api-reference/list-railcar-inventory.md)
