ml-connector
Epicor KineticSAP Concur

Epicor Kinetic and SAP Concur integration

Epicor Kinetic runs your manufacturing finance and supply chain. SAP Concur runs travel and expense reporting across your workforce. When Concur expense reports and invoices flow into Epicor Kinetic's accounts payable, your costs are captured in the right GL accounts and vendors without re-keying. ml-connector moves the data on a schedule triggered by Concur events, and keeps both systems in sync across vendors, cost centers, and expense categories.

How Epicor Kinetic works

Epicor Kinetic is a cloud and on-premises ERP platform that exposes vendors, purchase orders, AP invoices, GL accounts, and cost dimensions through REST OData v4 endpoints, documented per-tenant at https://<tenant>.epicorsaas.com/<instance>/api/v2/odata/<Company>/. Cloud instances authenticate with OAuth2 client credentials or API Key; on-premises instances use Basic Auth or Token Resource Service for short-lived bearer tokens. Since Epicor publishes no native outbound webhooks, records are retrieved by polling with OData $filter on UpdatedOn or CreatedOn, offset-paginated at $top=100&$skip=0. API Key headers (x-api-key) are required in addition to bearer tokens.

How SAP Concur works

SAP Concur exposes expense reports, payment request invoices, vendors, and cost allocations through REST API endpoints split across multiple datacenters (us, emea, cn). Authentication is OAuth 2.0 with password grant using credtype=authtoken and company-level credentials; the token response contains the geolocation that must be used for all subsequent API calls. Concur supports webhooks through its Event Subscription Service (ESS) for topics like public.concur.expense.report and public.concur.invoice.paymentrequest, with at-least-once delivery and automatic retry on 5xx and 401 errors. Bearer tokens live 1 hour; refresh tokens valid 6 months.

What moves between them

The main data flow runs from SAP Concur into Epicor Kinetic. When an expense report or payment request invoice is submitted in Concur, ml-connector receives the webhook, extracts the expense items and vendor allocations, and writes them into Epicor's AP invoices, mapped to the matching vendors and GL accounts configured in Epicor. Concur vendors are reconciled against Epicor's vendor master so invoices land on existing vendors only. Cost allocations from Concur expense categories map to Epicor GL accounts and cost centers. Reference data such as vendor validation tables is synced from Epicor into Concur to ensure allocations succeed.

How ml-connector handles it

ml-connector stores both credential sets encrypted and presents them at the API boundary. For SAP Concur, it exchanges the 24-hour bootstrap auth token once for an OAuth access token and refresh token, caches the token endpoint geolocation returned during exchange, and routes all subsequent Concur API calls to that geolocation rather than hardcoding a region. It subscribes to up to 5 ESS topics (expense reports, invoices, and optionally user and PO changes) so incoming Concur events trigger immediate syncs. For Epicor Kinetic, it stores the tenant-specific API endpoint URL per customer and includes the required x-api-key header on every call in addition to the bearer token. Since Epicor publishes no webhook surface, ml-connector polls Epicor's GL accounts and vendor master on a schedule to sync reference data into Concur so payroll allocations and vendor codes are valid before an expense enters Concur. When Concur sends an invoice webhook, ml-connector maps Concur's cost center and expense category to the matching Epicor GL account and vendor using a configurable mapping, then posts the transaction into Epicor's APInvoices using the two-step GetNewAPInvoice and UpdateMaster pattern required by Epicor's API. If a Concur webhook times out or Epicor returns a 401 token-expiry error, ml-connector retries with an exponential backoff and tracks the attempt count in its audit log, so any failed record can be manually replayed once the underlying issue (auth renewal, GL account missing) is resolved.

A real-world example

A mid-sized manufacturing company with multiple plants uses Epicor Kinetic for supply chain and factory finance, and SAP Concur for all employee travel and expense reporting. Before the integration, the finance team reviewed each week's expense submissions in Concur, exported them into spreadsheets, and manually entered the costs into Epicor's AP module, allocating each line to the correct GL account and plant cost center. The process was slow, error-prone, and delayed month-end close by 3-5 days as finance reconciled Concur totals against the posted AP invoices in Epicor. With Epicor Kinetic and SAP Concur connected, each approved expense report automatically flows into Epicor as an AP invoice, allocated to the GL account and cost center from Concur's cost allocation fields. Finance now reviews the posted invoices directly in Epicor without manual re-entry, month-end close starts with 100% of expense data already recorded, and the finance team reclaimed a full business day per pay cycle.

What you can do

  • Automatically post approved SAP Concur expense reports and payment request invoices into Epicor Kinetic's accounts payable, allocated to GL accounts and cost centers.
  • Map Concur vendors and expense categories to Epicor's vendor master and GL account structure, so every invoice lands on a valid account.
  • Sync Epicor's GL account and vendor reference data into Concur so expense allocations and vendor codes are validated before submission.
  • Handle SAP Concur's OAuth2 authentication across multiple datacenters and Epicor's API Key requirement and tenant-specific endpoints.
  • Receive Concur invoice and expense report webhooks, retry failed posts to Epicor with exponential backoff, and maintain a full audit trail on every transaction for compliance and replay.

Questions

Which direction does data move between Epicor Kinetic and SAP Concur?
The primary flow is SAP Concur into Epicor Kinetic. Approved expense reports and payment request invoices move from Concur into Epicor's AP module, mapped to vendors and GL accounts. Reference data such as GL accounts and vendor master is synced from Epicor into Concur so cost allocations and vendor codes are valid before expenses are submitted.
How does ml-connector handle SAP Concur's multi-datacenter routing and Epicor's API Key requirement?
ml-connector stores the OAuth token and extracts the geolocation returned during the initial token exchange, then routes all subsequent SAP Concur API calls to that geolocation automatically. For Epicor Kinetic, ml-connector includes the required x-api-key header on every API call in addition to the bearer token, and accepts the full tenant-specific endpoint URL per customer since Epicor publishes no shared base address.
What happens if a Concur expense fails to post to Epicor?
ml-connector logs the failure with the full request and response in its audit trail, retries with exponential backoff on transient errors like 401 token expiry or 429 rate limiting, and surfaces permanent failures (like a missing GL account) so the finance team can resolve the root cause and replay the transaction once it is fixed.

Related integrations

Connect Epicor Kinetic and SAP Concur

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

Get started