Developer 7 min read

Handling Verification of Payee Timeouts and Retries

Every Verification of Payee integration eventually meets a responding bank that is slow or unreachable. The difference between a robust integration and a fragile one is how it handles the timeout.

By Verification of Payee EU · powered by RoxPay

Key takeaways

  • Set a sensible synchronous timeout and treat overshoot as not-available, not as a hard failure.
  • Retry with backoff, but only with idempotent requests keyed by a stable identifier.
  • Define a clear fallback policy for the payer when no outcome can be obtained in time.

Verification of Payee depends on a remote answer from the payee's bank. When that bank is slow, overloaded or temporarily unreachable, your integration has to decide what to do — and that decision affects both the payer's experience and your compliance position. The worst outcomes are a frozen checkout or a verification that quietly gets charged or counted twice.

The not-available outcome is a feature

The scheme defines a not-available result precisely so you do not have to invent error semantics. When the responding side cannot answer in time, treat it as a first-class outcome rather than an exception.

  • Set a synchronous timeout aligned to your checkout budget (often a couple of seconds).
  • On overshoot, surface a neutral not-available state to the payer rather than a scary error.
  • Decide, by policy, whether the payer may proceed, must wait, or should be routed for review.

Retrying safely

Retries help with transient faults but cause damage if they are not idempotent. A retry must never create a second logical verification or a second charge.

  1. 1 Attach a stable request identifier to each verification attempt.
  2. 2 Retry transient network errors with exponential backoff and a small cap.
  3. 3 Never retry a definitive outcome (match, close match, no match) — only retry true transport failures.
  4. 4 Reconcile any late answer against the request identifier so it is recorded once.

Budget the wait, then decide

Pick a synchronous budget you can defend to both your UX and compliance teams. Past that budget, fall back deliberately — show pending or not-available — instead of letting the request hang and the payer abandon.

RoxPay returns the standardised outcomes including not-available, supports idempotent retries by request ID, and falls back to a webhook for late answers — so your timeout policy stays simple.

FAQ

Frequently asked

Align it to your checkout experience — often a couple of seconds for synchronous use. Beyond that, fall back to a pending or not-available state rather than blocking the payer indefinitely.

Only for transport failures, and only with idempotent requests keyed by a stable identifier. Never retry a definitive match outcome; that is a result, not an error.

Treat it as a defined outcome and apply your policy: allow the payer to proceed with caution, wait for an asynchronous answer, or route the payment for manual review depending on risk.

Make VoP reliable in production

Talk to RoxPay about timeouts, idempotent retries and webhook fallbacks on the SEPA VoP scheme.