How to Add AI to Epicor Kinetic On-Premises Without Moving Your Data
how to add AI to Epicor Kinetic on-prem
Also searched as
- Epicor Kinetic AI integration without cloud
- private LLM for Epicor Kinetic on-premises
- Epicor Kinetic ChatGPT alternative on-prem BAQ REST
- air-gapped AI assistant for Epicor Kinetic
Short answer
You can run a useful AI assistant on an on-premises Epicor Kinetic estate without sending data to a public cloud. Read through BAQs and the REST v2 OData layer (or a read-only SQL Server replica of the Erp schema), index documents locally, serve an open-weight model with vLLM or Ollama on your own GPUs, and route any write through supported Epicor business objects with a human approval step.
Applies to: Epicor Kinetic on-premises (SQL Server back end, REST v2 available) in single-company and multi-company installs; the same pattern applies to air-gapped networks with a local model registry
How to stand up a private AI layer on Epicor Kinetic on-prem
- 1Inventory the questions people actually ask: open jobs and due dates, part availability by warehouse, quote and order status, supplier lateness, MRP pegging. Each question maps to one or more BAQs or Erp schema tables.
- 2Build or reuse BAQs for those questions in Business Activity Query Designer, mark them as executable through the API, and keep them narrow (named columns, date filters) instead of exposing whole tables.
- 3Create a dedicated Epicor service user and API key for the integration, and decide whether calls run as that service identity or on behalf of the end user with their own token (the second option preserves Epicor security natively).
- 4Stand up a read-only SQL Server reporting copy (an Always On readable secondary, log shipping or a restored backup) for bulk and historical questions so analytical load never touches the production database.
- 5Build a retrieval index over documents and attachments (job travelers, drawings, inspection reports, supplier certs, SOPs) on a local vector store, storing the source system, company, plant and ACL tags with every chunk.
- 6Expose approved read actions through a tool server (MCP or a plain HTTP tool API): for example get_job_status, find_part_availability, list_late_purchase_orders. The model never receives a connection string.
- 7Serve an open-weight model with vLLM or Ollama on local GPUs, route every prompt and tool call through a gateway that logs user, tool, parameters and row counts to an append-only audit store.
- 8Pilot read-only with a small group for several weeks, then add drafts (a purchase order or quote saved as a draft), then approved actions that call the relevant business object after a person confirms.
Data access paths in Kinetic
Kinetic exposes data three useful ways. The REST v2 OData service publishes business objects (for example Erp.BO.JobEntrySvc) and, through the BaqSvc endpoint, any BAQ you have enabled for the API. The SQL Server database holds the Erp schema (tables such as Erp.JobHead, Erp.JobMtl, Erp.JobOper, Erp.PartTran, Erp.Part, Erp.PartBin, Erp.OrderHed, Erp.OrderDtl, Erp.POHeader, Erp.PODetail), and Epicor Functions and BPM directives let you add server-side logic behind a defined contract.
For an assistant, BAQs are usually the best first path. They are named, versioned, reviewable by the business, and they run under Epicor security. Direct SQL is better for history, trend questions and cross-table analytics, because you can index and tune a replica freely. Do not point a model at production with a generic SQL tool: give it parameterised, pre-approved queries.
Use REST v2 with the API key header plus the user credential or token your site configured. The URL shape for a BAQ is /api/v2/odata/{Company}/BaqSvc/{BAQId}/Data and for a business object is /api/v2/odata/{Company}/Erp.BO.JobEntrySvc/JobHeads.
GET https://erp.example.local/ERP/api/v2/odata/EPIC03/BaqSvc/AI_OpenJobs/Data?$filter=ReqDueDate lt 2026-11-30&$top=50 X-API-Key: <integration key> Authorization: Bearer <user or service token> Accept: application/json
-- Read-only replica query for the same question SELECT TOP 50 jh.JobNum, jh.PartNum, jh.ProdQty, jh.ReqDueDate FROM Erp.JobHead jh WHERE jh.Company = 'EPIC03' AND jh.JobClosed = 0 AND jh.JobComplete = 0 ORDER BY jh.ReqDueDate;
Reference architecture, including air-gapped
The components are: a readable SQL Server copy for analytics, a change feed (SQL Server change tracking or CDC on the replica) that keeps the retrieval index current, a document extractor for attachments and the files your Epicor install references, a vector store, a tool server with approved read actions, a model server (vLLM for throughput, Ollama for small pilots), and a gateway with an audit log. Everything runs inside your network.
For an air-gapped site, load model weights, Python wheels and container images through a controlled transfer once, pin versions, and keep the embedding model local too. Nothing in this design calls an external API at run time. Updates then become a scheduled change window like any other server patch, with the model version recorded in the audit log.
Keep the model out of the data path where you can. Let the tool server run the query and return a bounded result (row cap, column allow list) and let the model only phrase and reason over what it receives. That one rule removes most prompt injection and data leakage risk.
Permissions: making the assistant respect Epicor security
Kinetic security is built from security groups, menu and method permissions, company and plant assignments, and field or row restrictions applied through BPM and BAQ design. The safest pattern is to call the API as the end user (token passthrough), so Epicor itself enforces what that person can see. The assistant then needs no copy of the security model.
If you must use a service identity for the retrieval index, mirror access into the index: store company, plant and the security group list as filter metadata on every chunk, resolve the asking user's groups at query time, and apply the filter before retrieval. Documents with unknown ACLs should be excluded rather than defaulted to open.
Test it adversarially. Ask as a buyer for cost rollups only finance can see, and as a user in plant A for plant B jobs. Each denied case is a regression test you rerun after every Epicor upgrade, since security group changes and new BAQs shift the surface.
Write-back, sizing and phased rollout
Write-back goes only through supported business objects, Epicor Functions or DMT-style loads, never through direct SQL. The assistant prepares a payload (for example a purchase order change) and shows it to the user as a diff; a person approves; the call runs under that person's identity so BPM directives and audit fields fire normally. Keep a rollback note for each action type.
Rough sizing for a mid-size plant: 100 to 300 named users, 20 to 40 percent active daily, typically needs one to two 24 GB to 48 GB class GPUs for a 7B to 32B parameter model, plus 16 to 64 GB of RAM for the vector store and a few hundred GB of storage for indexed documents. Concurrency, not user count, drives GPU needs, so measure peak requests before buying.
Roll out in three phases: read-only Q&A on BAQs for a pilot group; drafts and summaries (job status reports, supplier chasers); then approved actions for narrow, reversible transactions. Hold each phase for a few weeks and review the audit log before moving on.
# Example tool definition exposed to the model (read only)
{
"name": "get_job_status",
"description": "Return status, due date and open operations for one job",
"inputSchema": {"type": "object", "properties": {"company": {"type": "string"}, "job_num": {"type": "string"}}, "required": ["company", "job_num"]},
"backend": "BaqSvc/AI_JobStatus"
}Try it here, free
Epicor REST API v2 URL Builder
Fill in server, instance, company and service to get a ready OData URL, a curl command and the required headers for the Epicor REST API v2.
Common pitfalls
- !Giving the model a generic SQL tool against production, which allows unbounded scans, schema leakage and accidental load.
- !Using one shared service account for everything, so every user effectively inherits the integration's access.
- !Indexing attachments without their access metadata, so a drawing restricted in Epicor becomes searchable by everyone.
- !Building BAQs that return whole tables instead of named columns, which inflates tokens and widens exposure.
- !Skipping a regression test of security cases after Kinetic upgrades or new BAQ releases.
How an ERP-grounded AI assistant handles this
ERPray is built for this pattern on Epicor: a grounded assistant that answers from approved BAQs and REST calls, shows the query it ran, respects Epicor roles, and can run entirely on your own GPUs. Where the questions are simple and fixed, Epicor's own dashboards and BAQ reports may be enough; the assistant earns its place on the cross-module questions that currently need an analyst.
Frequently asked questions
Can an AI assistant work with Epicor Kinetic on-prem without the cloud?
Yes. Read data through BAQs and REST v2 or a read-only SQL Server replica, index documents locally, and serve an open-weight model with vLLM or Ollama on your own GPUs. Nothing in that design needs an external API at run time, which also makes an air-gapped deployment feasible.
Should the assistant query SQL Server directly or use the REST API?
Use BAQs and REST for operational questions so Epicor security applies, and a read-only replica for history and analytics. Avoid direct writes to the database entirely. Direct SQL on production for a model is the pattern most likely to cause performance problems and data exposure.
How do I stop the assistant showing data a user should not see?
Prefer calling the API with the end user's own token so Epicor enforces its groups and plants. If you use a service account for retrieval, copy company, plant and group metadata onto every indexed chunk and filter on it before retrieval, then test denied cases after each upgrade.
How much GPU do we need?
It depends on peak concurrent requests, not named users. Many mid-size plants fit on one or two 24 GB to 48 GB GPUs with a 7B to 32B model. Measure real question volume in a pilot, then size with a calculator before purchasing hardware.
Related
Epicor REST API v2: OData Filter, Select and Expand Examples
Epicor Kinetic REST v2 exposes business objects at /api/v2/odata/{Company}/{Service}/{Entity} and BAQs at /api/v2/odata/{Company}/BaqSvc/{BAQId}/Data. Send an API key in the x-api-key header plus credentials, and use standard OData options: $filter, $select, $top, $skip, $orderby and $expand.
How-toFixing a Slow Epicor BAQ (Business Activity Query)
A slow BAQ in Epicor is usually caused by unindexed join columns, a subquery or calculated field forcing a table scan, or the BAQ pulling far more rows than the dashboard actually displays before filtering client-side. Fix it by reading the SQL Server execution plan Epicor generates, moving filters into the BAQ criteria instead of the dashboard filter panel, and replacing subqueries with joins where possible.
AdvancedHow to create and call an Epicor Function
Open Function Studio from the main menu (Customization > Function Studio) or from inside a BPM designer's Call Context widget, define a Library and Function with typed inputs/outputs, write the logic in the C# widget, then compile and test with the built-in test harness before calling it from a BPM directive, a dashboard, or another function.
AdvancedEpicor ERP 10 AI Integration Without Cloud: Private Architecture
Epicor ERP 10 can feed a private AI assistant through its REST service layer, executable BAQs and a read-only copy of the SQL Server database, with the model served locally on your GPUs. The limits are version-specific: check which REST generation and security features your 10.x release has before you design the tool layer, and plan for the upgrade path to Kinetic.
AdvancedHow to Add AI to Prophet 21 On-Premises Without Moving Your Data
Prophet 21 runs on SQL Server and offers Epicor-provided API layers for reads and transactions, so a private assistant can be built on a read-only reporting copy plus the documented APIs, with an open-weight model on your own GPUs. Distribution questions about stock, pricing, open orders, customers and purchasing are the strongest fit.
Error fixFixing Epicor BusinessObjectException: BPM Directive Errors
A BusinessObjectException that says "A Business Process Management (BPM) directive has raised the following error" means a directive on that business object stopped the transaction, either deliberately via a Raise Exception widget or accidentally via an unhandled .NET error in Custom Code. Expand the InnerException on the error dialog to see the real message and the directive name, then open BPM Designer for that object and method to find the widget that fired.
AI for ERPAI for Epicor Kinetic, Beyond What Prism Covers
Add AI to Epicor Kinetic beyond Prism: private LLM over BAQs, BPM data, and REST v2, on-prem or private cloud, with honest guidance on when Prism already covers you.
AI for ERPPrivate AI for Epicor Kinetic Cloud, Outside the Multi-Tenant Boundary
Run a private LLM on Epicor Kinetic private cloud or Kinetic Cloud data via BAQs, REST v2 and Data Fabric, keeping sensitive manufacturing data off shared AI.
Stuck on Epicor Kinetic (on-premises)?
Talk to engineers who work inside Epicor Kinetic (on-premises) every week, and who build private AI that answers these questions from your own ERP data.
Keep exploring
Free tools
- Epicor REST API v2 URL BuilderFill in server, instance, company and service to get a ready OData URL, a curl command and the required headers for the Epicor REST API v2.
- Epicor BAQ OData REST URL BuilderBuilds Epicor REST v2 OData URLs and curl commands for BAQs and business object services, with API key header and filters.
- Epicor Kinetic AI Assistant Sizing and Value CalculatorEstimate GPUs, vector index size, hours saved and payback for a private AI assistant on Epicor Kinetic on-premises.
ERP fixes and how-tos
- Epicor ERP 10 AI Integration Without Cloud: Private ArchitectureAdd a private AI assistant to Epicor ERP 10 on-prem: REST and BAQ access, SQL replica, Service Connect, local LLM, role mirroring, audit and phased rollout.
- How to Add AI to Prophet 21 On-Premises Without Moving Your DataPrivate AI assistant for Epicor Prophet 21 on-prem: SQL Server views, P21 API options, local LLM, role and location filters, audit and rollout steps.
- Epicor Kinetic API Documentation: Where It Lives and How the URLs WorkWhere the Epicor Kinetic REST API documentation lives, the v1 and v2 URL patterns, how authentication works, and what to use instead of an SDK.
AI on your ERP
- Private AI for Epicor Kinetic Cloud, Outside the Multi-Tenant BoundaryRun a private LLM on Epicor Kinetic private cloud or Kinetic Cloud data via BAQs, REST v2 and Data Fabric, keeping sensitive manufacturing data off shared AI.
- AI for Epicor Kinetic, Beyond What Prism CoversAdd AI to Epicor Kinetic beyond Prism: private LLM over BAQs, BPM data, and REST v2, on-prem or private cloud, with honest guidance on when Prism already covers you.
Integrations
- How to build an MCP server for Epicor KineticDesign a Model Context Protocol server for Epicor Kinetic: which read tools to expose, BAQ and REST v2 mapping, auth, stdio vs HTTP transport and audit logging.
- How to add AI agents to Epicor KineticHow to add AI agents to Epicor Kinetic: a tool layer over the REST v2 API and BAQs, MRP exception triage, PO expediting, and human approval before any write.