Docs

What is idempotency in a business integration?

Idempotency lets an integration repeat the same intended operation without creating a second business result.

What is idempotency in a business integration? cover image

Idempotency means repeating the same intended operation has the same effect as performing it once. In a business integration, that matters when your request might have succeeded but its confirmation never arrived. The next attempt should not accidentally create another order, invoice or other business result.

Consider an online order being created in an accounting system. The destination accepts the request, but the connection drops before the caller receives the answer. The caller knows it did not receive confirmation. It does not yet know that the order was not created.

That uncertainty is where an explicit operation identity becomes useful.

Idempotency and retrying

A retry is another attempt. Idempotency describes the effect that another attempt is allowed to have. One does not establish the other.

An application programming interface, or API, lets software request an operation from another system. The Hypertext Transfer Protocol (HTTP) standard, RFC 9110, defines idempotency for request methods. A business action still needs its own documented behavior, especially when it creates a record.

Do not assume a create-order operation is safe to repeat because another action is. The integration team needs to check what the particular destination supports and how that support applies to the business process.

Our published NetSuite readiness checklist works through the case directly. An invoice is submitted, NetSuite creates it and the response is lost, so a timeout cannot be read as no invoice. The checklist also notes Oracle's own limit: NetSuite documents an idempotency key for asynchronous requests, and that protection should not be assumed for synchronous calls or for another connector.

Give the intended operation an identity

In our order example, the operation identity should distinguish creating this source order in this destination account from creating another order somewhere else.

That identity needs to survive an uncertain response. Generating a brand-new identity for the retry tells the destination that it is looking at new work, which defeats the purpose.

The source order identifier may be part of the design, but it is not automatically the whole design. Several customer accounts can use the same order number. Creating an order and later updating its shipment are also different operations involving the same source record.

The team should record the intended boundary in business terms. One source order in one destination is a clearer starting point than a random key with no explanation of what it represents.

The result must stay inspectable

Once the first attempt has been handled, the integration needs a way to understand the outcome. That could involve documented destination behavior or an integration-side record of the operation and its result.

The exact mechanism depends on the system. The operating requirement is consistent: the next person should be able to distinguish an unfinished attempt, a completed action and a genuinely new request.

An identifier without a reliable record of the result is not enough. Neither is a log entry that says a request was sent but gives no way to establish which destination record exists.

What if the order changes?

Suppose the first order request used the correct identity but contained an outdated delivery address. Repeating the old operation and changing the business record are different jobs.

The integration needs an agreed update path. Reusing an operation identity with different content can produce confusing or rejected behavior, depending on the destination's rules.

That is why idempotency belongs beside the mapping and record lifecycle. It helps control repeated attempts at the same work. It does not decide how the business should process a later correction.

Test the uncertain case deliberately

A normal successful request tells you little about this behavior. Test a situation where the caller cannot rely on receiving the confirmation, using a safe test account and a defined expected result.

Then repeat the intended operation. Check how many destination records exist, how the integration identifies the result and what the operator can see afterward.

Also test a genuinely different order. A design that suppresses every later request may avoid duplicates while losing valid business work. The boundary has to recognize both sameness and difference.

Keep the test about business outcomes. A successful status is useful evidence, but the destination record is what the team will have to live with.

Where the guarantee stops

One controlled action does not make a sequence of several actions a single transaction. Creating an order, allocating stock and sending a message can each have their own behavior.

If the process stops partway through, the team needs to know which steps happened and which remain. The operating guide should explain how that state is investigated without repeating completed work blindly.

That is a practical limit rather than a reason to avoid the design. Clear boundaries make recovery more predictable because the team knows which business effect it is trying to protect.

Take one create action in your busiest flow. Ask what a second attempt with the same identity would do and write the answer where your operator can find it.

Talk to us

Frequently asked questions

No. It protects the operation boundary the team designed. Two different identities can still represent the same business work if the identity rule is wrong.