ml-connector
Epicor KineticTwilio

Epicor Kinetic and Twilio integration

Epicor Kinetic powers manufacturing, distribution, and service operations. Twilio powers communications. Connecting them lets you notify teams in real time when critical business events happen, without manual intervention or email delays. A purchase order escalates, a supplier invoice is due soon, or a service appointment arrives - Twilio sends an SMS or voice alert to the right people on their phones. ml-connector bridges the two, polling Epicor for new or changed records and routing them to Twilio for immediate delivery.

How Epicor Kinetic works

Epicor Kinetic exposes purchase orders, vendors, AP invoices, AP payments, sales orders, customers, parts, and GL accounts through OData v4 REST endpoints, with Company segment required in the URL path. Authentication is flexible: Basic Auth with username and password, API Key in the x-api-key header combined with a bearer token, or OAuth2 client credentials for cloud SaaS tenants. Because Epicor has no native outbound webhooks, integration is polling-based: ml-connector queries with OData $filter on timestamp fields like UpdatedOn to retrieve records changed since the last sync, and implements offset pagination with $top and $skip parameters. Bearer tokens expire after about one hour and require refresh logic.

How Twilio works

Twilio exposes SMS, voice calls, email, two-factor verification, and conversation APIs across multiple endpoints: api.twilio.com for core messaging and calls, messaging.twilio.com for messaging services, verify.twilio.com for 2FA, and studio.twilio.com for flow automation. Authentication uses HTTP Basic Auth with either an Account SID and Auth Token or an API Key SID and API Secret; API Keys support fine-grained scope control for restricted access. Twilio delivers webhooks for real-time status callbacks on messages, calls, and verification events, and handlers must be idempotent because webhook delivery is not guaranteed exactly-once. Request bodies use application/x-www-form-urlencoded format, and webhook signatures are validated using HMAC-SHA1 with the Auth Token.

What moves between them

Records flow from Epicor Kinetic to Twilio. ml-connector polls Epicor for new or updated purchase orders, vendor invoices, and service orders on a configurable schedule, extracts key details and recipient phone numbers from Epicor's data, and sends SMS or voice messages through Twilio's messaging APIs. Twilio status callbacks return delivery confirmations and failure codes, which ml-connector logs in the audit trail. The integration is one-way, so Twilio does not write data back to Epicor.

How ml-connector handles it

ml-connector runs a scheduled poll against Epicor's OData endpoints using the configured API Key and Bearer token, filtering on UpdatedOn to fetch only records changed since the last sync. It extracts vendor phone numbers, manager contact information, or distribution lists from Epicor's customer and vendor records, and looks up their phone format against a saved mapping table. For each matched record, ml-connector builds a notification message and posts it to Twilio's SMS or voice APIs using the configured Twilio Account SID and Auth Token. When Twilio returns a message SID, ml-connector subscribes to the status callback webhook so it can track delivery (sent, delivered, failed, undelivered). If a Twilio call returns 429 (rate limit), ml-connector backs off and retries. Webhook handlers are stateless and idempotent to survive retries. Because both systems use different timestamp formats and Epicor requires a Company segment in every URL, ml-connector maintains per-tenant endpoint configuration and performs a query-time sanity check to ensure the Company value is not null.

A real-world example

A mid-sized manufacturing company runs Epicor Kinetic for procurement and operations. When a high-value purchase order is created or when a key supplier invoice is approaching due date, the operations manager needs to know immediately, not in an email digest hours later. Before the integration, managers checked Epicor daily and learned about critical events only during their next Epicor login. With Epicor Kinetic and Twilio connected, the moment a PO exceeds the approval threshold or an invoice enters its due-date window, ml-connector queries Epicor, looks up the manager's phone number, and sends an SMS alert. Voice calls can escalate urgent situations. The manager receives the alert on their phone within seconds, can take action immediately, and the full message delivery history is logged for audit.

What you can do

  • Trigger SMS and voice messages from Epicor Kinetic business events by polling on a schedule and routing through Twilio.
  • Store recipient phone numbers in Epicor customer and vendor records and look them up at message time for dynamic routing.
  • Track message delivery status through Twilio webhooks and log all sent, delivered, failed, and undelivered outcomes.
  • Authenticate Epicor with API Key and Bearer token, and Twilio with Account SID and Auth Token, storing credentials encrypted.
  • Poll Epicor's OData endpoints with timestamp filtering and offset pagination, with retries on rate limits and full audit trail on every message sent.

Questions

Does ml-connector write data back to Epicor from Twilio status callbacks?
No. ml-connector polls Epicor to read purchase orders, invoices, and vendor information, then sends that data through Twilio for messaging. Twilio status callbacks tell ml-connector whether a message was delivered or failed, and ml-connector logs that outcome in the audit trail, but does not write business data back to Epicor. The flow is read-only from Epicor.
How does ml-connector handle Epicor's lack of native webhooks?
Because Epicor Kinetic has no outbound webhooks, ml-connector polls on a configurable schedule using OData $filter on timestamp fields like UpdatedOn. It fetches only records that have changed since the last sync, so polling is efficient even with large datasets. The poll frequency can be tied to your operations rhythm, such as every hour or every four hours.
What happens if a Twilio message fails to deliver or Epicor returns a rate-limit error?
When Twilio returns a non-2xx status or a 429 rate-limit response, ml-connector backs off and retries with exponential jitter. If a retry ultimately fails, the failed message is logged with the full error reason in the audit trail and flagged for review. Epicor rate limits are not publicly documented, so ml-connector defaults to conservative polling intervals and backs off on 429 responses from Epicor as well.

Related integrations

Connect Epicor Kinetic and Twilio

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

Get started