Epicor Kinetic and Slack integration
Epicor Kinetic powers supply chain, purchasing, and accounting. Slack coordinates the teams that work with that data. Connecting the two keeps finance and operations teams in the loop without manual status reports. When an invoice arrives in Epicor, it surfaces in a Slack channel immediately. New vendor approvals, purchase order escalations, and GL exceptions flow to the right teams without re-keying or email chains. ml-connector handles Epicor's OAuth2 setup and poll-based sync model, posts the right details to Slack, and lets teams take action in Slack while maintaining the audit trail in Epicor.
What moves between them
Data flows from Epicor Kinetic into Slack. ml-connector polls Epicor on a schedule (e.g., every 15 minutes or hourly) for newly created or updated invoices, purchase orders, vendors, and GL exceptions using OData $filter queries on UpdatedOn. For each new record, ml-connector posts a structured message to a designated Slack channel with the record ID, amount, vendor name, status, due date, and other key fields. Optional workflow attachments include action buttons (Approve, Request Info, Escalate) that Slack teams can click, creating work events that ml-connector can log back to Epicor. Read-only sync ensures Slack is a view and notification layer; financial updates always originate in Epicor.
How ml-connector handles it
ml-connector stores both Epicor OAuth2 credentials and Slack bot token encrypted, refreshing the Epicor bearer token before expiry (approximately 1 hour) to avoid missed polls. It constructs OData $filter queries that check UpdatedOn timestamps against the last successful poll, using $top=100 and $skip pagination to avoid timeout on large result sets. For each record retrieved, ml-connector formats a Slack message payload with channel ID, message text, and optional attachments (buttons, links, rich formatting). It posts to Slack via the chat.postMessage REST endpoint and respects the 1-per-second rate limit by batching or staggering posts to a single channel. Slack signature verification happens on the callback endpoint (if webhook events are enabled for actions like Approve). On poll or post failures, ml-connector backs off exponentially and retries, maintaining an audit log of which Epicor records were posted when and to which Slack channel. Slack's non-expiring tokens mean no refresh overhead on that side, but Epicor token refresh is mandatory and tracked per customer.
A real-world example
A mid-sized discrete manufacturer uses Epicor Kinetic for purchasing and AP, and Slack for team coordination. The finance team reviews AP invoices offline and attends multiple approval workflows via email and spreadsheet exports. When a high-value invoice arrives or a PO escalates, the approval chain gets lost in chat and email. With Epicor Kinetic and Slack connected, each new invoice posts to a dedicated approvals channel with vendor, amount, due date, and terms. Approvers see the message, click Approve or Request Info directly in Slack, and the action logs back to Epicor with a timestamp and actor name. The finance team no longer needs a separate approval workflow tool; their work happens in Slack where they already communicate, and Epicor automatically records every decision for audit.
What you can do
- Poll Epicor Kinetic every 15 minutes (or on a schedule you choose) for new invoices, purchase orders, vendors, and GL account exceptions.
- Post structured finance alerts to Slack channels with record details, amounts, due dates, and vendor information.
- Support optional action buttons in Slack (Approve, Request Info, Escalate) that teams can click to update the Epicor record status or add notes.
- Refresh Epicor OAuth2 bearer tokens automatically to maintain uninterrupted polling across the typical 1-hour token expiry window.
- Maintain a full audit trail of which Epicor records were posted when, to which Slack channel, and whether each post succeeded or failed.
Questions
- Does every Epicor record post to Slack, or can I filter?
- ml-connector supports filtering by record type, status, and date range. For example, you can post only invoices over a threshold amount, or only POs from specific vendors. Filters are configured per Slack channel, so you might have one channel for all invoices and another for high-value POs only.
- What happens if the Slack API is slow or offline?
- ml-connector backs off and retries with exponential jitter. If a post to Slack fails after retries, the Epicor record is logged as unposted and included in the next poll window so it does not get lost. The audit trail shows the failure, so your team can investigate.
- Do Slack action buttons (like Approve) actually update Epicor?
- Yes, if you enable action buttons. When a team member clicks Approve or Request Info in Slack, the action posts back to a webhook endpoint that ml-connector maintains. The webhook updates the Epicor record status and adds a note with the approver name and timestamp, creating a full audit trail in both systems.
Related integrations
More Epicor Kinetic integrations
Other systems that connect to Slack
Connect Epicor Kinetic and Slack
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started