Why Processor and Gateway API Integrations Break in Production
A sandbox returns responses instantly. Visa's own rules allow issuers an average of 5 seconds, which is exactly the gap most integrations never test against.

- Visa Core Rules Section 7.3.3.1 requires an issuer or its authorizing processor to respond to authorization requests in an average time not exceeding 5 seconds per calendar month. A sandbox that answers in milliseconds never trains an integration for that real-world latency band.
- Visa Core Rules Section 1.7.7.1 requires an acquirer to process a Reversal whenever an authorization response was not received. Most integrations have no tested code path for that condition at all, because a sandbox almost never fails to respond.
- Section 1.7.7.2 separately bars depositing a transaction that was reversed for the full amount. A retry built without that rule in mind can submit the same transaction twice after a timeout that later turns out to have succeeded on the issuer's side.
- Federal banking regulators treat a third party's operational resilience, its ability to operate through and recover from disruption, as its own due diligence category, separate from whether its features work. Passing a demo does not answer the question a sponsor bank's own review is built to ask.
Processor and gateway API integrations break in production because the conditions that cause the break almost never occur in a sandbox. A sandbox environment answers fast and answers the same way every time. Production does neither, and Visa’s own rules describe exactly how much slower and less predictable a real authorization response is allowed to be.
The latency band a sandbox never trains an integration for
Visa Core Rules Section 7.3.3.1 sets the actual standard an issuer or its authorizing processor, including Stand-In Processing, has to meet. In the US region, it must respond to authorization requests in an average time not exceeding 5 seconds during each calendar month. That is an average across a full month of traffic, not a ceiling on any individual transaction. A real authorization can legitimately take meaningfully longer than 5 seconds and still be entirely within the rule, as long as the monthly average holds.
A sandbox environment built to let developers iterate quickly almost always returns a response in well under a second, every time, with no variance. An integration built and tested entirely against that behavior has never actually exercised what happens when a real authorization takes four seconds, or eight, under real network and issuer-side conditions. A timeout value tuned against sandbox response times, often set well under a second because that is all the sandbox ever showed, will fire on production transactions that were still well within Visa’s own allowed response window. The integration treats a slow but normal authorization as a failure, because nothing in its testing ever showed it what normal actually looks like outside the sandbox.
The rule almost nobody builds a tested code path for
Visa Core Rules Section 1.7.7.1 requires an acquirer to process a Reversal for an online financial transaction if the acquirer, merchant, or acceptance device did not receive an authorization response. This is not a suggestion for handling an edge case gracefully. It is a binding requirement with a specific trigger: no response received, for any reason.
Most gateway integrations have no genuinely tested code path for this condition, because a sandbox almost never fails to respond at all. It either answers or it does not exist long enough to time out in any way a developer would notice during normal testing. The condition this rule governs, a real production timeout where no response arrives, is exactly the scenario a sandbox-only testing process never produces, which means the reversal logic the rule requires often exists only as an assumption in a code comment rather than as a path that has actually run.
Why the retry is where this actually goes wrong
Section 1.7.7.2 adds the detail that turns this from a missing feature into an active risk. A merchant must not deposit, and an acquirer must not process, a transaction that was subsequently reversed for the full amount. Read alongside Section 1.7.7.1, the sequence a correct integration has to handle is specific: a timeout occurs, no response was received, a Reversal gets processed for that attempt, and then if the integration retries the transaction, it has to treat that retry as a genuinely new attempt rather than assuming the original failed cleanly.
The actual danger sits in a detail most integrations get wrong without realizing it. A timeout on the gateway’s side does not necessarily mean the issuer never processed the request. The authorization response can be delayed rather than lost entirely, meaning the original request may complete successfully on the issuer’s side after the gateway has already given up waiting and issued a reversal, or worse, after the application has already retried the same transaction believing the first attempt failed outright. An integration that retries blindly on any timeout, without a mechanism to detect whether the original request actually landed, can produce two successful authorizations for what the customer believes was one purchase. This is precisely the failure mode idempotency keys exist to prevent, but an idempotency key only works if the retry logic is actually built to use it correctly against this specific timeout-then-retry sequence, not against a generic “something went wrong, try again” assumption.
A concrete example: the customer charged twice at 2:14 a.m.
Picture a checkout integration that times out any authorization request after 2 seconds, because that is comfortably more than the sandbox ever took to respond during development. The integration ships, passes every test, and runs cleanly for months. Then, during a traffic spike at 2:14 a.m., a real authorization takes 4 seconds to come back from the issuer, well within Visa’s own monthly average standard, but past the 2-second value the integration happens to use.
The gateway times out, receives no response in the window it was configured to wait for, and the integration’s error handling retries the transaction automatically, the way it is built to handle any failed request. The original authorization, however, was not actually lost. It was simply slow, and it completes successfully on the issuer’s side a moment after the retry has already gone out. The customer now has two successful authorizations for one purchase, a support ticket, and a refund to process, none of which trace back to a bug in the payment logic itself. The root cause is a timeout value picked against sandbox behavior, combined with retry logic that never checked whether the original request had actually succeeded before trying again.
The resilience question a sponsor bank is actually asking
This gap is not only a technical risk. Federal banking regulators have a specific, named category for exactly this question in their own guidance on evaluating a third party before a bank relies on it. An assessment of a third party’s operational resilience practices supports a bank’s evaluation of that third party’s ability to effectively operate through and recover from any disruption or incident, whether internal or external. The guidance treats this as distinct from whether the third party’s features work as advertised. A platform can demonstrate every feature correctly in a polished demo and still fail this specific category entirely, because a demo rarely if ever simulates a genuine disruption on purpose.
That distinction matters directly for a fintech or platform going through sponsor bank diligence. A reviewer asking about operational resilience is not asking whether the checkout flow works. They are asking what happens when an authorization request times out at 2 a.m. under real production load, whether the system correctly reverses it, and whether a subsequent retry is safe rather than a duplicate charge waiting to happen. A team that has only ever tested against a sandbox’s instant, reliable responses has no real answer to that question beyond an assumption that it would probably be fine.
What an integration actually needs to handle this correctly
The fix starts with testing against the actual latency band the rules allow, not the latency a sandbox happens to produce. That means deliberately introducing delayed and dropped responses in a test environment, up to and past whatever timeout value the integration uses, to confirm the system behaves correctly when a real authorization takes several seconds or genuinely never arrives. A timeout value copied from sandbox testing without this exercise is a guess, not a validated setting.
The reversal path required by Section 1.7.7.1 needs to exist as actual, exercised code, not an assumption that the gateway’s SDK handles it invisibly. And the retry logic needs to be built around the specific sequence Section 1.7.7.2 describes: confirm whether the original request actually completed before treating a timeout as grounds for a new attempt, using an idempotency key the processor can use to recognize a retried request as the same transaction rather than a new one.
Building this correctly is exactly the discipline real payment gateway and API integrations work has to include from the start, not bolt on after a production incident reveals the gap. Confirming the fix actually holds under the specific failure conditions the rules describe, not just the happy path a demo exercises, is what the quality assurance and continuous delivery discipline around a payments integration is for. And for a system that was built against sandbox assumptions years ago and has quietly carried this gap since, closing it is exactly the kind of targeted application modernization work worth doing before an incident forces it, the same discipline covered in why a working prototype beats a pitch deck when the integration is still being built rather than already live.
Why this does not show up in code review either
A code review rarely catches this gap, because the code usually looks correct on its face. A timeout value, a retry block, and an error handler are all present and all reasonably written. What a review cannot see from the code alone is whether that timeout value was ever validated against a real authorization response distribution, or whether the retry path has actually been exercised against a genuine delayed-not-lost response rather than a clean, fast failure. The bug is not a missing feature. It is an untested assumption sitting inside code that compiles, passes its existing tests, and looks entirely reasonable to a reviewer who has no way to see what conditions it was actually validated against.
This is exactly why the fix has to happen at the testing level, not the code review level. A test suite that deliberately injects delayed responses, dropped responses, and responses that arrive after the client has already given up is the only way to actually prove the reversal and retry logic behaves correctly, rather than simply assuming it does because the code reads correctly on the page.
Frequently Asked Questions
How long can an authorization request legitimately take to get a response?
Visa Core Rules Section 7.3.3.1 requires an issuer or its authorizing processor, including Stand-In Processing, to respond to authorization requests in the US region in an average time not exceeding 5 seconds during each calendar month. That is an average across a month of traffic, not a per-transaction ceiling, so individual requests can legitimately take longer while still meeting the standard.
What is a gateway required to do if it never receives an authorization response?
Visa Core Rules Section 1.7.7.1 requires an acquirer to process a Reversal for an online financial transaction if the acquirer, merchant, or acceptance device did not receive an authorization response. Section 1.7.7.2 separately prohibits depositing a transaction that was reversed for the full amount, which means a retry has to account for the possibility that the original request actually succeeded before the reversal was processed.
Why does a working sandbox integration not guarantee production reliability?
A sandbox environment typically returns fast, consistent responses and rarely simulates a genuine timeout, a slow issuer response near the real-world average, or a network disruption. Federal banking regulators explicitly treat a third party’s operational resilience, its ability to operate through and recover from disruption, as a separate due diligence category from whether its features function correctly, because those are genuinely different questions.
Sources: Visa Core Rules and Visa Product and Service Rules, Sections 7.3.3.1, 1.7.7.1, and 1.7.7.2, and Interagency Guidance on Third-Party Relationships: Risk Management.