Skip to content
Build 8b0b16e

Amazon B2B — the 850, the 940, and what we send Cirro

Proof exercise — real prod order, nothing wired

PO 89GQASZX · OMS ORD225299 · Amazon (Vendor Central US) · pulled 2026-06-02. POs and SKUs are real — this is an internal page. Part of CI-240 (XB → Cirro B2B migration). Raw 850/940 archived in the camel repo at reference/cirro/edi-samples/. See the Overview for the cross-vendor structure, the three data gaps, and the open questions for Cirro.


The 850 — Purchase Order

Header verbatim; 137 line items, all the identical shape, so the middle is elided (full file in edi-samples/).

<?xml version="1.0" encoding="UTF-8"?>
<PurchaseOrders ...><PurchaseOrder>
    <Header>
        <OrderHeader>
            <TradingPartnerId>080ALLPOPSOCKET</TradingPartnerId>
            <PurchaseOrderNumber>89GQASZX</PurchaseOrderNumber>
            <TsetPurposeCode>00</TsetPurposeCode>
            <PurchaseOrderTypeCode>NE</PurchaseOrderTypeCode>
            <PurchaseOrderDate>2026-05-28</PurchaseOrderDate>
            <ShipCompleteCode>N</ShipCompleteCode>
        </OrderHeader>
        <Date><DateTimeQualifier1>064</DateTimeQualifier1><Date1>2026-05-29</Date1></Date>
        <Date><DateTimeQualifier1>063</DateTimeQualifier1><Date1>2026-06-03</Date1></Date>
        <Address>
            <AddressTypeCode>ST</AddressTypeCode>
            <LocationCodeQualifier>15</LocationCodeQualifier>
            <AddressLocationNumber>9914900</AddressLocationNumber>
        </Address>
        <Reference><ReferenceQual>CR</ReferenceQual><ReferenceID>POQIT</ReferenceID></Reference>
        <Miscellaneous><Description1>INTERCHANGE</Description1><Description2>000040091</Description2></Miscellaneous>
        <Miscellaneous><Description1>FUNCTIONALGROUP</Description1><Description2>40091</Description2></Miscellaneous>
        <Miscellaneous><Description1>TRANSACTION</Description1><Description2>0001</Description2></Miscellaneous>
    </Header>
    <LineItems>
        <LineItem><OrderLine>
            <LineSequenceNumber>1</LineSequenceNumber>
            <VendorPartNumber>801330</VendorPartNumber>
            <OrderQty>8</OrderQty>
            <OrderQtyUOM>EA</OrderQtyUOM>
            <UnitPrice>0.93</UnitPrice>
            <UnitPriceBasis>PE</UnitPriceBasis>
        </OrderLine></LineItem>
        <LineItem><OrderLine>
            <LineSequenceNumber>2</LineSequenceNumber>
            <VendorPartNumber>801937</VendorPartNumber>
            <OrderQty>8</OrderQty>
            <OrderQtyUOM>EA</OrderQtyUOM>
            <UnitPrice>18.74</UnitPrice>
            <UnitPriceBasis>PE</UnitPriceBasis>
        </OrderLine></LineItem>
        <LineItem><OrderLine>
            <LineSequenceNumber>3</LineSequenceNumber>
            <VendorPartNumber>801570</VendorPartNumber>
            <OrderQty>12</OrderQty>
            <OrderQtyUOM>EA</OrderQtyUOM>
            <UnitPrice>14.51</UnitPrice>
            <UnitPriceBasis>PE</UnitPriceBasis>
        </OrderLine></LineItem>

        <!-- ... lines 4–136 omitted, identical shape ... -->

        <LineItem><OrderLine>
            <LineSequenceNumber>137</LineSequenceNumber>
            <VendorPartNumber>704001</VendorPartNumber>
            <OrderQty>1</OrderQty>
            <OrderQtyUOM>EA</OrderQtyUOM>
            <UnitPrice>30</UnitPrice>
            <UnitPriceBasis>PE</UnitPriceBasis>
        </OrderLine></LineItem>
    </LineItems>
    <Summary>
        <TotalLineItemNumber>137</TotalLineItemNumber>
        <TotalQuantity>717</TotalQuantity>
    </Summary>
</PurchaseOrder>
</PurchaseOrders>

The 940 — Warehouse Shipping Order

Complete (pretty-printed for reading; raw single-line file in edi-samples/). 29 line items.

<WarehouseShippingOrders ...><WarehouseShippingOrder>
  <Header>
    <OrderHeader>
      <TradingPartnerId>CIRRO-AMZ</TradingPartnerId>
      <DepositorOrderNumber>ORD225299</DepositorOrderNumber>
      <RecordType>HO</RecordType>
      <DepositorPurchaseOrderNumber>89GQASZX</DepositorPurchaseOrderNumber>
      <OrderStatusCode>N</OrderStatusCode>
      <PurchaseOrderTypeCode>NE</PurchaseOrderTypeCode>
      <ShipmentMethodOfPayment>0</ShipmentMethodOfPayment>
      <CarrierTransMethodCode>L</CarrierTransMethodCode>
      <CarrierRouting>ROUTEGUIDE</CarrierRouting>
      <CarrierAlphaCode>AMAZ</CarrierAlphaCode>
    </OrderHeader>
    <Reference><ReferenceQual>L1</ReferenceQual><ReferenceID>MARKET</ReferenceID></Reference>
    <Reference><ReferenceQual>PD</ReferenceQual></Reference>
    <Reference><ReferenceQual>SE</ReferenceQual></Reference>
    <Reference><ReferenceQual>IA</ReferenceQual></Reference>
    <Reference><ReferenceQual>PH</ReferenceQual><ReferenceID>C00206</ReferenceID></Reference>
    <Reference><ReferenceQual>CO</ReferenceQual><ReferenceID>89GQASZX</ReferenceID></Reference>
    <Reference><ReferenceQual>SI</ReferenceQual><ReferenceID>ORD225299</ReferenceID></Reference>
    <Reference><ReferenceQual>LU</ReferenceQual><ReferenceID>080ALLPOPSOCKET</ReferenceID></Reference>
    <Reference><ReferenceQual>ST</ReferenceQual><ReferenceID>9914900</ReferenceID></Reference>
    <Reference><ReferenceQual>CR</ReferenceQual><ReferenceID>POQIT</ReferenceID></Reference>
    <Date><DateTimeQualifier1>02</DateTimeQualifier1><Date1>20260529</Date1></Date>
    <Date><DateTimeQualifier1>04</DateTimeQualifier1><Date1>20260528</Date1></Date>
    <Date><DateTimeQualifier1>10</DateTimeQualifier1><Date1>20260603</Date1></Date>
    <Date><DateTimeQualifier1>68</DateTimeQualifier1><Date1>20260529</Date1></Date>
    <Contact><ContactTypeCode>IC</ContactTypeCode></Contact>
    <Address>
      <AddressTypeCode>ST</AddressTypeCode>
      <LocationCodeQualifier>15</LocationCodeQualifier>
      <AddressLocationNumber>9914900</AddressLocationNumber>
      <AddressName>Amazon.com Services LLC-TEB9</AddressName>
      <Address1>601 Randolph Road</Address1>
      <City>SOMERSET</City><State>NJ</State><PostalCode>08873</PostalCode><Country>US</Country>
    </Address>
    <Address>
      <AddressTypeCode>SF</AddressTypeCode>
      <AddressName>CIRRO-Amazon Virtual Fulfilment</AddressName>
      <Address1>171 Marcellin Dr.</Address1>
      <City>City of Industry</City><State>CA</State><PostalCode>91789</PostalCode><Country>US</Country>
    </Address>
    <Address>
      <AddressTypeCode>VN</AddressTypeCode>
      <AddressName>PopSockets LLC</AddressName>
      <Address1>100 Technology Drive</Address1><Address2>Ste 250</Address2>
      <City>BROOMFIELD</City><State>CO</State><PostalCode>80021</PostalCode><Country>US</Country>
    </Address>
    <Address>
      <AddressTypeCode>BY</AddressTypeCode>
      <AddressName>Amazon Vendor Central US</AddressName>
      <Address1>PO Box 84394</Address1>
      <City>Seattle</City><State>WA</State><PostalCode>98124-5694</PostalCode><Country>US</Country>
    </Address>
  </Header>
  <LineItems>
    <LineItem><OrderLine>
      <LineSequenceNumber>1</LineSequenceNumber>
      <VendorPartNumber>801330</VendorPartNumber>
      <PartDescription1>PT-Aviary-BK</PartDescription1>
      <OrderQty>8.00</OrderQty><OrderQtyUOM>EA</OrderQtyUOM>
      <UnitWeight>0.00</UnitWeight><Amount1>0.93</Amount1>
    </OrderLine></LineItem>
    <LineItem><OrderLine>
      <LineSequenceNumber>2</LineSequenceNumber>
      <VendorPartNumber>801937</VendorPartNumber>
      <PartDescription1>PW+-Black-BK BK</PartDescription1>
      <OrderQty>8.00</OrderQty><OrderQtyUOM>EA</OrderQtyUOM>
      <UnitWeight>0.00</UnitWeight><Amount1>18.74</Amount1>
    </OrderLine></LineItem>

    <!-- ... 27 more line items, identical shape ... -->

    <LineItem><OrderLine>
      <LineSequenceNumber>120</LineSequenceNumber>
      <VendorPartNumber>809440</VendorPartNumber>
      <PartDescription1>PWKO+ MS-Nightshade-TBK</PartDescription1>
      <OrderQty>8.00</OrderQty><OrderQtyUOM>EA</OrderQtyUOM>
      <UnitWeight>0.00</UnitWeight><Amount1>37.50</Amount1>
    </OrderLine></LineItem>
  </LineItems>
  <Summary><TotalOrders>118.00</TotalOrders></Summary>
</WarehouseShippingOrder></WarehouseShippingOrders>

What we send Cirro today (real payload)

This is the actual create-b2b payload we sent for this order, pulled from prod (fulfillment_tracking id 567, integration_int_service_sys_prod). Amazon is packing_type: 2 (prepack), so the order ships as Cirro-planned cartons — items is empty and the SKUs live inside carton_list[].product_list.

{
  "request_id":   "b2b-ORD225299-1748xxxxxx",
  "request_time": "1748xxxxxx",
  "request_data": {
    "verify": 0,
    "reference_no": "89GQASZX",
    "order_desc":   "ORD225299",
    "warehouse_code": "USWE",
    "shipping_method": "PPS_PENDING_ROUTING",
    "packing_type": 2,
    "consignee_info": {
      "name": "Amazon.com Services LLC-TEB9",
      "company": "Amazon.com Services LLC-TEB9",
      "address1": "601 Randolph Road",
      "city": "SOMERSET", "province": "NJ", "zipcode": "08873", "country": "US",
      "locationNumber": "9914900", "doorplate": "9914900",
      "buyer_id": "amazonvendorcentralus"
    },
    "carton_info": {
      "box_mark_num": 1,
      "is_change_label": 0,
      "change_label_qty_piece": 0,
      "labelling_requirement": 0,
      "is_ukca_gpsr_label": 0
    },
    "carton_list": [
      {
        "carton_no": "JH-EL601-20260530-0017-1",
        "product_list": [
          { "product_sku": "806922", "quantity": 2 },
          { "product_sku": "804844", "quantity": 4 },
          { "product_sku": "801330", "quantity": 8 }
          /* … 29 SKUs in this one (mixed) carton … */
        ]
      }
    ],
    "items": null
  }
}

Source of every field

Where each value comes from. Legend — 940: a tag on the 940 XML above · Config: Spring Config Server key · Cirro: comes back from Cirro's prepack plan_order response · Generated: built by cm-edi-prc at send time · Constant: hard-coded · Derived: computed from order data.

Field This order Source
request_id b2b-ORD225299-… Generated"b2b-" + orderId + "-" + epoch
request_time epoch secs Generated
verify 0 Constant (0 = create, no pre-validate)
reference_no 89GQASZX 940 DepositorPurchaseOrderNumber (the PO; = 850 PurchaseOrderNumber). CI-341: PO is the canonical Cirro id
order_desc ORD225299 940 DepositorOrderNumber (OMS order id; rides along for traceability)
warehouse_code USWE Config cirro.warehouse-code
shipping_method PPS_PENDING_ROUTING Config cirro.shipping-method
packing_type 2 Constant per fulfillment path (2 = prepack carton)
consignee_info.name Amazon…TEB9 940 ST-address AddressName
consignee_info.company Amazon…TEB9 940 ST-address AddressName (same value, duplicated)
consignee_info.address1 601 Randolph Road 940 ST-address Address1
consignee_info.city SOMERSET 940 ST-address City
consignee_info.province NJ 940 ST-address State
consignee_info.zipcode 08873 940 ST-address PostalCode
consignee_info.country US 940 ST-address Country (UK→GB normalized)
consignee_info.locationNumber 9914900 940 ST-address AddressLocationNumber
consignee_info.doorplate 9914900 940 ST-address AddressLocationNumber (same value, duplicated)
consignee_info.buyer_id amazonvendorcentralus DerivedsanitizeBuyerId(customerName) (trading-partner name, lower-cased, stripped)
carton_info.box_mark_num 1 DerivedcartonList.size() ⚠️ see open item below
carton_info.is_change_label 0 Constant
carton_info.change_label_qty_piece 0 Constant
carton_info.labelling_requirement 0 Constant
carton_info.is_ukca_gpsr_label 0 Constant
carton_list[].carton_no JH-EL601-… Cirrobox_no from the prepack box_list
carton_list[].product_list[].product_sku 806922 … Cirro prepack box contents (our SKU)
carton_list[].product_list[].quantity 2 … Cirro prepack box contents
items null Constant — null for prepack (Cirro rejects items when packing_type=2)

What we'd add for labels (CI-433) — and what's missing

Two new pieces from the Cirro B2B API adjustment (b2b-api-adjustment.md): a label_template block, and a label_list[] inside each carton. Below is what we'd add, with each item marked ✅ (we can populate) / ⚠️ (decision needed) / ❌ (data we don't have). Amazon uses two labels per the spec (label-detail.md): UCC + Pallet.

"label_template": {                          // ❌ not built today (0% populated)
  "ucc_label": {
    "items": [
      {
        "product_sku": "806922",             // ✅ our SKU — from carton_list / 940
        "upc": "<from 940 ConsumerPackageCode>"  // ⚠️ ours — Cirro can't supply; NAV to populate it on the 940 (see below)
      }
      // … one entry per SKU …
    ]
  },
  "pallet_label": { "items": [] }            // ✅ empty for Amazon (carries PO# only)
},

"carton_list": [
  {
    "carton_no": "JH-EL601-20260530-0017-1",
    "product_list": [ /* … 29 SKUs … */ ],
    "label_list": [                          // ❌ not on our Carton DTO today
      {
        "label_type": 1,                     // ✅ 1 = UCC
        "label_source": 2,                   // ✅ always 2 (Cirro system-generates; we never upload files)
        "box_mark_num": 1                    // ⚠️ value unclear — see below
      }
      // Pallet label → ❌ no label_type code exists (enum only 1=UCC, 2=Gtin14)
    ]
  }
]

What's missing / to confirm with Cirro

  1. box_mark_num — what does it actually mean, and do we send it per-carton now? We already send box_mark_num: 1 on carton_info today, set to cartonList.size() (number of cartons). But the spec defines it as "total number of labels applied on the order — 1, 2, 4," and our own code comment (in the customized-packing path, which drops carton_info entirely) says it's really "Labels Per Carton, not number of cartons." Three different meanings, and nothing on the 850/940 carries it — it's a retailer routing-guide rule. We need Cirro to define it, tell us whether the adjustment wants it inside carton_list[].label_list[] too, and give the right value per retailer (or confirm they set it themselves).

  2. UPC — resolved: it's ours (2026-06-08). Cirro cannot supply Amazon's UPC (they hold multiple UPCs per item and can't pick the right one), so despite the spec marking it auto-gen, the UPC is ours to push. It's on neither the 850 nor the 940 today — the plan is for NAV to populate <ConsumerPackageCode> on the Amazon 940 (the Walmart pattern, whose 940 already carries UPC), or a product-master lookup. No longer a Cirro question; now a sourcing/plumbing item.

  3. label_type enum is incomplete. Only 1 = UCC and 2 = Gtin14 are defined. Amazon needs a Pallet label too — there's no code for it, so it can't be expressed in label_list[]. (Affects every vendor with pallet / packing-slip labels.)


Built from real prod EDI pulled 2026-06-02. Raw 850/940 archived in the camel repo at reference/cirro/edi-samples/.