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.
- 1ERP
- 2Store
- 3Gateway
- 4Bank
- 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
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
| Systems | Every pair | Your ERP as the hub | A separate hub |
|---|---|---|---|
| 2 | 1 | 1 | 2 |
| 3 | 3 | 2 | 3 |
| 4 | 6 | 3 | 4 |
| 5 yours | 10 | 4 | 5 |
| 6 | 15 | 5 | 6 |
| 7 | 21 | 6 | 7 |
| 8 | 28 | 7 | 8 |
| 9 | 36 | 8 | 9 |
| 10 | 45 | 9 | 10 |
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 | What 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
| What happens | Why | Evidence |
|---|---|---|
| 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. | DocumentedCanonical Data Model |
| 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
| Feature | Where | What it does |
|---|---|---|
| REST API | and | Other systems list, create, read, update and delete any document through one interface.Frappe REST API |
| Webhook | Integrations › 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 Log | doctype | One row for every attempt, with the response.Frappe webhook.py, v15 |
| Your ERP as the hub | the 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 layer | n8n, 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
List your systems and draw the links you have today. Count each connection once.
Name the system that owns each kind of record: customer, item, price, stock.
Choose the hub: your ERP itself needs the fewest parts; a separate layer earns its place when several systems must be translated and replayed.
Move one link at a time. Keep the old direct link until the new route has run clean for a full cycle.
Log every message that crosses the hub, so a missing record has one place to be found.