What Is a Supplier Integration Platform?
A supplier integration platform connects an e-commerce or manufacturing system to external supplier systems via EDI or REST/SOAP APIs. It handles outbound purchase orders, inbound order acknowledgements and shipment notifications, catalog feed ingestion, and error recovery — presenting a uniform internal interface regardless of each supplier protocol.
Requirements
Functional Requirements
- Send purchase orders to suppliers over EDI X12 850 or REST API, based on per-supplier configuration.
- Receive order acknowledgements (EDI 855), advance ship notices (EDI 856), and invoices (EDI 810).
- Ingest supplier catalog feeds (CSV, XML, or JSON) to update product data and pricing.
- Sync order status back to the purchase order service in near real-time.
- Handle transient supplier failures with configurable retry and dead-letter escalation.
Non-Functional Requirements
- Each supplier connection must be isolated so a failure in one does not affect others.
- Message delivery must be at-least-once with idempotent processing on the receiving end.
- Catalog ingestion must process files of up to 500,000 rows within one hour.
Data Model
- supplier: supplier_id, name, integration_type (EDI, REST, SFTP), endpoint_config (JSON), auth_config (encrypted JSON), active.
- outbound_message: message_id, supplier_id, message_type (PO, CANCEL), payload (raw EDI or JSON), status (PENDING, SENT, ACKED, FAILED), attempts, last_error, created_at, sent_at.
- inbound_message: message_id, supplier_id, message_type (ACK, ASN, INVOICE), raw_payload, parsed_payload (JSON), processed, received_at.
- catalog_feed_run: run_id, supplier_id, file_url, status (QUEUED, PROCESSING, DONE, FAILED), rows_total, rows_processed, errors, started_at, finished_at.
Core Algorithms
Connector Abstraction
Each supplier has a connector class that implements a common interface: send(message), poll(), and parse(raw) -> InternalEvent. The platform resolves the correct connector at runtime using the supplier record integration_type. Adding a new supplier requires only a new connector implementation and a config row — no platform code changes.
Outbound Retry with Exponential Backoff
Failed outbound messages are re-queued with a delay of min(2^attempt * base_delay, max_delay). After a configurable maximum attempts (default five) the message moves to a dead-letter queue and an alert fires. An operator can inspect the raw payload, correct the issue, and requeue. Each retry checks whether the supplier has already acknowledged the message (idempotency check using the internal message_id sent as a reference field).
Catalog Feed Ingestion Pipeline
The pipeline uses a streaming parser to avoid loading large files into memory. Each row is validated against a supplier-specific schema (required fields, data types, price range sanity checks). Valid rows are batched into groups of 500 and upserted into the product catalog. Invalid rows are written to an error log. At completion a summary is posted to the catalog_feed_run record and a webhook notifies the catalog team.
Inbound Message Deduplication
Suppliers sometimes resend the same EDI document. The platform hashes the raw payload and checks a recent-message bloom filter before full processing. On a bloom filter hit it performs an exact lookup in inbound_message by supplier_id and payload hash. If a match is found the message is acknowledged but not reprocessed, preventing duplicate stock receipts or invoice payments.
API Design
POST /suppliers/{supplier_id}/purchase-orders— enqueues an outbound PO message; returns message_id.GET /suppliers/{supplier_id}/messages?type=ACK&since=timestamp— lists inbound messages for status sync.POST /catalog-feeds— triggers ingestion of a file URL for a given supplier.GET /catalog-feeds/{run_id}— returns feed run status and error summary.POST /dead-letter/{message_id}/requeue— operator action to requeue a failed message.
Scalability and Reliability
Per-Supplier Queues
Each supplier has a dedicated outbound queue and a dedicated worker pool. This provides isolation: a slow or unresponsive supplier only backs up its own queue. Queue depth metrics per supplier trigger autoscaling of worker instances and alert on abnormal growth.
EDI Translation Layer
Raw EDI X12 is parsed into a canonical internal JSON format by a stateless translation service. This decouples the rest of the platform from EDI specifics. Updates to EDI segment handling (new trading partner requirements) are confined to the translator with no downstream changes needed.
Catalog Feed Parallelism
Large catalog files are split into chunks (by byte range for CSV) and processed in parallel across worker nodes. A coordinator tracks chunk completion and merges error logs. This achieves horizontal scalability and allows partial restarts — only failed chunks are reprocessed on a retry.
Trade-offs and Interview Discussion Points
- EDI versus REST: EDI is still the standard for large retail suppliers (especially grocery and wholesale). REST connectors are simpler but many established suppliers only offer EDI. The abstraction layer means the platform supports both without compromising the internal API.
- Push versus poll for inbound messages: REST suppliers can push webhooks for low latency; EDI suppliers are typically polled on a schedule. The platform handles both models in the connector interface.
- Synchronous PO submission versus async queue: synchronous submission gives immediate confirmation but couples the platform to supplier uptime. The async queue with retry is more resilient but adds latency before the supplier receives the order.
See also: Scale AI Interview Guide 2026: Data Infrastructure, RLHF Pipelines, and ML Engineering
See also: Shopify Interview Guide