Odoo consultants for regulated manufacturers · code you keep

Integrations · Odoo guide

How to integrate Odoo with SPS Commerce and 3PL warehouses for automated EDI 850, 856, and 810 workflows

Integrate Odoo with SPS Commerce using an idempotent queue (sale.order and stock.picking keyed by retailer PO and external ID), map EDI 850 purchase orders into confirmed sale.order lines, generate ASN 856 from validated deliveries with GS1-128 and SSCC-18 labels, and post EDI 810 invoices from account.move only once per shipment. Sync 940/945 warehouse orders to 3PL WMS with duplicate detection so pick/pack status and invoices never double-post.

By Chase Robbins, Operator & Founder at The ERP Firm · Last updated October 26, 2026

Steps

  1. Stand up middleware or custom Odoo module with inbound 850 parser creating/updating sale.order via retailer PO idempotency keys.
  2. Configure SPS Commerce AS2/API credentials; log every interchange with retry and dead-letter queue for failed segments.
  3. On stock.picking validation, build 856 ASN with SSCC-18 per pallet/carton, lot_id, and shipped quantity; validate against retailer XSD before transmit.
  4. Map GS1-128 barcodes on labels to stock.quant.package and stock.move.line for scan-back at dock.
  5. For 3PL, send warehouse shipping order 940 on delivery confirmation; consume 945 receipt with external shipment ID tied to picking.
  6. Post account.move customer invoices (810) from delivered quantities; block second invoice on same picking with unique constraint on external EDI reference.
  7. Monitor queue depth and set alerts for P1 integration failures with 24/7 emergency support escalation path.

Common mistakes

  • Creating duplicate sale.order rows when retailers resend 850 with same PO number.
  • Transmitting 856 before picking is validated—quantity mismatches trigger retailer chargebacks.
  • Invoicing before ship confirm, causing 810/856 reconciliation failures.
  • 3PL status webhooks without idempotency keys posting double stock.move entries.
  • Skipping SSCC uniqueness across warehouses leading to ASN rejections.

Odoo version notes

EDI integrations on Odoo 16–18 vary by retailer mandate; SPS Commerce is common for US wholesale. Enterprise Delivery and Invoicing modules supply base documents; connectors are custom or iPaaS. The ERP Firm treats EDI/3PL as normal flat-rate requests with staging-first CI/CD.

Compare your options

TransactionDirectionOdoo documentIdempotency key
850 POInboundsale.orderRetailer PO + partner
856 ASNOutboundstock.pickingSSCC-18 / shipment ID
810 InvoiceOutboundaccount.moveInvoice # + picking
940/945 3PLBi-dirstock.picking3PL shipment reference

FAQ

Follow-up questions

Does Odoo include SPS out of the box?
No—use SPS connector, iPaaS, or custom module with queue architecture and monitoring.
How do we prevent duplicate invoices?
Store retailer invoice number and picking id on account.move; reject second post with same external ID.
What about partial shipments?
Split pickings per ship wave; each validated picking generates its own 856 and 810 subset.

Book a scoping call for your Odoo environment.

Bring your version, user count, and the workflow that is blocked today.

Book a scoping call