Enterprise Systems
How to Connect Two Software Systems (APIs, Explained)
Updated June 2026 · 9 min read · by Brian

Sooner or later, two pieces of software in your business need to talk to each other. Your online store has to tell your accounting system about a sale. Your CRM needs the contact someone just filled out on your website. Your scheduling tool should text the customer when an appointment changes. The piece of plumbing that makes this happen is called an API integration, and while the underlying work is genuinely technical, the concepts are not. This guide explains what an API actually is in plain English, how the common building blocks work, where integrations tend to go wrong, and what to ask a vendor so you can tell a solid proposal from a fragile one. You do not need to write code to follow along. You do need enough of the vocabulary to make good decisions and ask the right questions.
What an API Actually Is
An API, short for application programming interface, is a contract between two systems. It defines exactly what one piece of software can ask another to do, what information it has to provide, and what it will get back. Think of it like a restaurant menu. You do not walk into the kitchen and start cooking; you order from a defined list, in a defined way, and the kitchen hands back a defined result. The API is that menu and that agreement. It lets your software request something from another company's software without either side knowing or caring how the other is built inside.
This contract is what makes integration possible and predictable. Because the rules are written down and stable, a developer can build against them with confidence that the other system will behave as described. It also means you are rarely connecting to the raw guts of a product. You are connecting to the doors the vendor chose to open. That distinction matters later, because the strength of an integration is often capped by what a vendor's API actually lets you do, not by what your developer can imagine.
- An API is a published agreement about what one system can ask another to do
- It hides the internal complexity of each system behind a stable set of requests
- You build against the doors a vendor opens, not the product's internal workings
- A clear, well-documented API is a sign of a product that expects to be integrated
REST and Webhooks, Without the Jargon
Most modern APIs follow a style called REST, and you only need the gist of it. With a REST API, your system sends a request over the internet, much like loading a web page, asking to read or change a specific thing: get this customer, create this invoice, update this order. The other system does the work and sends back a structured answer, usually in a format called JSON that both machines and humans can read. The key trait of this model is that your system has to ask. Nothing arrives unless you go and pull it.
That is where webhooks come in, and they are the mirror image. Instead of you constantly asking another system whether anything changed, a webhook lets that system notify you the moment something happens. When a payment clears or a form is submitted, the other system pushes a message to an address you provide, and your software reacts. The practical difference is timing and efficiency. Pulling on a schedule means you either check too often and waste effort, or check too rarely and react late. Webhooks let you respond in near real time without the constant polling. A good integration usually uses both: requests for when you need to ask, webhooks for when you need to be told.
- REST: your system asks the other system to read or change something, on demand
- JSON: the structured, readable format most APIs use to pass data back and forth
- Webhooks: the other system notifies you the instant something happens, so you do not have to keep asking
- Most reliable integrations combine both: pull when you need to ask, get pushed when you need to know
Authentication: Proving Who You Are
Before two systems exchange anything sensitive, each has to prove it is allowed to. Authentication is how an API knows the request is coming from you and not from a stranger. The simplest form is an API key, a long secret string that acts like a password for the connection. More capable systems use a standard called OAuth, which lets a user grant your integration limited, revocable access to their account without ever handing over their actual password. If your business connects to something like Microsoft 365 or a major CRM, OAuth is usually what is happening behind that 'allow access' screen.
The business-relevant point is that these credentials are the keys to your data, and they need to be treated that way. They should be stored securely, never pasted into emails or shared chat threads, and scoped to only the access the integration genuinely needs. A connection that can read your customer list does not also need permission to delete it. When you evaluate an integration, ask how credentials are stored, how access is scoped, and how quickly a leaked key can be revoked and replaced. Those answers tell you a lot about whether the work was done carefully.
- API keys are shared secrets; treat them like passwords and store them securely
- OAuth grants limited, revocable access without exposing the underlying password
- Scope each connection to the minimum access it actually requires
- Have a clear way to rotate or revoke credentials if one is ever exposed
Mapping Data Between Two Systems (the Messy Part)
Connecting the systems is the easy half. Getting them to agree on what the data means is where the real work lives. Two products almost never describe the same thing the same way. One calls it a customer, the other a contact. One stores a full name in a single field, the other splits first and last. One records dates as month-day-year, the other day-month-year. One marks an order 'complete', the other 'fulfilled'. None of this is exotic, and all of it has to be reconciled, field by field, before the integration can be trusted.
This translation layer, deciding which field maps to which and how mismatched values get converted, is usually the part that takes the longest and causes the most surprises. It is also where edge cases hide: the record with a missing email, the customer who exists in one system but not the other, the status that has no clean equivalent on the far side. A senior approach maps the data deliberately, decides what happens when a field is empty or a record cannot be matched, and validates the result against real data before going live. When a vendor quotes a suspiciously fast timeline, this is almost always the work they have not accounted for.
- Map every field deliberately; the same concept rarely has the same name or shape in both systems
- Decide up front how to handle missing fields, mismatched formats, and unmatched records
- Translate values that do not line up, such as differing status labels or date formats
- Validate against real data before going live, not just a clean sample
Errors, Retries, Idempotency, and Rate Limits
Integrations run across the internet, and the internet is unreliable. Networks drop, the other system goes down for maintenance, a request times out. A robust integration expects this and handles it, rather than assuming every message arrives perfectly the first time. The first principle is retrying sensibly: when a request fails for a temporary reason, wait briefly and try again, backing off gradually instead of hammering a struggling system. The second is knowing the difference between a temporary failure worth retrying and a permanent one, like bad data, that needs a human.
Retrying introduces a subtle risk that has a name worth knowing: idempotency. If you send 'charge this card' and the response gets lost, did the charge go through or not? Retrying blindly could bill the customer twice. An idempotent design makes a repeated request safe, so the same instruction carried out twice has the same effect as once. Any integration that moves money or creates records needs to get this right, and it is a fair thing to ask a vendor about directly. Finally, most APIs enforce rate limits, a cap on how many requests you may send in a given window. A serious integration respects those limits, spreads work out, and slows down gracefully when told to, instead of getting throttled or blocked at the worst possible moment.
- Retry temporary failures with a sensible backoff; escalate permanent ones to a person
- Make repeated requests idempotent so a retry never double-charges or double-creates
- Distinguish a transient glitch worth retrying from bad data that needs intervention
- Respect rate limits by pacing requests and slowing down when the API asks you to
- Log failures so a missed message can be found and replayed, not silently lost
Point-to-Point vs Middleware and iPaaS
There are two broad ways to wire systems together, and the right choice depends on how many connections you expect to have. A point-to-point integration is a direct line between two systems, built specifically for them. For a single, well-defined connection, this is often the cleanest and most cost-effective option. The trouble appears as connections multiply. Five systems that all need to talk to each other directly can turn into a tangle of brittle one-off links, where a change in one place quietly breaks two others.
The alternative is to route connections through a central hub, usually called middleware or, when it is a hosted service, an iPaaS (integration platform as a service). Each system connects once to the hub, and the hub handles the translating, routing, and retrying between them. This adds a moving part and an ongoing cost, but it pays off as the number of integrations grows, because you manage one well-understood layer instead of a web of direct links. There is no universally correct answer. A business with one or two integrations is often well served by clean point-to-point work; a business steadily connecting more systems usually benefits from a hub before the tangle sets in.
- Point-to-point: a direct connection between two systems, ideal when you only have a few
- Middleware or iPaaS: a central hub each system connects to once, easing many integrations
- Direct links get brittle and hard to manage as the number of connected systems grows
- Choose based on how many integrations you realistically expect, not just the first one
Common Pitfalls and What to Ask a Vendor
Most integration failures are not dramatic. They are quiet. A sync that silently stops one weekend and nobody notices for a week. A duplicate record problem that slowly pollutes the database. A connection that works beautifully on test data and falls over on the messy reality of production. These failures share a root cause: an integration was treated as a one-time setup rather than a living connection that needs monitoring, error handling, and ownership. The fix is to insist on those things from the start.
When you evaluate a proposal, the questions matter more than the buzzwords. Ask what happens when the other system is down, how errors are detected and surfaced, and who finds out when a sync fails. Ask how the integration avoids duplicates and handles records that do not match. Ask whether it is built to survive a vendor changing their API, which they will. And confirm in writing that you own the integration code and credentials, not the contractor, so you are never locked out of your own plumbing. A vendor who answers these calmly and specifically is showing you they have done this before.
- Insist on monitoring and alerting so a broken sync is noticed in hours, not weeks
- Ask how errors are detected, surfaced, and who is notified when something fails
- Confirm how duplicates and unmatched records are prevented and resolved
- Ask how the integration copes when a vendor changes or deprecates their API
- Get it in writing that you own the integration code, configuration, and credentials
Frequently asked
- What is an API in simple terms?
- An API is a contract between two software systems. It spells out exactly what one system can ask another to do, what it has to provide, and what it gets back, without either side needing to know how the other works internally. Like a restaurant menu, it lets you order from a defined list in a defined way and receive a predictable result.
- What is the difference between an API and a webhook?
- With a standard API request, your system asks the other system for something on demand and waits for the answer; nothing arrives unless you ask. A webhook is the reverse: the other system notifies you the instant something happens, so you react in near real time without constantly checking. Most solid integrations use both, asking when they need to and being told when they need to know.
- How long does an API integration take to build?
- It depends on how cleanly the two systems map to each other, not on how many systems are involved. A simple, well-documented connection between two cooperative APIs can take days. Anything involving messy data mapping, unusual edge cases, money movement, or a poorly documented vendor API takes longer. Be cautious of any quote that skips the data-mapping and error-handling work, because that is usually where the real time goes.
- Is API integration secure?
- It can be, when it is done with care. Connections should authenticate with securely stored credentials, request only the access they actually need, encrypt data in transit, and provide a fast way to revoke a key if one leaks. The risk is rarely the technology itself; it is credentials being shared carelessly or an integration granted far more access than it requires.
- Should I build a direct integration or use middleware?
- For one or two connections, a direct point-to-point integration is usually the cleanest and most cost-effective choice. As the number of connected systems grows, direct links become brittle and hard to manage, and routing everything through a central hub such as middleware or an iPaaS starts to pay off. Choose based on how many integrations you realistically expect, not just the first one in front of you.
More guides

