Nothing is idempotent
A timeout produces a retry, the retry produces a second activation or a second charge, and because it only happens when a downstream system is slow, it looks intermittent and untraceable for months.
This is the engineering layer beneath telecom integration: how endpoints are specified, secured, versioned, made safe to retry and made observable. Twopir Consulting builds the API surface around Salesforce Communications Cloud — TM Forum Open API shapes where they apply, event design where synchronous calls will not do, and the reliability semantics that decide what happens on a bad day. Specified first, then built, then tested against the specification.
Trusted by 500+ organizations — including connectivity and communications providers building standards-shaped API layers with Twopir Consulting.
API Capabilities
None of these shows up in functional testing. Every one of them shows up under load, at the worst possible time, in a system somebody else owns.
A timeout produces a retry, the retry produces a second activation or a second charge, and because it only happens when a downstream system is slow, it looks intermittent and untraceable for months.
There is no specification, so the API is whatever the code currently does. Consumers integrate against observed behaviour, and any change — including a bug fix — becomes a breaking change for somebody.
Every consumer has to upgrade simultaneously because there is only ever one version. In practice that means the API stops changing, and the platform ossifies around its first mistake.
Long-running telecom operations are modelled as request-response, so callers block and time out on work that legitimately takes minutes or hours. The result is retries against operations that were actually succeeding.
No correlation identifier follows a request across systems, so diagnosing a single failed order means four teams searching four log systems and comparing timestamps by hand.
Authentication, authorisation and rate limiting arrive as a late phase, which is when it emerges that the token model does not fit the partner use case and the whole surface needs revisiting.
API and systems integration for Communications Cloud is the engineering discipline underneath the integration architecture: specifying, building, securing, versioning and observing the interfaces that the architecture assumes exist. The architecture decides that Communications Cloud must tell billing about an activated order. This layer decides what that message looks like, what a successful response means, how long the caller waits, what happens on a timeout, whether the same message can safely arrive twice, how the interface will change next year, and how anyone will diagnose it at three in the morning.
In telecom, much of this does not have to be invented. The TM Forum Open APIs are the industry's standard interface specifications, covering domains such as product catalog, product ordering and service ordering, and Salesforce Communications Cloud conforms to them — its Enterprise Product Catalog is certified against the TM Forum Information Framework, the industry's standard information model. Building to those published shapes reduces rework, shortens the negotiation with downstream vendors who also implement them, and keeps a platform swap a bounded change rather than a second transformation.
What standards do not give you is behaviour. A conformant endpoint can still lack idempotency, block for ninety seconds, return an error shape nobody can act on, or be impossible to trace. Twopir Consulting specifies the behavioural contract alongside the structural one, builds to it, and tests against the specification rather than against the implementation — which is the only way to find out that the two have diverged.
Where this page starts. This page is the engineering layer. Which systems connect, what data moves in which direction and who owns each failure is covered one level up on Communications Cloud integration. If you are choosing what to connect, start there; if you are deciding how the endpoints should behave, stay here.
We agree these per interface, in writing, with the team that owns the other side. An interface specified by only one party is an assumption with a deployment date.
What every interface contract must specify
| Element | What it states | What goes wrong without it |
|---|---|---|
| Shape | Request and response structure, aligned to a TMF API where one applies | Consumers integrate against observed behaviour; every fix is a breaking change |
| Semantics | What each field means and which are genuinely required | Two teams agree on the payload and disagree on the meaning |
| Timing | Expected latency, timeout, and whether the operation is long-running | Callers block and time out on work that is actually succeeding |
| Idempotency | The key that makes a repeat safe, and how long it is honoured | Duplicate activations, charges and engineer visits under load |
| Errors | The error taxonomy, which errors are retryable, and the shape they arrive in | Callers retry unretryable failures and give up on transient ones |
| Events | Which state changes are published, with what guarantee and ordering | Consumers poll, or miss transitions, or process them out of order |
| Security | Authentication, authorisation scope, and rate limits per consumer | A late security phase that invalidates the token model for partners |
| Versioning | How versions are expressed and how long old ones are supported | The API stops changing because every consumer must move at once |
| Observability | Correlation identifiers, what is logged, and what raises an alert | A single failed order takes four teams and a shared spreadsheet |
This checklist is the deliverable clients tell us they reuse most, including on integrations that have nothing to do with Salesforce. It is short on purpose: nine items that can genuinely be agreed in a working session, rather than a template nobody completes.
Usually delivered alongside an implementation or an integration programme, occasionally as a standalone remediation of an API estate that has grown without governance.
Contract-first design, so the specification exists before the implementation and stays the source of truth afterwards.
Building and consuming standards-shaped endpoints so both sides work to a published specification instead of negotiating a bespoke one.
Layered architecture — system, process and experience APIs — where the estate is large enough or volatile enough to justify it.
For the long-running operations that dominate telecom, where request-response is the wrong shape.
Designed at specification time rather than added as a late phase that invalidates the model.
Making the estate diagnosable, and proving the implementation still matches the specification.
The sequence matters more than it sounds: building before specifying is how an implementation quietly becomes the contract.
What interfaces exist, what they actually do under load, where they diverge from their documentation, and which of them have no documentation at all. Inherited estates usually have more interfaces than anyone expects.
Contract-first design against the nine-point checklist, aligned to TM Forum shapes where they apply, and agreed with the team that owns the other side rather than assumed on their behalf.
Implementation with contract tests that assert the specification, so the spec and the code cannot quietly diverge. Hostile stubs — slow, wrong, silent — exercise the failure semantics from the first sprint.
Fault injection, sustained-load testing and idempotency verification under real concurrency. This is where timeout, retry and idempotency decisions are actually validated; functional testing will never find those defects.
Correlation identifiers, dashboards, alerting and runbooks — plus the specification as a maintained artefact rather than a document that was true once, at the start.
This layer sits beneath Communications Cloud integration and serves the lifecycle described on order management & automation. For Salesforce connectivity beyond telecom, see Salesforce integration services.
Mostly it changes what happens on bad days, which is the only time an API layer is really evaluated.
Retries stop causing damage
Idempotency designed into each contract means a timeout produces a retry rather than a duplicate activation, a duplicate charge or a second engineer at the door.
The specification is the source of truth
Contract tests assert the spec, so implementation and documentation cannot silently diverge and a consumer can integrate without reverse-engineering behaviour.
The API can change without a summit
A versioning strategy with a stated support window means one consumer upgrading does not require all of them to move on the same weekend.
One identifier follows the request
Correlation identifiers across every hop turn a four-team investigation into a single query, which is the difference between minutes and a morning.
Vendor specifics stay isolated
Standards-shaped contracts with vendor detail contained mean replacing a billing or provisioning platform changes one interface, not every consumer of it.
Wholesale can self-serve
A specified, secured, versioned partner API turns machine-to-machine ordering into a product capability rather than a bespoke project per partner.
Related Twopir work
Related: integration architecture, customization for the extension surface, and Salesforce Communications Cloud consulting for the wider practice.
Every API works in the demo. What separates an estate that runs from one that pages people is whether timeout, retry, idempotency and error semantics were decided deliberately or inherited from whatever the first implementation happened to do.
The specification exists before the implementation and is asserted by contract tests afterwards. Without that, the code becomes the contract and every fix turns into somebody else's breaking change.
TM Forum Open APIs are published, widely implemented and conformed to by Communications Cloud. Inventing a bespoke shape where a standard applies costs negotiation time now and portability later.
A layered API architecture earns its place on a large or volatile estate and is pure overhead on a small stable one. We will tell you which you have rather than defaulting to the larger answer.
Slow, wrong and silent stubs from the first sprint, then fault injection and sustained load. Idempotency defects only appear under real concurrency, so that is where we look for them.
Correlation identifiers, dashboards, alerting and runbooks. An API layer nobody can trace is an API layer that will consume an operations team indefinitely.
TM Forum Open APIs are the telecommunications industry's standard interface specifications, maintained by the TM Forum and covering domains such as product catalog, product ordering and service ordering. Salesforce Communications Cloud conforms to them, and its Enterprise Product Catalog is certified against the TM Forum Information Framework, the industry's standard information model. The practical benefit is that both sides of an integration can build to a published shape instead of negotiating a bespoke one, which reduces rework and customisation, shortens the conversation with downstream vendors who also implement the standard, and keeps replacing a vendor a bounded change rather than a second transformation programme.
No, and this is the most useful thing to understand about standards. Conformance governs the structural contract — the shape of the request and response. It says nothing about behaviour: whether an endpoint is idempotent, how long it blocks, what its error taxonomy looks like, which errors are worth retrying, whether state changes are published as events, or how anyone traces a failure across systems. Those are the properties that determine whether an integration survives a bad day, and they have to be specified separately. We agree them per interface against a nine-point contract checklist alongside the structural specification.
Idempotency, designed into the contract rather than added later. Each request carries a key that lets the receiving system recognise a repeat and return the original result instead of performing the action again, and the contract states how long that key is honoured. Without it, a timeout against a slow downstream system produces a retry that becomes a second activation, a second charge or a second engineer visit. Because it only manifests under load it looks intermittent and is extremely hard to diagnose after the fact, so we verify idempotency explicitly under real concurrency rather than in functional testing, which will not find it.
It depends on the size and volatility of the estate, and we would rather tell you it is unnecessary than sell you the larger answer. API-led connectivity — system APIs over the legacy estate, process APIs orchestrating them, experience APIs per channel — earns its place when several systems must be reached for a single business operation, when the estate will change and you want consumers insulated from that, or when multiple parts of the business need the same underlying data. On a small, stable estate with few consumers, direct integration is simpler, cheaper and easier to diagnose. We assess which you actually have during the inventory step.
Asynchronously, in most cases. Service activation, provisioning and engineer visits legitimately take minutes to days, and modelling them as synchronous request-response means callers block and time out on operations that are succeeding — then retry them, which is where duplicate work comes from. The usual pattern is an accepted-and-acknowledged response followed by events or callbacks as state changes, with polling available as a fallback for consumers that cannot receive callbacks. That design also needs replay and late-arrival handling and idempotent consumer-side processing, because events do arrive twice and occasionally out of order.
Decide the strategy before the first consumer integrates, because retrofitting versioning to a live API is considerably harder. The essentials are a stated way of expressing a version, a defined support window for older versions, a clear distinction between additive changes that do not break consumers and breaking changes that do, and a deprecation process with real notice. Without this, in practice there is only ever one version, every consumer has to move simultaneously, and the rational response is to stop changing the API at all — which means the platform ossifies around its earliest design mistakes.
The integration page answers the architecture question: which systems connect to Communications Cloud, what data moves in which direction, in what sequence, and who owns the failure. This page answers the engineering question underneath it: how each of those interfaces is specified, secured, versioned, made safe to retry and made observable. If you are deciding what to connect and in what order, start on the integration page. If you are deciding how the endpoints themselves should behave and be operated, this is the right one.
An API review inventories what exists, tests how it behaves under hostile conditions, and produces the specifications the estate should have had — prioritised by the interfaces most likely to fail expensively.
Speak with a team that specifies the timeout, not just the payload