Skip to main content

Integration pattern

Reviewed 14 October 2026

Point-to-point links multiply. Count them before you add one.point to point integration vs hub and spoke

Each new system you connect can need a link to every system already there. Six systems can need fifteen. A hub keeps it to six.

The demo shows the ERPNext documents of an order. It does not show a store syncing.

Use it when

  • Four or more systems exchange data, so direct links outnumber systems.
  • Several systems need the same record, such as the customer or the item.
  • Systems change on their own schedule and you want a change to touch one connection, not many.

Skip it when

  • You connect three systems or fewer. A separate hub saves nothing at three: three links either way.
  • One system only ever feeds one other, and nothing else is coming.
  • Nobody will run, watch and back up one more component. A hub with no owner is a new single point of failure.

Try it

Wire counter

Choose the systems you run. See the links with every pair connected, then through a hub. Sample data. Not a measurement.

Systems you run

Your ERP is always in. Choose at least two systems.

How they connect

The hub is

Direct links you have today (optional)

Count each connection between two systems once.

1ERP2Store3Gateway4Bank5WhatsApp12345
  1. 1ERP
  2. 2Store
  3. 3Gateway
  4. 4Bank
  5. 5WhatsApp
Systems
5
Links to build and keep
Every pair: 10 shown
Your ERP as the hub: 4
A separate hub: 5
If Online store changes its API
Direct: 4 links to re-check
Hub: 1 link to re-check
5 systems can need 10 links directly. Through a hub they need 5. The hub also puts every link behind one component.

Worst case: every pair talks. Not every pair needs to. Count yours and compare.

Pick a system

The drawing marks it. Pick it here.

What if that system…

Links for two to ten systems

Links needed for two to ten systems
SystemsEvery pairYour ERP as the hubA separate hub
2 112
3 323
4 634
5 yours1045
6 1556
7 2167
8 2878
9 3689
10 45910

Counted, not measured. In translator terms, six applications need 30 one-way translators without a shared format and 12 with one (Hohpe and Woolf). Canonical Data Model

What you give up, and how it fails.

What you give up

What you get and what it costs
What you getWhat it costs
A change in one system touches one connection.A new component to run, secure, upgrade and back up.
Adding a system adds one link, not up to n.A shared message format to agree on and keep current.
One place to log and replay what moved.If the hub is down, every link is down.

How it fails

How the pattern fails, why, and the evidence
What happensWhyEvidence
The hub becomes the bottleneck.Routing all messages through one broker "can turn the Message Broker into a serious bottleneck". Stateless brokers can run as several instances.
DocumentedMessage Broker
One hub grows into everything.The same page names a broker that grows "unmaintainable" and offers splitting it into several as the answer.
DocumentedMessage Broker
At small scale the shared format costs more than it saves.Two applications need 2 translators directly and 4 with a canonical model; three need 6 either way.
A hub outage stops every link.Every link passes through it.
Follows from the design

Each failure is Documented, with the maker's own page or code, or it Follows from the design. None is a result from a MithTech client project.

In ERPNext and Frappe.

Read from Frappe v15.123.0 and v16.52.0, ERPNext v15.122.0 and Frappe's payments app at commit 9885a6e5 on 14 October 2026, with the file and line. Other systems' names and settings were not checked here.

Where each part lives

The pattern in ERPNext and Frappe: feature, where it lives, and what it does
FeatureWhereWhat it does
REST API and
Other systems list, create, read, update and delete any document through one interface.Frappe REST API
WebhookIntegrations › Webhook (doctype Webhook)
Sends a document's event to a URL: after insert, on update, on submit, on cancel, on trash or on change. Set per doctype and event.Frappe webhook events, v15
Webhook Request Logdoctype
One row for every attempt, with the response.Frappe webhook.py, v15
Your ERP as the hubthe doctypes themselves (Customer, Item, Sales Order)
Other systems read and write the record instead of keeping a copy. This is the n−1 case in the counter.
A separate layern8n, or a custom Frappe app
n8n's ERPNext node has five document operations: create, retrieve, retrieve all, update and delete. Triggers come from ERPNext Webhooks.n8n ERPNext node

How to build it

  1. List your systems and draw the links you have today. Count each connection once.

  2. Name the system that owns each kind of record: customer, item, price, stock.

  3. Choose the hub: your ERP itself needs the fewest parts; a separate layer earns its place when several systems must be translated and replayed.

  4. Move one link at a time. Keep the old direct link until the new route has run clean for a full cycle.

  5. Log every message that crosses the hub, so a missing record has one place to be found.

Questions about point-to-point vs a hub