7 min readPivot Scale Labs
API integration services: how connections really hold
API integration services live or die on unglamorous decisions: data direction, field ownership, retries, reconciliation and alerting.
- API integration
- integrations
- AI integration
Most integration projects get scoped on the happy path. Someone maps the fields that matter for the demo, wires two systems together, watches a record appear on the other side, and calls it finished. Three weeks later nobody can explain why the CRM holds two copies of the same customer, or why an order shipped without an invoice ever being raised. Nothing threw an error. It broke quietly instead.
That gap is what API integration services are meant to close, and it rarely closes by buying a better platform. It closes by settling a handful of unglamorous decisions before anyone writes code, and by building the boring safety nets that catch the failures you did not predict.
Why API integration services fail after launch
The failure is almost never the first connection. A single API call is easy. What breaks is the ten thousandth run, on a Friday afternoon, when the vendor returns a 429, the token has rotated, and the payload contains a customer name with an accent and an apostrophe.
Projects that survive treat an integration as a system with an operating life, not a one-off build. That means deciding up front who is answerable when a record does not arrive, and how you find out before a customer does.
The decisions below are the ones that carry the weight. Most are cheap to get right at the start and expensive to retrofit.
Direction of flow, then field mapping
Start with which direction each record moves, and be literal about it. One-way push, one-way pull, or both? If it is bidirectional, you now have a conflict resolution problem, and you need a rule for which side wins when both change between syncs.
Then pick the source of truth for each field. Not per system, per field. A customer's name might live in the CRM while their billing address lives in the finance system. That is fine. What is not fine is letting both edit the same field and hoping the last write is the right one. Most CRM integration work stalls on exactly this question, because nobody has decided which side is authoritative for an email address that gets edited in both places.
Who owns each field
Write it down, name an owner, and version the document with the code. A small mapping file is enough:
{
"record": "company",
"source_of_truth": "crm",
"fields": {
"name": "crm",
"billing_address": "erp",
"contract_end": "erp",
"health_score": "internal"
}
}
The point is not the format. The point is that when a field lands in the wrong place six months later, someone can open this file and see whether the mapping was wrong or the code drifted away from it. Field mapping is an ownership question wearing a technical costume.
Sync frequency versus event-driven webhooks
Polling on a schedule is the default because it is easy to reason about and it fails in visible ways. Every fifteen minutes, ask what changed, apply it, move on. The cost is latency and API calls you did not need.
Webhooks are faster and cheaper when they work, and they are the reason integrations break at 2am. A webhook fires once. If your endpoint is slow or down, the event is gone, or it lands in a retry queue you never configured. So a webhook integration needs a fallback sweep, running slower than the webhook, that catches whatever the events missed.
The honest rule: use webhooks for speed where a missed event is recoverable, and keep a reconciliation job behind them either way. Events tell you what should have happened. A sweep tells you what actually did.
Idempotency, retries and rate limits
Assume every call will be delivered twice, because one day it will. If your handler is not idempotent, that second delivery becomes a duplicate invoice, a duplicate contact or a duplicate ticket. The usual fix is a stable key from the source system plus a uniqueness constraint on your side. When the same key arrives again, update rather than insert.
Retries need backoff and a ceiling. Retrying immediately hammers a service that is already struggling, and retrying forever hides a real failure behind a queue that never drains. Cap the attempts, then move the payload somewhere you can see it and decide what to do about it.
Rate limits are a planning input, not an error to handle later. If you expect a nightly sync of fifty thousand records and the vendor allows a hundred calls a minute, you have just discovered the shape of your whole architecture. Batch the work, cache what does not change, and ask the vendor for a higher limit before you build.
Reconciliation and alerting that names the failing system
Reconciliation is the part most projects skip. Once a day, compare a lightweight count or checksum on both sides. Orders created versus orders received. Contacts in the CRM versus contacts in the marketing tool. The number does not have to be perfect. It has to be close enough to notice a drift of forty records in a day.
Alerting matters just as much, and it has to say which system is failing rather than only that something is. A generic sync error tells whoever is on call nothing. An alert that names the finance export, the last successful run and the 401 on the way in tells them exactly where to look. Route those alerts to a channel someone actually reads, and include the payload ID so the failed record can be replayed.
Direct, middleware, or replace a tool
Once you know what the connection has to survive, the build choice gets easier.
Integrate the two tools directly
Direct integration makes sense when there are two systems, the mapping is small, and you control both sides or have stable APIs. You keep latency low and moving parts few. You also own the maintenance, so when either vendor changes a field, you fix it.
Put middleware in the middle
Middleware earns its place when you have three or more systems, when non-engineers need to adjust a mapping without a deploy, or when the same data has to fan out to several places. It costs another subscription and adds another thing that can fail, and it moves the debugging into a layer you do not fully control. That is a fair trade at scale and a needless one for two endpoints.
Replace one of the tools
Sometimes the right answer is not a connection at all. If you are gluing together a CRM and a support desk that duplicate the same customer record, or paying middleware to translate between two tools that overlap heavily, the cheapest integration is often consolidation. That conversation belongs next to your business systems review, not after it.
If you are weighing that up, the same logic that applies to custom software versus off-the-shelf tools applies here. Fit beats feature lists, and a workaround with a full-time owner is a cost you can put a number on.
Where the connection is genuinely worth keeping, our integrations work covers the build and the operating side of it. The same plumbing sits behind AI integration services too, since a model is only as useful as the business data it can reach, and that data usually lives in a CRM, an ERP and a helpdesk that were never built to talk to each other.
Frequently asked questions
What do API integration services actually cost?
It depends on how many systems are involved, which direction data flows, and how much volume the connection has to carry. A single one-way push between two tools with stable APIs is a small, fixed-scope job. A bidirectional mapping across four systems with reconciliation and alerting is a project. Any honest quote starts with a discovery conversation, because the field mapping decisions above are what drive the estimate. If you want the ground covered properly, book a discovery call and bring the system list.
How long does an integration take?
Weeks rather than months for a direct connection between two systems, longer when middleware or a data model change is involved. The build itself is usually the smaller half. Testing against real data, including the messy records with missing fields and duplicate emails, is what takes the time. Skipping it is how an integration passes a demo and then fails in production.
Do we need middleware if we only have two systems?
Usually not. Middleware adds a subscription, a vendor and another failure surface. It pays off when you have several systems, want a shared mapping layer, or need someone outside engineering to change a rule without a deployment. With two endpoints and a small field map, a direct connection you own is simpler and easier to debug.
How do we know an integration is failing before a customer tells us?
Reconciliation on a schedule, plus alerts that name the system and the error. Compare counts or checksums daily on both sides, and send a failed sync to a channel with an owner. If the only signal you get is a customer email asking where their order went, your monitoring is decorative.
