ml-connector
SYSPROStripe

SYSPRO and Stripe integration

SYSPRO runs your order-to-cash cycle and keeps customer and invoice records current. Stripe collects payments online. Connecting the two keeps your payment platform in sync with your ERP so customers can pay the right invoice, payments land on the right accounts, and your AR team does not re-key invoices into the payment system. New customers in SYSPRO flow to Stripe, invoices are created for collection as soon as they post in your ERP, and payment records flow back so your ERP knows which invoices have been paid.

How SYSPRO works

SYSPRO exposes customers, invoices, GL accounts, and postings through OData (read-only REST with HTTP Basic Auth) and e.net Business Objects (REST/SOAP, read-write with session token auth). The OData service runs on a customer-supplied server URL and supports timestamp-based filtering for incremental reads. e.net requires an operator session token obtained by login to Utilities/Logon. SYSPRO Cloud and on-premise editions both expose these APIs; direct database access is prohibited. SYSPRO has no outbound webhook system, so polling is the only method to detect new or changed customers and invoices.

How Stripe works

Stripe exposes customers, invoices, charges, payments, and payment methods through REST API with Bearer token auth (separate keys for sandbox and production). All write operations use POST form-encoded requests against Stripe endpoints; updates are idempotent but not atomic across multiple objects. Stripe delivers events via webhooks to a registered HTTPS endpoint with HMAC-SHA256 signature verification. Event delivery is at-least-once with a 3-day retry window, but events are not ordered, so the integration must fetch current state from the API rather than relying solely on event content. Stripe enforces rate limits per API key.

What moves between them

Customers and invoices flow from SYSPRO into Stripe. ml-connector polls SYSPRO OData for new and changed customers (via ArCustomer table) and invoices (via ArInvoice table) at a schedule you set (recommended 5-15 minutes). Each SYSPRO customer is mapped to a Stripe customer record; if the customer exists, the mapping is reused. Each SYSPRO invoice is created as a Stripe invoice for payment collection. Payment events flow from Stripe back to SYSPRO via webhooks: when a Stripe invoice is paid (charge.succeeded or payment_intent.succeeded), ml-connector records the payment in SYSPRO's AR module. Refunds and disputes are also tracked. The direction is primarily SYSPRO into Stripe for AR master data, and Stripe webhooks back into SYSPRO for payment status.

How ml-connector handles it

ml-connector stores SYSPRO credentials (server URL + Basic Auth username/password for OData) and Stripe API key (Bearer token) encrypted. On each poll, it queries SYSPRO OData with $filter on InvoiceDate and LastModifiedDate to find new and changed records, then creates or updates matching Stripe customers and invoices. Customer mapping is maintained in a local table so the same SYSPRO customer always maps to the same Stripe customer ID. For Stripe, ml-connector uses the API key for write operations and validates incoming webhooks using the Stripe Signature header (HMAC-SHA256). Because Stripe does not guarantee event order and webhook delivery may be delayed, ml-connector re-fetches the current state of any invoice or charge from the API before recording a payment in SYSPRO, ensuring accuracy. SYSPRO e.net Business Objects requires a session token, which is obtained at poll start and refreshed if any call returns a 401. Stripe rate limits (per-second and per-minute) are respected by backing off on 429 responses. Every record synced carries a full audit trail, and any failed write can be replayed once the upstream issue is resolved.

A real-world example

A mid-sized industrial distributor runs SYSPRO for order fulfillment and AR, with invoices issued to customers across multiple countries. The AR team previously had to manually enter each invoice into Stripe or another payment gateway after posting in SYSPRO, then reconcile payments offline. With SYSPRO and Stripe connected, each invoice flows to Stripe automatically within 10 minutes of posting in SYSPRO, customers receive a Stripe payment link, and when payment arrives in Stripe it is immediately recorded in SYSPRO as paid. The AR team spends less time on data entry and more time on collections and disputes.

What you can do

  • Sync SYSPRO customers to Stripe customer records, maintaining a persistent mapping so the same customer always matches.
  • Create Stripe invoices automatically from SYSPRO AR invoices as soon as they post, with line items and amounts matching the source.
  • Track Stripe payments, charges, and refunds back into SYSPRO so your ERP AR balance reflects actual cash received.
  • Authenticate SYSPRO via OData Basic Auth and Stripe via API key, encrypting both credential sets and managing token refresh.
  • Poll SYSPRO on a schedule you control (5-15 minute intervals recommended) and validate all incoming Stripe webhook signatures.

Questions

Which direction does data flow between SYSPRO and Stripe?
Customers and invoices flow from SYSPRO into Stripe for payment collection. SYSPRO is the AR master. Payment records and events flow from Stripe back into SYSPRO so your ERP knows which invoices have been paid. Refunds and payment failures are also synced back.
How does ml-connector handle the difference between SYSPRO's polling-only model and Stripe's webhooks?
ml-connector polls SYSPRO on a schedule using OData $filter on invoice and customer timestamps to find new or changed records. For Stripe, it validates incoming webhook signatures to confirm authenticity. Because webhooks can arrive out of order or be delayed, ml-connector re-fetches the current state of each invoice from Stripe before recording a payment in SYSPRO, ensuring the ERP always reflects the true state.
What happens if a SYSPRO customer or invoice changes after it has already been synced to Stripe?
ml-connector tracks changes via timestamp columns in SYSPRO OData (InvoiceDate, LastModifiedDate). When a record is updated in SYSPRO, the next poll detects it and updates the matching Stripe customer or invoice. Customer name, address, and tax ID changes in SYSPRO flow to Stripe. Invoice adjustments post as new line items in Stripe.

Related integrations

Connect SYSPRO and Stripe

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

Get started