BodyliaBodylia OpenB2BSign in
← All guides

Purchase order

nutrab2b.order.created.v2 · Ordering

Purpose
Firm order with lines, quantities, prices, ship-to, Incoterm, requested dates and quality requirements.
When to send
Buyer commits to buy.
Sender → receiver
Buyer → Supplier
Expected responses
PO_RESPONSE, ACK
Equivalent standards
X12: 850 · EDIFACT: ORDERS · GS1: Order (GS1 XML 3.x) · SAP: ORDERS05 IDoc / ME21N
Scenarios using it
Full order-to-cash · PO rejected below MOQ · Partial acceptance with back-order · PO response must answer every line · Quantity change after acknowledgement · Cancel race after shipment · Split shipment, two lots · Over-shipment beyond tolerance · Multi-pallet, multi-lot SSCC hierarchy · Failed CoA blocks shipment · Out-of-spec lot ships under deviation · Hold blocks shipment until release · Organic certificate expired before shipment · Remaining shelf life too short · Cold-chain excursion · HS 2028: supplements move to 2107.10 · Incoterm vs transport mode conflict · Duplicate delivery (idempotency) · Out-of-order events are parked and released · Dropped event, gap detected, replay · Tampered, mis-signed and replayed messages · Schema version mismatch · Poison message to dead-letter queue · Three-way match failures · Short receipt settled with credit note

Fields and mappings

FieldTypeReqDescriptionCode list / formatEDI / GS1 / SAP mapping
po_numberstringyesPO number, unique per buyer
x12: BEG03
edifact: BGM 1004
sap: EBELN
order_datedateyesOrder dateNB-R015
x12: BEG05
edifact: DTM+137
contract_idstringBlanket / contract released against
quote_idstringQuote accepted
incotermstringyesIncoterm 2020NB-R006incoterm
x12: FOB / ITD
edifact: TOD
incoterm_placestringNamed place
transport_modestringyesPlanned transport modeNB-R006transport_mode
x12: TD504
edifact: TDT 8067
payment_termsstringyesPayment termspayment_terms
ship_toobjectyesDeliver to
glnstringyesLocation GLN^\d{13}$
x12: N1 ST/SF N104
edifact: NAD+ST/SF
namestringName
addressobjectPostal address
linesarray<string>Street lines
citystringCity
postal_codestringPostal code
regionstringState / province (ISO 3166-2 subdivision)
countrystringyesCountrycountry
bill_toobjectInvoice to
glnstringyesLocation GLN^\d{13}$
x12: N1 ST/SF N104
edifact: NAD+ST/SF
namestringName
addressobjectPostal address
linesarray<string>Street lines
citystringCity
postal_codestringPostal code
regionstringState / province (ISO 3166-2 subdivision)
countrystringyesCountrycountry
linesarray<object>yesOrder lines
line_nointegeryesLine number, unique in document
x12: PO101
edifact: LIN 1082
sap: EBELP
item_idstringyesBuyer's or seller's item number
x12: PO107 (BP/VP)
edifact: PIA
sap: MATNR
gtinstringGS1 GTIN of the traded item^(\d{8}|\d{12,14})$
x12: PO107 (UK)
edifact: LIN C212 (SRV)
gs1: gtin
ingredientstringNutraB2B ingredient master codeingredient
descriptionstringyesItem description
x12: PID05
edifact: IMD
hs_codestringyesHS 6-digit (or national) classificationNB-R005 NB-R017^\d{4}(\.\d{2}){1,2}$|^\d{6,10}$
x12: PO107 (HS)
edifact: PIA+5 C212 (HS)
national_codestringNational tariff line for the destination country (8–10 digits)NB-R005^\d{8,10}$
gradestringGrade / pharmacopoeiagrade
formstringProduct formproduct_form
standardisationobjectExtract standardisation
typestringyesNotationstandardisation
markerstringMarker compound
min_pctnumberMinimum %
max_pctnumberMaximum %
ratiostringDrug-extract ratio e.g. 10:1^\d+(\.\d+)?(-\d+(\.\d+)?)?:1$
methodstringAssay methodmethod
certificationsarray<string>Required certifications
quantityobjectyesOrdered quantity
valuenumberyesQuantity
uomstringyesUnit of measureuom
unit_priceobjectyesPrice per unit of measure
amountnumberyesAmount in major units, decimals ≤ currency minor unitsNB-R011
currencystringyesCurrencycurrency
requested_deliverydateRequested delivery dateNB-R015
min_shelf_life_daysintegerMinimum remaining shelf life at deliveryNB-R008
over_ship_tolerance_pctnumberAllowed over-shipment %NB-R002
quality_agreement_refstringQuality agreement
required_docsarray<string>Documents required with shipment (doc_type codes)
notesstringFree text (avoid structured data here)

Business rules

Example

{
  "specversion": "2.0",
  "id": "evt-po-PO-55012-1",
  "type": "nutrab2b.order.created.v2",
  "source": "urn:gln:0614141000012:erp",
  "subject": "PO-55012",
  "time": "2026-11-02T09:00:00Z",
  "datacontenttype": "application/json",
  "dataschema": "https://nutrab2b.org/schemas/2.0/PO.json",
  "sender": {
    "gln": "0614141000012"
  },
  "receiver": {
    "gln": "4012345000009"
  },
  "correlationid": "CONV-RFQ-1001",
  "idempotencykey": "PO:PO-55012:1",
  "sequence": 1,
  "env": "test",
  "data": {
    "po_number": "PO-55012",
    "order_date": "2026-11-02",
    "quote_id": "Q-77",
    "incoterm": "FCA",
    "incoterm_place": "Bengaluru airport",
    "transport_mode": "4",
    "payment_terms": "NET30",
    "ship_to": {
      "gln": "0614141000012",
      "name": "NutraBrand DC Reno",
      "address": {
        "city": "Reno",
        "region": "US-NV",
        "country": "US"
      }
    },
    "lines": [
      {
        "line_no": 1,
        "item_id": "ASH-KSM-5",
        "ingredient": "ASHWAGANDHA",
        "description": "Ashwagandha root extract 5%",
        "hs_code": "1302.19",
        "national_code": "1302194000",
        "grade": "USP_DSC",
        "form": "EXTRACT_DRY",
        "quantity": {
          "value": 500,
          "uom": "KGM"
        },
        "unit_price": {
          "amount": 58,
          "currency": "USD"
        },
        "requested_delivery": "2026-12-10",
        "min_shelf_life_days": 540,
        "over_ship_tolerance_pct": 2
      }
    ],
    "required_docs": [
      "COA",
      "COO",
      "ORGANIC_TC"
    ]
  }
}

Mapping checklist