ml-connector
PlexZuora

Plex and Zuora integration

Plex runs manufacturing and inventory. Zuora runs subscription billing. Connecting them lets you bill customers based on parts consumed, orders fulfilled, or inventory shipped, with all usage records flowing from Plex into Zuora invoices automatically. Plex purchase orders and inventory movements become the source of truth for what was delivered, and Zuora invoices reflect the actual cost and quantity with no manual line-item entry. The integration also keeps payment and invoice status flowing back to Plex for closed-loop order fulfillment tracking.

How Plex works

Plex is a cloud ERP and MES platform designed for discrete manufacturing. It exposes suppliers, purchase orders, purchase order releases, invoices, parts, inventory records, and GL accounts through REST APIs authenticated with OAuth2 bearer tokens and through legacy SOAP datasources using basic auth with a company code (PCN). Plex does not offer native webhooks, so integrations must poll the REST API on configurable intervals (5 to 15 minutes typical) filtering by modified date to catch recent changes. Role-based access control is enforced, so the integration user must have the correct permissions or API calls return 403 or empty results.

How Zuora works

Zuora is a subscription billing and revenue management platform. It exposes accounts, subscriptions, invoices, payments, line items, and refunds through REST APIs secured by OAuth2 client credentials. Zuora can push events to a registered webhook endpoint for invoice postings, payment processing, and subscription changes, with configurable retry behavior and HMAC-SHA256 signature verification. Webhook payloads are minimal and require a callback to fetch the full record. Multi-region base URLs are required per customer tenant, and payment notifications fire only for electronic payments, not external or manual ones.

What moves between them

Purchase order releases and inventory shipments from Plex flow into Zuora as subscription usage records and line-item adjustments. When a Plex purchase order is marked fulfilled, ml-connector consolidates its line items, maps the Plex part and supplier to Zuora product and account, and posts a usage record or invoice adjustment in Zuora. Invoice and payment notifications from Zuora flow back to Plex so the customer's financial status and payment milestones are visible in the Plex order view. The main sync cadence is Plex polling at 5-15 minute intervals and Zuora push events in real-time when invoices post and payments process.

How ml-connector handles it

ml-connector maintains separate OAuth2 sessions for both Plex and Zuora, refreshing Plex tokens before they expire and refreshing Zuora tokens hourly. Since Plex has no webhooks, ml-connector queues polling jobs on a configurable interval and filters each poll by modified_date to avoid re-processing. It maps Plex supplier and part records to Zuora accounts and products using a mapping table, so the integration learns which Plex part corresponds to which Zuora product subscription. When a Plex purchase order release is marked fulfilled or shipped, ml-connector posts a usage record to the matching Zuora subscription, triggering invoice consolidation. Zuora webhook signatures are verified using HMAC-SHA256 before accepting any event. If a Zuora API call returns 429 (rate limit), ml-connector backs off exponentially and retries. Because Zuora payment notifications fire only for electronic payments, the integration tracks external payment updates via polling the Zuora account status and reconciling against Plex invoices.

A real-world example

A small to mid-sized contract manufacturer builds precision parts and subsystems for OEM customers. They use Plex for inventory, purchase orders, and manufacturing scheduling. Customers are billed on a subscription basis: each month they can draw down a committed quantity, with overage charges for additional units. Before the integration, Plex recorded all shipments and inventory consumption in real time, but the finance team manually exported shipment data from Plex and re-entered it into Zuora each week to generate invoices. With Plex and Zuora connected, each fulfilled shipment in Plex automatically posts usage to the matching Zuora subscription, invoice amounts are calculated from actual consumption, and month-end billing happens without re-keying.

What you can do

  • Map Plex suppliers and parts to Zuora accounts and products, so fulfilled orders in Plex trigger the correct Zuora subscription line items.
  • Poll Plex purchase orders and inventory on a 5 to 15 minute interval, filter by modified date to detect fulfillment and shipment events, and post usage records and invoice adjustments to Zuora.
  • Subscribe to Zuora invoice and payment webhooks, verify HMAC-SHA256 signatures, and update Plex order status when invoices post or payments are received.
  • Authenticate Plex using OAuth2 bearer tokens and Zuora using OAuth2 client credentials, with automatic token refresh and multi-region Zuora base URL support.
  • Track invoice adjustments, refunds, and credit memos from Zuora and correlate them back to Plex purchase order releases and line items for audit and reconciliation.

Questions

How does the integration map Plex parts and suppliers to Zuora products and accounts?
ml-connector maintains a mapping table linking Plex supplier and part combinations to Zuora product and account records. When a Plex purchase order release is fulfilled, the integration looks up the matching Zuora product subscription and account, then posts a usage record. The mapping is configured once at setup and updated manually when new parts or suppliers are added.
Since Plex has no webhooks, how does the integration detect when an order is fulfilled?
ml-connector polls the Plex REST API on a configurable 5 to 15 minute interval and filters by modified_date to detect recent changes. When a purchase order release status changes to fulfilled or a shipment is recorded, the next poll detects it and queues a job to post usage to Zuora. This polling approach also tolerates brief Plex unavailability without missing events.
What happens when a Zuora payment is marked external or manual instead of electronic?
Zuora webhook notifications fire only for electronic payments, not manual or external ones. ml-connector handles this by periodically polling the Zuora account status to check for payment reconciliation. External payments are detected on the next reconciliation cycle and reflected in Plex, though with slightly higher latency than electronic payments would have.

Related integrations

Connect Plex and Zuora

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

Get started