Skip to content
SyncMyShop

Shopify and EDI

Shopify EDI integration

Shopify has no X12 or EDIFACT in it. Purchase orders from retailers become Shopify orders through the Admin API, with the PO number and the buyer's company on them, and the 855, 856, 810 and 846 are generated from orders, fulfillments and inventory. We build that layer per trading partner, host it and run it.

Is Shopify EDI capable?

Shopify does not read or write EDI. The platform has no X12 or EDIFACT translator: its Admin API exchanges JSON over GraphQL, and nothing in it produces an ISA envelope, a control number or a 997. A retailer that asks whether you are EDI capable asks whether you can receive its 850 and return an 855, 856, 810 and 997 according to its guide. A Shopify store can, with a layer in front of the API.

The route has three parts:

  1. The trading partner sends and receives X12 files over AS2, SFTP or a VAN.
  2. The integration translates each file, applies the mapping for that partner and keeps the acknowledgments.
  3. Shopify's Admin API creates the order and supplies the fulfillment and inventory data for the documents that go back.

This page is the Shopify side of our EDI integration. When an ERP sits behind the store, the same documents map to the ERP instead, as on the NetSuite EDI integration page.

What Shopify gives you natively

The B2B features and the Admin API hold most of what a purchase order needs.

EDI need Shopify object Detail
The buyer Company and company location On Basic, Grow, Advanced and Plus
The buyer's PO number poNumber on the order A string, set at creation
Net terms Payment terms on the company location Net payment terms on all four plans
Partner prices B2B catalogs 3 active catalogs below Plus, unlimited on Plus
Order from outside the checkout orderCreate mutation Needs the write_orders scope
Shipment with tracking fulfillmentCreate mutation Tracking company, numbers and URLs
Stock per location inventorySetQuantities and inventory levels Available quantity per location
A trigger when something changes Webhook topics ORDERS_CREATE, FULFILLMENTS_CREATE, INVENTORY_LEVELS_UPDATE Sent to the integration

Plan features checked on 3 October 2026 against Shopify's B2B plan overview. Direct catalog assignment to a company is Plus only.

Which documents a Shopify merchant handles

Document Direction Source or target in Shopify
850 purchase order In Becomes an order through orderCreate
997 acknowledgment Both None. Kept in the integration per document
855 acknowledgment Out Order lines checked against available inventory
856 ship notice Out Fulfillment, plus carton and SSCC data from outside Shopify
810 invoice Out Order totals. The invoice number comes from your accounting system or the integration
846 inventory advice Out Available quantity per variant and location

One order is 4 business documents and 4 acknowledgments, 8 transaction sets. The full list is under EDI document types.

How an 850 becomes a Shopify order

An EDI 850 mapped to the Shopify orderCreate mutation The sender ID and the buying party resolve to a Shopify company location. The PO number goes to poNumber and sourceIdentifier. The UPC in PO1 is looked up on the variant barcode. Quantity and price go to the line item. inventoryBehaviour is BYPASS by default, so stock is not claimed unless it is set. EDI 850 from the buyer Shopify orderCreate ISA06 and N1*BY 123456789, HARBOR RETAIL BEG03 4500018236 PO1, qualifier UP 614141104826 PO102 24 PO104 12.50 companyLocationId CompanyLocation/7001 from a partner table poNumber 4500018236 sourceIdentifier HARBOR-4500018236 used for the duplicate check lineItems.variantId ProductVariant/44810 found on the variant barcode lineItems.quantity 24 lineItems.priceSet 12.50 USD no catalog price is applied inventoryBehaviour BYPASS default: stock is not claimed lookup lookup
One purchase order line on its way into Shopify. The last field is the one to set: by default an order created through the API does not claim inventory.

The request for the first line of that order:

{
  "order": {
    "poNumber": "4500018236",
    "companyLocationId": "gid://shopify/CompanyLocation/7001",
    "sourceIdentifier": "HARBOR-4500018236",
    "lineItems": [
      {
        "variantId": "gid://shopify/ProductVariant/44810",
        "quantity": 24,
        "priceSet": { "shopMoney": { "amount": "12.50", "currencyCode": "USD" } }
      }
    ]
  },
  "options": { "inventoryBehaviour": "DECREMENT_OBEYING_POLICY" }
}

Five things in it are decisions, and each is a place where an EDI order goes wrong in Shopify.

Field What Shopify does What the mapping has to do
inventoryBehaviour Default is BYPASS: "Do not claim inventory" Set it, or EDI orders leave the available quantity untouched and the store and the 846 oversell
priceSet Takes the price as sent. Automatic discounts are not applied Compare PO104 with the partner's catalog price before the 855 goes out
variantId Needs Shopify's own ID Find the variant on barcode or SKU. A GTIN-14 in the 850 is not the 12-digit UPC in barcode
quantity Counts sellable units Convert cases: 24 cases of 12 is 288
sendReceipt Default is false Leave it, so the buyer's contact gets no consumer order email

Two limits apply to the request itself. Every array input on a Shopify API holds at most 250 items, and the PO1 loop of an 850 can repeat 100,000 times, so a purchase order with 300 lines does not fit in one orderCreate call and has to be split or built up with order edits. On a trial or development store, orderCreate is limited to five new orders per minute: a partner's test batch of 40 orders takes 40 divided by 5, so 8 minutes, when the test runs against a development store.

The technical reality of this pair

EDI arrives in batches and Shopify meters by cost. The GraphQL Admin API restores 100 cost points per second on standard plans, 200 on Advanced and 1,000 on Plus, and a single query may cost at most 1,000 points. A throttled request comes back as HTTP 200 with a THROTTLED error in the body, so an integration that only checks the status code counts a refused order as created. Shopify documents the limits on its rate limits page; the note on Shopify API rate limits works them through.

The second point is the 846. A drop-ship partner sells what your last inventory advice said was available. Shopify holds inventory per location, and not every location ships for every partner. Three locations with 14, 6 and 0 available make 20 when all count and 14 when only the main warehouse ships partner orders. The rule is set once per partner. How the available figure is built is covered under stock and availability.

The third is what Shopify does not store. A Shopify order and its fulfillments have no field for the contents of a carton, an SSCC or a bill of lading, and no separate invoice number. The 856 and the 810 need all four, so the integration reads them from the shipping tool or 3PL and from your accounting system.

Small volumes

Drop-ship programs send one purchase order per consumer order, often for a single unit. The document count is the same as for a pallet order: 8 transaction sets each. A store with 50 drop-ship orders a month exchanges 50 times 8, so 400 sets, and every one of the 150 outbound business documents has to match the partner's guide.

The usual starting point is a web portal: a person reads each order, types it into Shopify, and types the acknowledgment, the ship notice and the invoice back into the portal. At 50 orders that is 150 documents keyed by hand each month, and a mistyped quantity or tracking number in a ship notice is the kind of error retailers charge for. The integration replaces the typing in both directions, and the orders appear in Shopify next to the store's own.

When it goes wrong

What happens What the integration does
The 850 names an item that has no variant The order is held with the PO1 line shown. The 997 has already gone out, because the file was valid
The buyer resends the same PO The PO number exists for this company: held, no second order
Shopify answers THROTTLED The request waits in the queue and is retried after the cost budget has restored
The partner rejects an 856 with a 997 AK3 and AK4 are shown with the segment and element. The corrected notice goes out under a new control number
No 997 arrives for an invoice The timer for that document runs out and an alert is raised

Nothing is skipped without a trace. Every document has a status in the dashboard, with the raw file and the Shopify record it became or came from.

We build the integration to your trading partners and your store, host it and run it, for a fixed build price and a monthly fee. A new partner starts as a dry run that creates no orders, and you approve the first documents before they are sent. More on the platform side is under Shopify integrations and Shopify ERP integration. Tell us which retailer asked you for EDI.

Frequently asked questions

Is Shopify EDI capable?

Not on its own. Shopify has no X12 or EDIFACT translator, no envelope handling and no acknowledgments. It does have what an EDI flow needs on the inside: an API that creates orders with a PO number and a purchasing company, fulfillments with tracking, and inventory per location. With a translation and mapping layer in front of that API, a Shopify store meets a retailer's EDI requirements.

Do I need Shopify Plus for EDI?

No. The Admin API is the same on every plan, and Shopify lists B2B with companies, company locations, PO numbers and net payment terms on Basic, Grow, Advanced and Plus. Plus adds unlimited B2B catalogs (3 on the other plans) and direct catalog assignment to a company, and it raises the API rate from 100 to 1,000 cost points per second.

Do I need an ERP between Shopify and my trading partner?

No. When Shopify is where orders are picked, shipped and counted, the EDI documents can be built from Shopify data alone, with the pack data from your shipping tool or 3PL. When an ERP is the system of record, the 850 goes into the ERP and Shopify receives the resulting stock. See EDI integration for the ERP route.

Can orders from a retailer land as Shopify orders?

Yes. Each 850 is created with the orderCreate mutation, which Shopify documents for "importing orders from an external system or creating orders for wholesale customers". The order carries the retailer's PO number in poNumber and the retailer as a company location, so it appears in the same order list and fulfillment flow as store orders.

Is there a Shopify EDI app or connector?

Yes, the Shopify App Store lists apps that connect a store to an EDI network or provider. An app moves the documents. The decisions on this page still have to be made per partner: which item ID the partner sends, cases against eaches, which pack structure the ship notice needs, and what happens to a document that is rejected. Those are the parts we build.

Where does the carton and SSCC data for the 856 come from?

Not from Shopify. A Shopify fulfillment holds the line items, a tracking company, tracking numbers and tracking URLs. Which units went into which carton, and the SSCC printed on each label, are recorded by the shipping tool, the warehouse system or the 3PL. The integration reads them there and combines them with the order to build the 856.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com