Integrations
Connecting Your ERP
Webhook- and n8n-based ERP integration architecture for self-hosted deployments and customer-side validation.
The approach — n8n as the integration layer
EasyFlow does not try to embed every ERP connector directly inside the product. Instead it uses n8n and a webhook-based ingestion layer so organizations can connect their own ERP environment without turning EasyFlow into a vendor-specific integration monolith.
n8n handles the hard part: authentication, API pagination, field mapping, polling, and retry logic. EasyFlow receives normalized events via a secure webhook and routes them through the workflow engine.
Why n8n + webhooks instead of custom connectors
| Typical custom connector burden | EasyFlow integration approach |
|---|---|
| Write and maintain vendor-specific connector code inside the product | Keep EasyFlow vendor-neutral and use webhook ingestion plus external automation |
| Own token refresh and API edge cases for every ERP | Let n8n or the customer's chosen integration layer handle those concerns |
| Store ERP credentials in the main app | Keep credentials in the customer's integration environment |
| Hard-couple product releases to vendor API behavior | Keep the ingestion contract stable and let source-side mapping evolve independently |
| Rebuild similar plumbing for each new ERP | Reuse the same normalized event contract across many sources |
Setup — 5 steps
It starts automatically with docker compose. Create your n8n account on first visit.
Go to Workflows → Import From File. Open one of the example templates in examples/n8n-workflows/. Today the repo includes SAP and Oracle examples, and the same pattern can be extended to other systems.
The imported workflow will prompt for your ERP's URL and API credentials. Enter them in n8n's credential manager. EasyFlow never sees or stores your ERP credentials.
Go to Integrations in the EasyFlow sidebar. Copy the X-Webhook-Token for your workspace. Paste it into the n8n workflow's header field.
Click Activate. n8n will start polling or receiving events from your ERP and pushing normalized data into EasyFlow.
Direct webhook (no n8n needed)
If your ERP supports outbound webhooks, you can skip n8n entirely and send events directly to EasyFlow:
curl -X POST \
http://localhost:8000/api/webhooks/inbound/your-tenant-slug \
-H "Content-Type: application/json" \
-H "X-Source: sap" \
-H "X-Webhook-Token: your-token-from-integrations-page" \
-d '{
"event_type": "purchase_order_created",
"source": "sap",
"data": {
"purchase_order_id": "PO-4901",
"supplier_name": "Supplier Alpha",
"quantity": 500,
"currency": "GBP",
"status": "pending_approval"
}
}'Supported ERP systems
| System type | Method | What exists today | Validation status |
|---|---|---|---|
| SAP S/4HANA | n8n OData + scheduled polling | Example template in repo | Local template + payload pathway implemented |
| Oracle ERP Cloud | n8n REST API | Example template in repo | Local template + payload pathway implemented |
| Microsoft Dynamics 365 | n8n Dataverse API | Planned source type | Production validation pending |
| NetSuite | n8n REST / SuiteQL | Planned source type | Production validation pending |
What data flows in
| Event type | Triggered when |
|---|---|
| purchase_order_created | A new PO is raised in the ERP |
| purchase_order_approved | A PO approval is recorded |
| stock_updated | Stock level changes for any SKU |
| stock_low_alert | Stock falls below the reorder point |
| shipment_dispatched | A shipment leaves the warehouse |
| shipment_delivered | A delivery is confirmed |
| supplier_confirmed | A supplier accepts a PO |
| workflow_trigger | A custom event from your ERP or script |