ml-connector
IFS CloudStripe

IFS Cloud and Stripe integration

IFS Cloud is your enterprise ERP covering procurement, supply chain, asset management, and finance. Stripe lets you accept online payments and manage invoicing at scale. Connecting the two automates invoice creation in Stripe from your IFS Cloud AR workflow, so customers can pay online without your finance team re-keying data. Payment status flows back into IFS Cloud for reconciliation.

How IFS Cloud works

IFS Cloud exposes customers, sales orders, and GL vouchers through OData v4 REST API, with a tenant-specific subdomain for each customer instance (https://<tenant>.ifs.cloud/main/ifsapplications/projection/v1/<ProjectionName>.svc/<EntitySet>). Authentication uses OAuth2 client credentials flow with a 60-minute token lifetime. IFS has no standard webhook subscription API and does not provide self-registerable event actions, so integration follows a pull-based polling pattern using OData filters on modified timestamps. Page size limits recommend keeping result sets under 5000 elements per request; rate limits are approximately 1000 requests per minute per tenant.

How Stripe works

Stripe is a payments platform exposing customers, invoices, payment intents, charges, and subscription entities through REST API (https://api.stripe.com/v1). Authentication uses an API key sent via HTTP Basic Auth or Bearer token. Stripe delivers real-time events via HTTPS webhooks with HMAC-SHA256 signature verification and at-least-once delivery semantics with up to 3 days of retry. Stripe does not expose vendors, purchase orders, GL accounts, or employee records; it is read-mostly for financial reporting and write-only for invoice and payment creation.

What moves between them

The main flow is IFS Cloud to Stripe. Customer records and sales orders are read from IFS Cloud on a configurable schedule and mapped to Stripe customers. Invoices created in IFS Cloud are posted to Stripe as draft invoices, tagged with the IFS Cloud invoice number for reconciliation. Stripe webhooks notify ml-connector when payments are received or disputes are filed, and that data flows back into IFS Cloud as voucher notes or custom fields for audit trail and reconciliation matching.

How ml-connector handles it

ml-connector stores the IFS Cloud OAuth2 credentials and refreshes the bearer token when it expires or the API returns a 401 response. Stripe API key is stored encrypted and rotated on a schedule you set. On the IFS Cloud side, ml-connector polls CustomerSet and CustomerOrderSet using OData filter expressions on LastModificationTime to pick up new and changed records since the last run. Customer names, tax IDs, and billing addresses are mapped from IFS Cloud to Stripe customer objects. Invoice data is read from VoucherSet (or PostingProposalHeadSet) and posted to Stripe invoices with line items mapped from IFS Cloud order lines. Because IFS Cloud rate-limits at 1000 requests per minute and Stripe has separate rate limits per key, ml-connector manages both backoff strategies independently and includes exponential retry with jitter. Stripe webhook events trigger immediate reconciliation queries into IFS Cloud to match payment receipt against the original invoice. ETag values from IFS Cloud are handled transparently for concurrency safety, and Stripe immutable price objects are archived rather than updated when invoice amounts change.

A real-world example

A B2B software company runs IFS Cloud for order management and AR, with customers worldwide. Previously, the AR team printed invoices from IFS Cloud, emailed them manually, and logged in to Stripe once per week to create invoices for payments. Reconciliation was manual: payments arrived in Stripe but sat unmatched until the team manually looked them up in IFS Cloud and recorded the receipt. With IFS Cloud and Stripe connected, each sales order automatically creates a Stripe customer, each invoice posts to Stripe as a draft invoice, and customers receive payment links immediately. Payment events from Stripe webhooks flow back to IFS Cloud, and the AR dashboard shows matched and unmatched invoices in real time. Month-end reconciliation is now a query against IFS Cloud voucher notes instead of a manual email hunt.

What you can do

  • Read customers and sales orders from IFS Cloud and create matching Stripe customer records.
  • Post IFS Cloud invoices to Stripe as draft invoices with line items and tax amounts mapped from the GL voucher.
  • Receive Stripe payment and dispute webhooks and log the outcome in IFS Cloud for AR audit trail.
  • Manage OAuth2 token refresh on the IFS Cloud side and API key rotation on the Stripe side.
  • Poll IFS Cloud on a schedule with exponential backoff and retry both OData rate limits and Stripe rate limits independently.

Questions

Can ml-connector push payment status from Stripe back to IFS Cloud?
Yes. Stripe webhooks for payment_intent.succeeded and charge.dispute.created trigger immediate queries into IFS Cloud to match the payment or dispute against the original invoice. The payment status is logged as a voucher note or custom field in IFS Cloud for AR reconciliation and audit trail.
How does ml-connector handle IFS Cloud's OData pagination and rate limits?
ml-connector pages through OData result sets using skip/top parameters, respecting the 5000-element limit per request and the 1000 requests-per-minute rate limit per tenant. It applies exponential backoff with jitter when HTTP 429 is returned and validates ETag headers on mutation operations to ensure optimistic concurrency is respected.
What happens if a customer or invoice already exists in both systems?
ml-connector matches Stripe customers to IFS Cloud customers by ID and updates only the fields that have changed. For invoices, the IFS Cloud invoice number is stored as a custom field in the Stripe invoice for reconciliation. Duplicate invoice creation is prevented by querying Stripe for existing invoices before posting new ones.

Related integrations

Connect IFS Cloud and Stripe

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

Get started