Webhooks and JSON integration for systems without a ready connector
If there is no ready connector for your ERP or software, there are two ways in. With webhooks, every change to a work order reaches your endpoint at once as signed JSON. With the generic JSON connection, production and scrap records are sent to your endpoint through the same queue and retry rules as the ERP connectors, and stock items and customers are read from your own URLs.
Last updated: 20 October 2026
Webhooks: work order events
In Settings › Webhooks you add an endpoint and choose the events it receives. The events sent today are about work orders:
| Event | When |
|---|---|
| workorder.created | A work order is created |
| workorder.updated | A work order changes |
| workorder.started | An operator starts the job |
| workorder.paused | The job is paused |
| workorder.resumed | The job is resumed |
| workorder.completed | The job is finished |
| workorder.cancelled | The work order is cancelled |
| workorder.deleted | The work order is deleted |
Each delivery is an HTTP POST with a JSON body of the form {event, timestamp, tenantId, data}. The headers carry the event name (X-Webhook-Event), the time (X-Webhook-Timestamp), a delivery ID (X-Webhook-Delivery) and the signature (X-Webhook-Signature). Only administrators can set up webhooks.
Signatures, retries and the delivery log
- Signature: an HMAC-SHA256 of the body with the webhook's own secret (it starts with whsec_), sent as sha256=<hex>. The receiver computes the same value and compares to know the request came from ModernMES. The secret is shown once when created and can be regenerated.
- Retries: a non-2xx response or a 30-second timeout is retried, up to 3 attempts in all.
- Delivery log: the status, response code and the start of the response of every delivery are on the webhook's detail page. "Test" sends a sample request.
- Safety: the target is re-checked on every attempt; requests are never sent to private-network or cloud-metadata addresses, and redirects are not followed.
Generic JSON connection: your own ERP transfer
The generic JSON connection is the kind of ERP integration for systems without a ready connector. Your ERP partner or developers write a small endpoint, and ModernMES sends production records to it:
- Push URL: {"type": "production_receipt", "data": {...}} for finished work and {"type": "scrap", "data": {...}} for scrap are POSTed. data carries the work order number, part code and name, unit, quantity, document date and time, project, operator and machine codes, and the record's unique reference.
- Pull URLs (optional): one for stock items and one for customers, returning [{"code","name","unit"}] or {"items":[...],"hasMore":true}. Pages are requested with ?page=1,2….
- Authentication: an optional bearer token. Signature: an optional secret signs timestamp.body with HMAC-SHA256, sent in X-ModernMes-Signature (sha256=…) and X-ModernMes-Timestamp.
Transfers follow the same rules as the ERP connectors: you choose when to send (when the part's last operation finishes, after every operation, or manually), the same finished job is queued only once, an unreachable endpoint is retried 8 times at intervals growing from 1 minute to 12 hours, and every transfer appears in the log.
Which one to use
| You want | Use |
|---|---|
| A dashboard, alerting or automation tool to know about work order changes as they happen | Webhooks |
| Finished work and scrap booked in your ERP, never lost and never booked twice | Generic JSON connection (ERP integration add-on) |
| Your stock items and customers in ModernMES | The generic JSON connection's pull URLs |
Frequently asked questions
Which events are sent as webhooks?
Today, work order events: created, updated, started, paused, resumed, completed, cancelled and deleted. Tell us if you need others.
How do I verify the signature?
Compute the HMAC-SHA256 of the raw body with the webhook's secret and compare it, in constant time, with the sha256= value in the X-Webhook-Signature header.
Can other systems write data into ModernMES?
Today data flows out of ModernMES through webhooks and the ERP/JSON connection, and stock items and customers come in through the JSON connection's pull URLs. If you need another system to write into ModernMES, talk to us about it.
Does the generic JSON connection cost extra?
It is part of the ERP integration add-on, which is included in Enterprise and can be added to the other plans. Webhooks do not need the add-on.
Related pages
- SAP Business One Integration for Shop Floor OutputModernMES books finished work in SAP Business One as a Goods Receipt and scrap as a Goods Issue through the Service Layer, and pulls items and customers.
- Dynamics 365 Business Central MES IntegrationModernMES pulls items and customers from Business Central and sends output and scrap as item journal lines through a partner-published API page. How it works.
- Odoo MRP Integration: Shop Floor Output to OdooModernMES turns each finished job into a completed Odoo manufacturing order, consuming the BoM, and books scrap. Odoo 16 to 18 with MRP and Inventory.
- What Is MES? Manufacturing Execution Systems ExplainedWhat a manufacturing execution system (MES) does, how it differs from ERP and MRP, where it sits in ISA-95, and what to look for when choosing one.