ml-connector
PlexSAP Concur

Plex and SAP Concur integration

Plex runs manufacturing planning, inventory, and procurement. SAP Concur runs expense and invoice management. Connecting the two automates the flow of vendor invoices and purchase orders from Plex into Concur's Financial Integration system, eliminating manual entry and keeping procurement records synchronized across both platforms. New purchase orders from Plex automatically create purchase request records in Concur, and completed invoices flow through Concur's approval workflows without re-keying line items. ml-connector handles the different REST APIs and authentication schemes on both sides and moves the data on a polling schedule you control.

How Plex works

Plex exposes suppliers, purchase orders, invoices, GL accounts, payment records, and inventory items through a REST JSON API at https://cloud.plex.com/api, with a legacy SOAP XML option for older deployments. The cloud platform authenticates with OAuth 2.0 client credentials, returning a Bearer token for each API call. The on-premise SOAP interface uses Basic auth with a username, password, and company code (PCN) to route to the correct data partition. Plex has no native webhooks, so finance records must be read by polling at a configurable interval, typically 5 to 15 minutes, filtering by modified_date or created_date. Developer documentation is behind an authenticated portal that requires a Plex account to access the full OpenAPI specification. Role-based permissions are enforced, so the integration user must have the correct Plex role assigned or API calls return 403 or empty results. Rate limits are not publicly documented, so retries with exponential backoff are required.

How SAP Concur works

SAP Concur exposes vendors, invoices, purchase orders, expense reports, and financial integration documents through REST endpoints at https://us.api.concursolutions.com or regional variants for EMEA and China. Authentication uses OAuth 2.0 with a company-level access token that must be exchanged for an access token good for one hour, with a refresh token valid for six months. Geolocation is determined from the OAuth token response and must be used for all subsequent API calls, not hardcoded. SAP Concur supports push-based webhooks through the Event Subscription Service (ESS) for topics including expense reports, invoices, and user provisioning, with at-least-once delivery and automatic retries on 5xx and 401 errors. Each registered application is limited to five active Event Subscription Service subscriptions. Financial Integration documents accept expense, invoice, cash advance, payroll, and obligation records. The Vendor API v3.0 is deprecated as of 2023-11. Mutual TLS with certificate pinning is required for secure webhook delivery.

What moves between them

The main flow runs from Plex into SAP Concur. ml-connector polls Plex's REST API on a configurable schedule, typically aligned with your expense and procurement cycles. Completed purchase orders in Plex are transformed into SAP Concur Financial Integration documents with expense or invoice classification, keeping the vendor and amount data in sync. Invoices from Plex suppliers that match Concur vendors are posted as Payment Request records so they flow through Concur's approval workflows. GL account mappings align Plex cost centers and account codes to Concur's systemId field so every posted document lands on a valid Concur account. The integration reads from Plex and writes to SAP Concur; it does not write back to Plex.

How ml-connector handles it

ml-connector stores both credential sets encrypted and refreshes the OAuth access tokens on each API call, handling Plex's token endpoint at https://accounts.plex.com/oauth2/token and SAP Concur's dynamic geolocation requirement. It polls Plex's REST API for purchase orders and invoices modified since the last sync, filters by supplier and invoice status to avoid duplicate submissions, and batches the records into Concur's Financial Integration POST requests. Plex's Finance entities are less well documented than manufacturing entities, so ml-connector extracts data using the REST API but supplements with SOAP DataSources queries where the REST surface is incomplete, caching the DataSources stored procedure output to avoid excessive calls. GL account mapping is a prerequisite; ml-connector validates that each Plex GL code and cost center combination exists in SAP Concur before posting a Financial Integration document. Because Plex has no webhooks, polling is required; ml-connector implements exponential backoff on HTTP 429 responses and tracks the last successful poll timestamp per document type to avoid re-fetching historical records. Every record carries metadata including source document ID, posting timestamp, and Concur response status, so records can be replayed if a downstream approval fails. SAP Concur's five-subscription limit on Event Subscription Service means ml-connector uses the Financial Integration document topics for inbound notification when available, reducing reliance on pull-only synchronization.

A real-world example

A mid-sized discrete parts manufacturer runs Plex for production scheduling, inventory, and procure-to-pay, and uses SAP Concur for travel, expense, and invoice approval across three facilities. Before the integration, the procurement team exported purchase orders and invoices from Plex each week and entered them manually into Concur's invoice processing portal, then spent hours chasing GL account mismatches during close. With Plex and SAP Concur connected, each completed PO in Plex automatically posts to Concur as a Financial Integration document assigned to the facility's cost center. Invoices from Plex suppliers flow through Concur's approval workflows with GL codes pre-populated from the Plex GL account mapping. The finance team no longer re-enters procurement records, and GL reconciliation at month-end is faster because the accounts are pre-aligned.

What you can do

  • Poll Plex for completed purchase orders and invoices on a schedule aligned with your expense and procurement cycles, with exponential backoff on rate limits.
  • Transform Plex purchase orders into SAP Concur Financial Integration expense and invoice documents, mapped to vendor and GL account records.
  • Sync Plex suppliers to SAP Concur vendors and validate that every posting lands on a valid GL account and cost center.
  • Handle OAuth 2.0 authentication for both Plex and SAP Concur, refreshing tokens and respecting Concur's dynamic geolocation requirement.
  • Track every record transformation and Concur posting response in a full audit trail, with replay capability if a downstream approval fails.

Questions

Which direction does data move between Plex and SAP Concur?
The main flow is Plex into SAP Concur. Purchase orders and invoices move from Plex into Concur's Financial Integration system for approval and GL posting. Supplier and vendor data is synced to keep both systems aligned. ml-connector does not write records back to Plex; it reads procurement and GL account data and posts to Concur only.
Why does ml-connector poll Plex instead of waiting for a push?
Plex does not offer native webhooks for cloud or on-premise deployments, so polling is required. ml-connector polls the REST API on a configurable interval (typically 5 to 15 minutes), filtering by modified_date and created_date to avoid re-fetching historical records. For large historical loads, SFTP DataSources extracts can be used to bootstrap the initial sync.
How does the integration handle GL account mapping between Plex and SAP Concur?
Every Plex purchase order and invoice carries GL account and cost center codes. ml-connector validates that each GL code exists in SAP Concur before posting a Financial Integration document, and it maps Plex cost centers to Concur's cost center field so payroll and expense allocations land on the right accounts. If a mapping is missing, the record is flagged in the audit trail and skipped until the mapping is added.

Related integrations

Connect Plex and SAP Concur

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

Get started