TL;DR
- An idempotency key is a durable identifier for one write operation. Reuse the same key on every retry so the receiver can recognize the original business intent.
- In an intake-to-ERP integration, a lost acknowledgment can otherwise turn a correct retry into a duplicate purchase order.
- Production-ready idempotency also requires clear rules for scope, payload mismatches, retention, atomicity, replay, and auditability.
- The ERP integration data contract should also define schema, error taxonomy, dead letter handling, versioning, and reconciliation.
- In a vendor demo, replay the same request after a lost-response scenario and prove that the ERP returns the original record instead of creating another one.
Most intake-to-ERP integrations are tested on one question: did the purchase order reach the ERP? A more revealing test is what happens when the ERP creates the order but its response never makes it back to the intake layer.
That failure exposes whether retries are safe, whether duplicate purchase orders can be created, and whether the integration contract is ready for production. This guide explains how idempotency keys work, what procurement and IT should specify together, and which failure scenarios vendors should demonstrate before go-live.
Download The Hidden Cost of ERP Bundles: Why Procurement Needs More Whitepaper
What Is an Idempotency Key in an ERP Integration?
An idempotency key is a unique, durable identifier attached to a state-changing request so the receiving system can recognize a retry of the same business operation. If the ERP has already processed that key, it should not execute the write again. It should return the original result, or an equivalent response, instead.
This is idempotency in an API: repeated delivery of the same intended operation does not create additional side effects. Stripe documents the pattern for safely retrying writes, while AWS describes caller-provided request identifiers as a way to make retries safe.
The key should represent one business intent, not one network attempt. Generate or assign it when the operation is first accepted, persist it, and reuse it on every retry.
Do Not Confuse an Idempotency Key with a Transaction ID
| Identifier | What it identifies | Does it prevent a duplicate write? |
| Idempotency key | One intended operation before execution | Yes, when the receiver persists and enforces it |
| Request or correlation ID | A message or trace attempt | Not necessarily; it may change on retry |
| ERP transaction ID | The record created by the receiving system | No; it usually exists only after the write |
| Business key, such as intake request ID | The originating procurement request | Useful as an input, but one request may trigger several distinct writes |
For an intake-to-ERP integration, a stable pattern might combine the intake request identity with the specific operation, such as create-PO or cancel-PO. The important rule is semantic: a retry of the same operation reuses the same key; a genuinely new operation receives a new one.

How Does an Idempotency Key Prevent Duplicate Purchase Orders?
The dangerous case is not usually a user clicking twice. It is an ambiguous outcome after a network or service failure:
- The intake platform sends a request to create a purchase order.
- The ERP receives the request and creates the PO.
- The ERP response is lost because of a timeout, gateway restart, queue redelivery, or another transient failure.
- The intake platform cannot know whether the write succeeded, so it retries.
- Without idempotency, the ERP may treat the retry as a new request and create a second PO.
With an idempotency key, steps 1 and 4 carry the same operation identifier. The ERP can recognize the retry and return the original outcome rather than repeat the write. AWS describes the same underlying problem: retries are valuable for resilience, but state-changing operations must be designed so a retry does not produce additional side effects.
If you are asking how to prevent duplicate purchase orders caused by integration retries, this is the first control to test. Retrying is not the defect. Retrying without a reliable deduplication contract is.

Why Are Intake-to-ERP Writes Especially Exposed to Retry Risk?
An intake-to-ERP write path combines three characteristics that make idempotency important: it changes state, failures can leave the sender uncertain about the result, and resilient systems retry transient failures rather than silently drop requests.
The retry policy therefore needs to distinguish between transient and permanent failures. A timeout or temporary service error may be worth retrying. A rejected cost center, invalid supplier, or failed business rule usually will not become valid simply because the same request is sent again. Microsoft’s Retry pattern makes the same distinction: retry transient faults, but fail fast on errors that are unlikely to succeed without intervention.
This is where an idempotent API and an error taxonomy work together. Idempotency makes a legitimate retry safe. The error taxonomy decides whether a retry should happen at all.
What Should the Idempotency Contract Specify?
A production design needs more than a field named Idempotency-Key. Procurement and IT should be able to answer six questions before go-live:
- Operation identity. What exactly does the key represent? One approved purchase intent, one create-PO operation, or something broader? Do not generate a fresh key on every retry.
- Scope. Is uniqueness evaluated per tenant, endpoint, supplier, or business operation? The same string should not collide across unrelated actions.
- Same key, different payload. What happens if the same key arrives with different request data? A safe contract should reject the mismatch instead of silently applying new data to an old intent. Stripe explicitly validates this pattern.
- Atomicity. Can the receiver record the key and perform the business write as one atomic operation? AWS warns that recording the token without the side effect, or creating the resource without recording the token, leaves another duplication window.
- Retention. How long is the key remembered? The window should cover the longest realistic automatic retry and manual replay period. Retention is an explicit integration decision, not a universal number.
- Replay and observability. On a retry, does the caller receive the original ERP record ID and status? Can support teams trace the intake request, idempotency key, ERP record, retry attempts, and final outcome in logs?
One subtle trap is deriving the key only from a hash of the payload. Two identical purchase requests can sometimes be legitimate. AWS recommends an explicit caller-provided request identifier because it lets the caller express whether two identical-looking requests represent the same intent or two different intents.
Read More About Revolutionizing Procurement: Integration Points to Connect Intake with Your Tech Stack
What Else Belongs in the ERP Integration Data Contract?
Idempotency is one clause in a wider data contract: the explicit agreement describing what the intake system and ERP send, accept, reject, retry, and preserve. Modern data contract standards formalize schema, ownership, quality, service expectations, and versioning because integration behavior needs to be machine-readable and testable, not implicit.
| Contract element | What it should define | Question to ask in the demo |
| Explicit schema | Required fields, types, allowed values, and validation behavior | What happens when supplier, cost center, currency, or line data is missing or invalid? |
| Error taxonomy | Which failures are transient, permanent, or require human correction | Which errors are retried automatically and which are not? |
| Dead letter path | Where permanently failed messages go, retention, owner, and replay process | Show the queue or exception record and who is notified. |
| Versioning | How fields and rules change without breaking existing consumers | How do you introduce a breaking schema change while older requests are still in flight? |
| Reconciliation | How intake requests are matched to the ERP records they created | Show how an operator proves that one approved request created exactly one downstream record. |
A dead letter queue is not simply a place to dump failures. Microsoft describes it as a secondary queue for messages that cannot be delivered or processed. For procurement, that path needs an owner, an alert, enough context to diagnose the failure, and a controlled replay process.
Who Owns Idempotency in Procurement ERP Integration?

The answer is shared ownership. IT owns the technical implementation, but procurement owns the business identity of the request and usually absorbs the consequences of duplicate POs, orphaned requests, and invoice exceptions.
| Owner | Primary responsibility |
| Procurement | Define what constitutes one business request, acceptable duplicate risk, exception ownership, and reconciliation expectations. |
| IT / integration team | Implement key persistence, atomicity, retry policy, error classification, dead letter handling, logging, and monitoring. |
| Software vendor / integrator | Document connector semantics, supported retry behavior, failure handling, limits, and the evidence needed to test the contract. |
Forrester’s 2026 research found procurement professionals are decision-makers in 53% of business buying cycles. While the research is not about integration architecture, it reinforces why procurement should be able to ask the technical questions that determine downstream commercial risk.
How Zycus Merlin Intake Supports a Governed Intake-to-ERP Flow
Merlin Intake gives procurement a governed front door before a request reaches downstream execution. Zycus describes it as embedded in Microsoft Teams and Slack, where users submit requests in plain language while the platform gathers context, applies policy, and routes the request. It is positioned as part of the broader Zycus Source-to-Pay architecture rather than as a standalone form.
Zycus also describes validated intake data being synchronized with ERP environments including SAP, Netsuite and Oracle. That continuity can make request identity, policy context, and downstream routing easier to evaluate as one flow.
Frequently Asked Questions
1. What is an idempotency key?
An idempotency key is a unique identifier for one intended write operation. The receiver stores it with the result so repeated delivery of the same operation can return the original result instead of creating another side effect.
2. How does an idempotency key work?
The sender creates or assigns the key once and reuses it on every retry. The receiver checks whether it has already processed that key. If yes, it returns the previous result rather than executing the write again.
3. How do idempotency keys prevent duplicate purchase orders?
If an ERP creates a PO but its response is lost, intake may retry. Reusing the same idempotency key lets the ERP recognize the retry and return the original PO rather than create a second one.
4. How long should a system retain an idempotency key?
Long enough to cover every realistic automatic retry and manual replay path. The correct period depends on the integration. Define the retention window explicitly and test what happens when a retry arrives after the key has expired.
5. What is a data contract in ERP integration?
A data contract defines what two systems exchange and how the interface behaves: schema, required fields, errors, retries, failure handling, ownership, and versioning. It turns integration assumptions into explicit, testable rules.
6. What should procurement ask vendors about ERP integration?
Ask how outbound writes are identified, whether retries reuse the same operation key, what happens after a lost ERP response, how permanent failures are surfaced, and how one intake request is reconciled to exactly one downstream record.






















































