ml-connector
Epicor KineticAsana

Epicor Kinetic and Asana integration

Epicor Kinetic runs manufacturing and finance. Asana runs the team's work and approvals. Connecting the two lets procurement and finance approve and track ERP documents where staff already work, without anyone logging into the ERP for routine sign-off. New purchase orders and AP invoices in Epicor become Asana tasks carrying the document details, and when a task is completed or its custom fields are filled in, ml-connector writes the result back to Epicor. ml-connector handles the very different APIs on each side and keeps the two in step on a schedule you control.

How Epicor Kinetic works

Epicor Kinetic exposes vendors, purchase orders, AP invoices, payments, GL accounts, customers, and parts as OData v4 REST endpoints on a tenant-specific URL, with the company segment required in every v2 path. Authentication is HTTP Basic plus an API Key in the x-api-key header, or OAuth2 client credentials through Epicor IdP, where the API Key is still required alongside the bearer token. Epicor Kinetic has no native outbound webhooks, so changed records are read by polling a date filter such as UpdatedOn or a Business Activity Query. Pagination is OData $top and $skip with a default page size of 100.

How Asana works

Asana exposes tasks, projects, portfolios, users, teams, and custom fields through its REST API at app.asana.com, using a Personal Access Token or OAuth2 authorization code, both passed as a Bearer token. It has no native invoice, purchase order, payment, or GL account objects, so any financial detail is carried in customer-defined custom fields on tasks and projects. Asana supports push webhooks: registration requires an X-Hook-Secret handshake, and each event POST is signed with an X-Hook-Signature HMAC-SHA256 digest. Webhooks auto-delete after 24 hours of failed delivery, and list responses return only gid and name unless opt_fields names the fields you need.

What moves between them

The outbound flow runs from Epicor Kinetic into Asana. ml-connector polls Epicor purchase orders and AP invoices, and for each new or changed record it creates or updates an Asana task with the document number, vendor, amount, and due date written into mapped custom fields, grouped into the project that represents the approval queue. The return flow runs from Asana into Epicor: when a task is completed or an approval custom field changes, the connector updates the matching Epicor record, for example flagging a purchase order approved through the business object. Asana users are read into Epicor for assignment and buyer matching. Outbound polling follows your schedule; the return path is driven by Asana task webhooks with a scheduled poll as backfill.

How ml-connector handles it

ml-connector stores both credential sets encrypted, sends the Epicor API Key in the x-api-key header on every call alongside Basic or OAuth2 identity, and refreshes the Epicor bearer token when a call returns 401, while sending the Asana Bearer token on its requests. Because Epicor Kinetic has no webhooks, the connector polls purchase orders and AP invoices with an OData date filter and pages through results with $top and $skip. The return path registers an Asana webhook, completes the X-Hook-Secret handshake, and verifies the X-Hook-Signature HMAC on every event before acting; it periodically re-registers because Asana deletes webhooks after 24 hours of failures. Epicor document numbers are stored on the Asana task as custom fields, and the Asana task gid is stored against the Epicor record, so each side dedupes and neither creates a duplicate on re-sync. Asana custom fields are resolved by gid rather than name, and opt_fields is set so task reads return the mapped fields. Epicor writes that touch GL lines use UpdateMaster, and Asana rate limits returning HTTP 429 are retried with backoff.

A real-world example

A mid-sized discrete manufacturer with around 300 employees runs Epicor Kinetic for production, procurement, and finance, while the operations and finance teams live in Asana day to day. Before the integration, every purchase order over a threshold needed sign-off, but approvers rarely logged into Epicor, so buyers chased approvals by email and POs sat open for days, delaying receipts and month-end accruals. With Epicor Kinetic and Asana connected, each new purchase order appears as an Asana task in the approvals project with the vendor and amount in custom fields, the approver completes it in the tool they already use, and ml-connector flags the PO approved in Epicor. Approval lead time drops and finance can see what is still outstanding without opening the ERP.

What you can do

  • Create Asana tasks from new and updated Epicor Kinetic purchase orders and AP invoices, with document details in custom fields.
  • Write task completion and approval custom fields from Asana back to the matching Epicor record.
  • Sync Asana users into Epicor so tasks and buyer assignments line up across both systems.
  • Bridge the Epicor API Key plus tenant login and the Asana Bearer token, refreshing tokens as they expire.
  • Poll Epicor on your schedule because it has no webhooks, and verify Asana webhook signatures on the return path.

Questions

Which direction does data move between Epicor Kinetic and Asana?
Both directions. Purchase orders and AP invoices move from Epicor into Asana as tracking tasks, and task completion plus approval custom fields move from Asana back into Epicor to update the matching record. Asana users are also read into Epicor for assignment matching.
Asana has no invoice or purchase order objects, so how does the integration work?
Asana is a work management tool with no native finance objects, so the Epicor document details such as PO number, vendor, and amount are written into customer-defined custom fields on an Asana task. The task itself represents the approval or tracking step, and ml-connector maps those custom fields by gid in both directions so the financial context travels with the work.
How does the integration get changes out of Epicor Kinetic without webhooks?
Epicor Kinetic has no native outbound webhooks, so ml-connector polls the purchase order and AP invoice endpoints on a schedule using an OData date filter to pick up records changed since the last run. The Asana side does use push webhooks for the return path, with the X-Hook-Signature HMAC verified on every event before the connector updates Epicor.

Related integrations

Connect Epicor Kinetic and Asana

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

Get started