EDI

EDI

Jump to:

Overview

Our Electronic Data Interchange (EDI) purchase order system simplifies how you receive orders by sending them directly to your ERP or order management system, removing the need for manual data entry.

We recommend EDI for receiving purchase orders, particularly for medium to larger suppliers and those with strong integration capabilities.

Benefits

EDI purchase orders help suppliers work more efficiently by removing the need to manually enter POs into an Enterprise Resource Planning (ERP) or Order Management system. They also improve accuracy by reducing manual errors and speed up order processing between buyers and suppliers. We believe faster, more accurate data exchange leads to fewer order issues, which benefits buyers, suppliers and us alike.

In the past, we've had issues with suppliers not receiving email purchase orders because spam filters incorrectly blocked them. While we use a managed email service, these emails can still occasionally be blocked.

We also believe that HTTPS or SFTP, the protocols used for EDI, offer a more robust and secure way to exchange sensitive order information than email.

Getting Started

  1. Set up an endpoint: You'll need to set up an endpoint to receive orders. Alternatively, either you or we can set up an SFTP directory.
  2. Get in touch: Once your endpoint is ready (or if you'd like us to set up an SFTP directory), please contact our team at help.suppliers@purchaseplus.com with your endpoint details.
  3. Integration: We'll add your endpoint to our system.
  4. Testing: To ensure a smooth transition, we can run a small test by switching one or two purchasers to the new endpoint. Alternatively, we can run email and EDI concurrently during a trial period.
  5. Pilot: We will work with you to select a small group of test customers that that will be switched over to the new endpoint.
  6. Full implementation: Once you're comfortable, we'll switch all your orders over to EDI.

Supported Data Formats

We primarily support JSON for EDI transactions. We can also send XML and can provide a sample payload on request, but we do not support cXML.

Sample JSON Payload

{   "purchase_orders": [     {       "purchase_order": {         "identity": "singer.test.sleep",         "purchaser": {           "id": 262388,           "name": "Sample Purchaser",           "customer_number": "PUR12345",           "requestor": "Han Solo",           "phone": "1300 123 456",           "email": "han.solo@purchaseplus.com"         },         "supplier": {           "name": "Sample Supplier",           "vendor_number": "SUP98765"         },         "purchase_order_number": "PO00001",         "purchaser_reference": "Daily food order",         "supplier_reference": null,         "expected_delivery_date": "2025-03-15",         "sent_date": "2025-03-15T05:51:57.122Z",         "cancelled": false,         "comments": [],         "confirmation_instructions": "Confirmation instructions example.",         "delivery_instructions": "Delivery instructions example.",         "delivery_address": {           "location_name": "Default",           "line1": "Level 4, 11 York Street",           "line2": "",           "city": "Sydney",           "state_province": "NSW",           "postal_code": "2000",           "country_code": "AU"         },         "currency": "AUD",         "net_amount": 826.1,         "delivery_amount": 0,         "tax_amount": 20.25,         "gross_amount": 846.35,         "lines": [           {             "code": "YOGH",             "brand": "Farmers Union",             "item_description": "Greek Style Yoghurt : Natural",             "item_size": 1,             "item_measure": "lt",             "item_package": "tub",             "pack_quantity": 1,             "pack_name": "each",             "gs1_code": null,             "order_instruction": null,             "unit_price": 6.75,             "quantity": 30,             "net_amount": 202.5,             "tax_amount": 20.25,             "gross_amount": 222.75,             "is_purchaser_price": true           },           {             "code": "WMBD",             "brand": "Mighty Soft",             "item_description": "Bread Sliced Wholemeal Sandwich Frozen",             "item_size": 650,             "item_measure": "g",             "item_package": null,             "pack_quantity": 10,             "pack_name": "carton",             "gs1_code": null,             "order_instruction": null,             "unit_price": 20,             "quantity": 25,             "net_amount": 500,             "tax_amount": 0,             "gross_amount": 500,             "is_purchaser_price": true           },           {             "code": "MILK",             "brand": "Pauls - Professional",             "item_description": "Milk : Full Cream",             "item_size": 3,             "item_measure": "lt",             "item_package": "bottle",             "pack_quantity": 6,             "pack_name": "carton",             "gs1_code": null,             "order_instruction": null,             "unit_price": 8.24,             "quantity": 15,             "net_amount": 123.6,             "tax_amount": 0,             "gross_amount": 123.6,             "is_purchaser_price": true           }         ]       }     }   ] } 

Handling Cancelations

Occasionally, a buyer will cancel an order through the user interface and choose to send a cancellation notice. This sends a duplicate of the webhook payload with the cancelled field set to true.

Please make sure to either filter these out entirely or handle them with a notification to your support team.

We train users to contact the supplier directly if they want to cancel or modify an order, as systems don't always handle this reliably.

Important Fields

FieldDescription
identityA unique, three-word identifier representing the relationship between a specific supplier account and buyer account. This identifier is unique for each buyer-supplier combination and can be used as the identity when sending invoices to Purchase Plus.
vendor_numberA unique identifier you assign to each buyer within your system. This allows you to cross-reference buyers across different systems. This field can be updated in the PurchasePlus portal.
purchase_order_numberThe purchase order number assigned by the buyer. While not globally unique, it is unique within the context of a single buyer. To create a unique key, concatenate this field with the vendor_number field. Important: If the PurchasePlus user leaves the ‘Purchaser Code’ field blank, using this concatenation for a unique key may cause problems.
cancelledA boolean flag indicating whether the purchase order has been canceled by the buyer in the MarketBoomer UI. If true, the PO has been canceled. MarketBoomer will re-send the PO with this field set to true upon cancellation. Handling this field is optional if your system does not support order cancellations, but it’s best practise.
lines.codeThe unique product code you assign to each product in our system. This field corresponds to the "owner code" in P+ New or the "supplier code" in P+ Legacy. You can update this code within the respective P+ interfaces.

The unique product code you assign to each product in our system. This field corresponds to the "owner code" in PurchasePlus or the "supplier code" in Legacy PurchasePlus. You can update this code within the respective P+ interfaces.