Errors and Retries

Decide when to retry Verto API requests, when to pause for RFI or compliance review, and how to avoid duplicate financial operations.

Errors and Retries

Use this page to decide when to retry, when to stop and fix the request, and how to avoid duplicate financial operations when the result of an API call is uncertain.


✅ Before you implement retries

Set these controls up before you move money in production:

  1. Send an Idempotency-Key on any write request that can create a financial side effect.
  2. Generate a Vfx-Correlation-Id for each logical operation so you can trace retries across systems.
  3. Store request IDs, payment IDs, and webhook events so you can reconcile uncertain outcomes.
  4. Process webhook updates because the final transaction state may arrive after the original API call.

📇 The Header Registry

Headers provide the metadata for tracing every request through our global stack.

HeaderTypeDescription
AuthorizationRequestBearer <token> obtained via Authentication.
Vfx-Correlation-IdRequestMandatory. A unique GUID provided by you to track a logical operation across multiple steps.
Vfx-Api-Call-IdResponseVerto's internal ID for this specific request. Use this when contacting Support.
Idempotency-KeyRequestCritical. Ensures a request can be safely retried without duplicate execution.

🚦 HTTP Status Strategy

Verto utilizes standard HTTP codes to categorize the "severity" of an error.

CodeMoodAction
2xx✅ SuccessProceed with your business logic.
400❌ ValidationDon't Retry. Fix your payload parameters and try again.
401/403🔒 AuthRefresh Token. Check credentials or licensing status.
429⏳ LimitedWait. Implement exponential backoff. You've hit our rate limits.
5xx📡 ServerRetry Safely. Use your Idempotency-Key and wait 5-10 seconds.

Retry decision guide

Use this quick rule set when a request fails or times out:

SituationRetry?Recommended action
Validation failure (400)NoFix the payload, beneficiary data, route inputs, or currency before sending another request.
Authentication or permission failure (401 / 403)Usually noRefresh the token, check permissions, or confirm the corridor is enabled before retrying.
Rate limit (429)YesWait, back off exponentially, and retry with the same logical tracking IDs.
Server error (5xx)YesRetry safely with the same Idempotency-Key on write operations.
Network timeout / unknown resultYes, carefullyRetry with the same Idempotency-Key, then reconcile the final state through webhooks or follow-up reads.
Compliance review or RFI openNoPause the workflow, collect the requested information, and follow Handle RFIs and Compliance Exceptions.

📖 Error Code Dictionary

Beyond the HTTP status, the response body contains a specific errorCode string for programmatic handling.

🏦 Wallet & Ledger Errors

Error CodeStatusMeaningSolution
INSUFFICIENT_FUNDS400Wallet balance is too low.Fund the wallet via Receive.
INVALID_CURRENCY400ISO code not supported.Verify your currency is on our coverage list.
WALLET_NOT_FOUND404Missing ID.Verify the Wallet ID in your dashboard.

💸 Payout & Route Errors

Error CodeStatusMeaningSolution
ROUTE_NOT_AVAILABLE403Region blocked.Contact your account manager to enable this corridor.
VALIDATION_ERROR400Sorting/IBAN error.Check specific field-level validation messages in the JSON body.

🔄 The Retry & Idempotency Loop

🛡️

The Golden Rule: Never Retry Without a Key

If you experience a 503 Service Unavailable or a network timeout while sending a payment, do not just send a new request. You might double-pay!

  • Always include an Idempotency-Key header with a unique value (e.g. your own internal DB primary key).
  • Verto caches the result for 24 hours. Retrying with the same key will return the original success/failure instead of a new charge.
🛑

Do not retry an open RFI

A Request for Information (RFI) is not a transient API failure. If a payout, beneficiary, FX trade, or onboarding workflow is under review, pause automation and follow Handle RFIs and Compliance Exceptions before creating another request.

Common failure scenarios

ScenarioSafe response
Payment request timed out after submitRetry with the same Idempotency-Key, then confirm the result through webhooks or a follow-up lookup.
Webhook arrives after the API call failed locallyTreat the webhook as the source of truth for the final transaction state and reconcile your internal ledger.
Repeated 429 responsesSlow down the caller, queue the operation, and retry with backoff instead of hammering the endpoint.
Beneficiary or route validation keeps failingStop retrying and correct the underlying data before sending the request again.
Workflow is waiting for RFI informationDo not retry the write request. Move the item into an exception queue and collect the requested information.

🎯 Next Steps

Webhooks Guide →
Listen for post-retry success events and final state changes.
Handle RFIs and Compliance Exceptions →
Pause review-blocked workflows safely and avoid duplicate retries.