Integrations · 10 min read · May 2026 · Jakub Roszkiewicz · CTO

Jira + ERP + MES:
integration step by step

Dataflow architecture, Comarch ERP XL REST API, synchronization with the production environment and 5 pitfalls that cost companies months of delay.

Imagine a machine on the shop floor has just stopped an important order. The MES has known about it for a few minutes. The ERP still sees the order as "in progress". The IT help desk has not received any ticket yet. When the technician finally opens Jira, they lose more minutes gathering context from three different systems. The lack of integration between IT, ERP and production systems means that important operational events get lost in silos or reach the help desk with a delay. This article describes how to build the integration that prevents that: from architecture, through REST APIs, to production monitoring.

3
systems to integrate:
Jira, ERP and MES
5
typical integration pitfalls
described step by step
3
monitoring layers for a
production integration

Table of contents

  1. Why integrating three systems is hard
  2. Integration architecture: reference model
  3. Jira ↔ ERP step by step (Comarch ERP XL + REST API)
  4. Jira ↔ MES: specifics of the production environment
  5. Middleware tools: n8n, Make, MuleSoft, custom microservice
  6. 5 typical pitfalls and how to anticipate them
  7. Maintaining and monitoring the integration
  8. FAQ

Why integrating three systems is hard

Integrations Jira-ERP sound like a weekend project until you start. Reality turns out to be far more complex, and for concrete architectural reasons, not random difficulties.

Three different data models

Jira thinks in terms of issue, project, workflow, SLA. ERP (Comarch, SAP, Sage) sees the world through orders, invoices, counterparties, fixed assets. MES operates on work orders, operations, machines, batches, quality. These three ontologies do not map 1:1; every transformation requires business decisions, not just technical ones.

Three different change frequencies

The ERP changes data on a scale of minutes to hours (new order, invoice status change). Jira operates on minutes to days (ticket opening, status change, comment). MES generates events every second: machine alarms, production parameter changes, sensor readings. A synchronous integration that works for the ERP can completely fall over under the load from the MES.

Three different API contracts

Jira offers a modern REST API with pagination, webhooks and good documentation. Comarch ERP XL uses a native API based on a DLL library (CDN_API.DLL); integration with Jira requires middleware or a proxy service. Older installations also use a SOAP or COM+ interface. MES systems often have no REST API at all - they communicate over OPC-UA, MQTT, CSV files or proprietary binary protocols. That requires separate adapters for each layer.

Architecture rule no. 1: Before you write the first line of integration code, map out the answers to three questions: which system is the source of truth for each data class? What is the maximum acceptable synchronization latency? What should happen when one of the systems is unavailable?

Integration architecture: reference model

The most durable pattern for Jira+ERP+MES integration is event-driven hub-and-spoke with a central middleware layer. Avoid point-to-point integration: with N systems it generates N x (N-1)/2 connections - for 3 systems that is 3 connections, for 5 systems it is already 10.

Jira SM / SW
tickets · SLA · incidents
⟵⟶
Middleware / Event Bus
n8n · MuleSoft · Make · custom microservice
⟵⟶
Comarch ERP XL
orders · counterparties · fixed assets
MES system
orders · machines · quality · batches

Hub-and-spoke model: each system talks only to the middleware

Responsibility split (MDM)

It is critical to establish a Master Data Management split - which system owns which data:

Every system can read data from the other systems (through middleware). Writes should happen only through the master system: middleware never overwrites data while bypassing the owner. If you want to understand general system integration patterns via API (REST, webhooks and middleware), read our comprehensive guide to system integration.

Jira ↔ ERP step by step (Comarch ERP XL + REST API)

Below we cover a concrete, most common scenario: a service ticket in Jira SM is to be automatically enriched with counterparty and fixed asset data from Comarch ERP XL, without manual copying.

1
Authorization and connection setup with the Comarch ERP XL API
REST API Bearer Token

Comarch ERP XL uses a native API based on a DLL library (CDN_API.DLL). Integration with Jira requires middleware or a proxy service. An example authorization endpoint for environments that expose a REST layer:

// POST /api/token
{
  "grant_type": "client_credentials",
  "client_id":     "your_client_id",
  "client_secret": "your_client_secret",
  "scope":         "api"
}

The token has a TTL of 3,600 seconds. The middleware should refresh it with a 60-second margin, never on demand (this avoids a race condition on concurrent requests).

2
Configuring a webhook in Jira: trigger for new tickets
Jira Webhook POST

In Jira SM: Settings → System → WebHooks → Create WebHook. Set:

Jira will send a JSON payload with the full issue object. The middleware must reply 200 OK within 20 seconds; move any longer processing to an asynchronous queue.

3
Pulling counterparty data from the ERP by identifier
GET /api/Kontrahenci field mapping

From the Jira payload extract the field containing the NIP or client ID (custom field). The middleware then runs:

// GET /api/Kontrahenci?nip={nip}
Authorization: Bearer {token}

// ERP response:
{
  "Id":         "KNT-001234",
  "Nazwa":      "Acme Manufacturing Sp. z o.o.",
  "OpisTrwaly": "Premium service contract until 2027-06-30",
  "OpiekunId":  "USR-042"
}

Map the ERP response onto Jira fields (custom fields) and send a PATCH to the Jira API.

4
Field mapping and updating the Jira ticket via REST API
PUT /rest/api/3/issue custom fields
// PUT /rest/api/3/issue/{issueKey}
{
  "fields": {
    "customfield_10201": "KNT-001234",          // ERP counterparty ID
    "customfield_10202": "Acme Manufacturing",   // Company name
    "customfield_10203": "Premium until 2027-06-30", // Contract status
    "priority": { "name": "High" }               // from ERP SLA conditions
  }
}

Important: custom field IDs (customfield_XXXXX) are specific to each Jira instance. Fetch them via GET /rest/api/3/field and store them in the middleware configuration. Do not hardcode them.

5
Return synchronization: Jira ticket status to the ERP
callback idempotency

When the Jira ticket changes status to Resolved or Closed, the middleware calls the ERP API to update the complaint/service request status. If you manage SLAs and queues in JSM day-to-day, see also how to configure SLA and escalations in Jira Service Management. Key requirement: idempotency - the same message processed twice must not duplicate a record in the ERP. Use a unique externalId (Jira key) as the deduplication identifier.

Jira ↔ MES: specifics of the production environment

Integration with the MES plays by different rules than integration with the ERP. Three key differences you need to address at the design stage:

1. Real-time events, not polling

The MES generates machine alerts on a second-level frequency. Do not use HTTP polling to read MES events. Instead, configure push via MQTT or WebSocket. The middleware subscribes to a MES topic (mes/line1/alarm/critical) and on each event decides whether to open a new Jira ticket, update an existing one, or ignore it (duplicate).

2. Filtering and deduplication at the middleware level

A machine can generate 200 alarms of the same type within a minute (flapping). The middleware must implement window deduplication: if an alarm of the same type from the same machine appeared in the last 5 minutes, do not create a new ticket. Add a note to the existing one.

Warning: without filtering MES events, a single production incident can generate several hundred Jira tickets within an hour. That is not only operational chaos. It is also a real problem with Jira Cloud API limits (Atlassian applies rate limiting - check the current rules and thresholds in the developer.atlassian.com documentation) and with license costs based on the number of agents.

3. Production context in the ticket

A Jira ticket created from a MES alarm should contain the full context: work order number, machine/line designation, the value of the parameter that crossed the threshold, the last 10 operations on that machine. Without that, the IT technician cannot assess the severity of the incident without calling the shop floor, which negates the benefits of the integration.

Middleware tools: comparison

The choice of middleware platform has the greatest impact on the cost of maintaining the integration over 3-5 years. Below is a comparison of the five most popular options for an SME manufacturing company:

Integration scenario Recommended tool Difficulty Starting cost Implementation time
Jira ↔ ERP (REST↔REST) n8n self-hosted Low ~0 PLN/month 1-3 days
Jira ↔ ERP ↔ MES (full triad) n8n + Redis queue Medium ~200 PLN/month (hosting) 2-4 weeks
Jira ↔ ERP with audit logging Make (Integromat) Low 300-800 PLN/month 1-2 days
MES with OPC-UA protocol Custom microservice (Python) High One-off 15-40k PLN 4-8 weeks
Enterprise integration (SAP + MES + Jira) MuleSoft Anypoint Very high 30-120k PLN/year 3-6 months

For most SME manufacturing companies, n8n self-hosted offers the best flexibility/cost ratio. It supports REST, MQTT (via a custom node), webhooks, queueing, retry logic and has a built-in flow monitoring panel. A VPS deployment from 200 PLN/month will cover 90% of integration scenarios.

5 typical pitfalls and how to anticipate them

1
No strategy for the unavailability of one of the systems
high severity

What happens when the ERP is in a maintenance window? A synchronous integration will hang or return an error, which often means lost events. Solution: always design with a buffer queue (Redis, RabbitMQ). When the ERP is unavailable, events land in the queue and are processed after the system returns. The middleware must implement exponential backoff on retries. Do not bombard the restored ERP with 1,000 requests at once.

2
Record duplication during parallel processing
hard to detect

A Jira webhook can be sent twice (retry after timeout). If the middleware does not check whether a given event has already been processed, the ERP or MES will receive two identical records. Solution: store the ID of processed events (issueKey + timestamp + eventType) for at least 24h in cache. Check every event before processing.

3
Hardcoded field IDs instead of configuration
technical debt

Custom field IDs in Jira (e.g. customfield_10201) change between environments (dev/staging/prod) and after migrations. If the ID is hardcoded in middleware, the integration breaks after every migration and nobody knows why. Solution: store all field IDs in a configuration file or environment variables. In the CI/CD pipeline add a step that verifies that the configured fields exist in the target Jira.

4
Ignoring time zones and date formats
subtle bug

Jira uses UTC in the API. Comarch ERP can return dates in the server's local time zone. The MES often adds a timestamp without time zone information. Once all the data lands in a single analytics database, SLA reports will be off by n hours and for weeks nobody will notice. Solution: standardize all timestamps to ISO 8601 with UTC (Z) at the middleware input. Never store dates without time zone information.

5
No access rights for the service account in ERP/MES
security

The most common deployment mistake: the integration is configured on the ERP administrator account "to get it working fast". After admin password rotation or the account being disabled, the integration fails without warning. Solution: create a dedicated service account with the minimum required permissions (read + specific write resources). Store credentials in a vault (HashiCorp Vault, AWS Secrets Manager), never in configuration files in the repository.

Maintaining and monitoring the integration

An integration deployed without monitoring is an integration that will break silently. You will find out about it from the production manager, not from a dashboard. Three monitoring layers I consider mandatory:

Layer 1: Connection health-check

Periodic ping (HEAD or GET /health) to each system every 60 seconds. If any one does not respond within 5 seconds for 3 consecutive attempts, send an alert to Teams/Jira/email. Implementation cost: 30 minutes in n8n or a simple Lambda function.

Layer 2: Throughput metrics

Monitor how many messages pass through each flow per hour. A sudden drop to zero usually means something has broken. Configure an alert when throughput falls below 20% of the average from the last 7 days for more than 30 minutes.

Layer 3: Dead Letter Queue

Every message that could not be processed after N attempts goes to the DLQ. The alert should fire immediately once the DLQ is not empty and require manual analysis, not automatic retry. The DLQ is your "canary in the coal mine" for data transformation errors.

Golden rule of maintenance: the integration should report its own state and not wait for someone to check on it. Every middleware flow should write metrics to a central observability system and be visible on a single dashboard alongside business metrics, not just technical ones.

FAQ: most common questions

Can Jira Service Management talk directly to Comarch ERP XL?
Yes, but usually through a middleware layer. Comarch ERP XL uses a native API based on a DLL library (CDN_API.DLL); integration with Jira requires middleware or a proxy service. An older SOAP/COM interface is also available. Jira connects to the ERP via webhook triggers or scheduled REST calls from n8n, MuleSoft or ScriptRunner. Direct point-to-point integration is possible for simple scenarios but quickly becomes unmaintainable as the number of systems grows.
What is MES and why is integration with Jira harder than with ERP?
MES (Manufacturing Execution System) is the operational layer of production that manages work orders, machines, quality and traceability in real time. Integration with Jira is harder for three reasons: MES generates events at second-level frequency (not minutes), most MES systems do not have a mature REST API (OPC-UA, MQTT or proprietary protocols are common), and MES data needs to be transformed before it flows into a Jira ticket.
How much does middleware for Jira + ERP + MES integration cost?
The cost depends on the chosen platform: n8n self-hosted from 0 PLN in licensing (VPS approximately 200 PLN/month), Make (Integromat) from 300 PLN/month, Zapier from 800 PLN/month, MuleSoft Anypoint tens of thousands of PLN per year. For SMEs the best price/flexibility ratio is achieved by n8n self-hosted or Make.
How do you maintain master data consistency between Jira, ERP and MES?
The key is the MDM split: ERP is master for counterparty and product data, MES for orders and machines, Jira for incidents and SLAs. Each system can read data from the other systems through middleware. Writes should only happen through the master system and middleware never overwrites data while bypassing the owner.
How do you monitor a Jira-ERP-MES integration so you find out about problems before users do?
Minimal monitoring covers three layers: endpoint health-check every 60 seconds, a message throughput metric with an alert when the flow drops below a threshold for 5 minutes, and an alert on a DLQ growth above 0 messages. Tools: Grafana + Prometheus for n8n, built-in monitoring in MuleSoft, or a simple cron with curl and a Teams alert.

We will design the integration of your systems

We assess the architecture, choose the middleware and run the implementation from design to production monitoring. Free consultation, no commitments.

Book a free consultation →

Planning IT system integrations? See what an implementation with Rotech Group looks like

← All articles
Back to the blog
Next article →
ManageEngine - ERP integration: practical guide [2026]