ml-connector
SYSPROStedi

SYSPRO and Stedi integration

SYSPRO runs procurement and finance for mid-market manufacturers and distributors. Stedi translates procurement documents into X12 EDI and routes them to suppliers via SFTP, FTPS, or AS2. Connecting the two lets you send purchase orders to suppliers as EDI without manual re-keying, and receive supplier invoices as EDI that flow automatically into SYSPRO without leaving data stranded in email or filing systems. ml-connector handles the authentication on both sides, polls SYSPRO on a schedule you control, translates documents to and from EDI, and keeps a full audit trail of every record.

How SYSPRO works

SYSPRO Adaptive ERP exposes purchase orders, suppliers, invoices, GL accounts, and inventory items through e.net Business Objects (REST/SOAP with session token auth), which supports both read and write operations, and through OData (read-only REST with HTTP Basic Auth). The e.net session token expires on logoff or timeout, so a new token must be obtained on each request. SYSPRO does not support outbound webhooks, so polling is required. Customers supply their own on-premise or cloud server URL and credentials. Large XML payloads are best sent via SOAP/NetTcp rather than REST to avoid URL length limits. Polling on a 5- to 15-minute interval is recommended for financial data to detect changes promptly.

How Stedi works

Stedi is a cloud EDI platform that accepts purchase orders and invoices as JSON via REST, translates them to X12 EDI (850, 810, and other transaction types), and routes them to trading partners via SFTP, FTPS, or AS2. Inbound EDI files are parsed and pushed as JSON webhooks. Stedi authenticates with a static API Key in the Authorization header (no expiry; manual revocation via portal). Outbound writes require an Idempotency-Key header for 24-hour deduplication. Webhook endpoints must respond within 5 seconds, and Stedi retries webhook delivery up to 4 times with 90-second intervals. Stedi is a translation platform, not a system of record; it stores EDI transactions and mappings but not vendors, invoices, or GL accounts.

What moves between them

The primary flow is SYSPRO into Stedi outbound. ml-connector polls SYSPRO purchase orders on a schedule, translates each into a Stedi 850 Purchase Order EDI document, and sends it outbound through your configured Stedi SFTP, FTPS, or AS2 connection to the supplier. Inbound, Stedi receives supplier 810 Invoices as EDI files and pushes them as JSON webhooks; ml-connector parses the webhook, translates the EDI into SYSPRO supplier invoice fields, and writes the invoice into SYSPRO ApInvoice via e.net Business Objects. Supplier master data such as ID, name, and address is aligned from SYSPRO into Stedi partnership and transaction settings so outbound EDI documents carry the correct partner identifiers.

How ml-connector handles it

ml-connector stores both SYSPRO credentials (server URL and OData operator code/password) and the Stedi API Key encrypted. On the SYSPRO side, it refreshes the e.net session token on every call by calling Utilities/Logon with the operator code and password to obtain a new UserId GUID, then passes that GUID on all subsequent OData and e.net calls. On the Stedi side, it includes the API Key in every request Authorization header and sends an Idempotency-Key (UUID) with each outbound write to prevent duplicates if a request is retried. ml-connector polls SYSPRO OData purchase order table on a schedule tied to your procurement cycle, filtering on PostDate to find new and changed orders, and translates field-by-field into a Stedi 850 request body using your configured partner code and supplier mapping. When Stedi webhooks arrive with inbound 810 invoices, ml-connector validates the webhook within the 5-second response window, parses the X12 into invoice line items and totals, maps Stedi partner identifiers back to SYSPRO ApSupplier, and posts the invoice into SYSPRO via e.net ApInvoice.Create. If the SYSPRO write fails, ml-connector retries on the next poll cycle. The audit log tracks every translated document, every webhook received, and every write into SYSPRO.

A real-world example

A mid-sized industrial distributor operates SYSPRO for purchasing and general ledger, and ships to 200 suppliers with a mix of EDI-capable and email-based vendors. Before the integration, the procurement team printed purchase orders from SYSPRO and emailed them to EDI-capable suppliers, then manually entered supplier invoices from PDF into SYSPRO at month-end, cross-checking totals against the originating POs and handling discrepancies by email. With SYSPRO and Stedi connected, new purchase orders flow automatically as 850 EDI documents through Stedi to suppliers that accept EDI, eliminating the manual email step. Supplier 810 invoices arrive inbound as JSON webhooks and post into SYSPRO ApInvoice with full line-item detail, tax, and freight cost allocation. The month-end invoice entry step is nearly gone; most invoices are auto-posted, and the team only handles exceptions. Invoice-to-PO matching in SYSPRO now finds matches on the day the vendor ships, not at month-end.

What you can do

  • Poll SYSPRO purchase orders and suppliers and translate them to Stedi 850 Purchase Order EDI documents on a schedule you control.
  • Receive inbound Stedi 810 Invoices as webhooks, parse them, and write them into SYSPRO ApInvoice with full line-item detail.
  • Map SYSPRO suppliers to Stedi partners and transaction settings so outbound EDI carries the correct partner identifiers.
  • Handle SYSPRO session token refresh on every call and manage the Stedi API Key on the Authorization header.
  • Route EDI outbound through Stedi SFTP, FTPS, or AS2 connections with full deduplication and audit trail.

Questions

Which direction does data move between SYSPRO and Stedi?
The primary flow is SYSPRO outbound to Stedi. Purchase orders from SYSPRO are translated to 850 EDI documents and routed to suppliers. Inbound, supplier 810 invoices arrive from Stedi as webhooks and are written into SYSPRO ApInvoice. Supplier master data such as ID, name, and address is aligned in both directions so EDI documents carry correct identifiers.
How does ml-connector handle SYSPRO's session token and Stedi's API Key?
ml-connector calls SYSPRO Utilities/Logon on every request to obtain a fresh e.net session token (UserId GUID), then passes that GUID on all OData and e.net calls. On the Stedi side, it includes the API Key in the Authorization header on every REST call and sends an Idempotency-Key (UUID) with each outbound write to prevent duplicates if a request is retried.
Does SYSPRO support webhooks, or does ml-connector have to poll?
SYSPRO does not support outbound webhooks. ml-connector polls the SYSPRO OData purchase order and supplier tables on a schedule tied to your procurement cycle, filtering on PostDate to detect changes. Stedi does push webhooks for inbound EDI, so ml-connector receives and processes them within the 5-second response window.

Related integrations

Connect SYSPRO and Stedi

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started