Implementing retry logic is strongly recommended for all Ingo Payments integrations. A subset of status codes represent transient infrastructure failures — timeouts, routing issues, and temporary system errors — that are recoverable with a subsequent attempt. Failing to retry these codes results in unnecessary transaction failures that require manual intervention and degrade the customer experience. The retry codes and strategy below apply to IngoPay API integrations. Clients using Notify products should work with their Integration Manager to confirm how retry handling applies to their specific flow.Documentation Index
Fetch the complete documentation index at: https://developers.ingopayments.com/llms.txt
Use this file to discover all available pages before exploring further.
Stand-In Responses and No-Response Handling
For push and pull transactions where Ingo makes a real-time downstream call to a payment network, Ingo holds awaiting a response from the network before issuing a stand-in. The hold duration is generally up to 60 seconds, though the specific timeout varies depending on the payment network your program is configured to use. To prevent your application from waiting indefinitely, Ingo issues a stand-in response when the network has not responded within your program’s configured threshold. Stand-in settings are configured once at the program level during onboarding with your Integration Manager. Push and pull thresholds are configured separately. This behavior is most prevalent for real-time transactions — card push disbursements and RTP — where a synchronous downstream network call is required. ACH, check, and similar rails process asynchronously and are less likely to encounter stand-in conditions.Push — Stand-In Success (102)
If the downstream network does not respond within your configured push stand-in threshold, Ingo returns code102 (Success — Pending Issuer Response). Treat 102 as a success equivalent to 100. The transaction is considered complete and no additional webhook follows. The 102 is the final, definitive response for that request.
Ingo recommends a push stand-in threshold of 15 seconds or higher. The longer your program can hold, the more actual network outcomes your integration receives directly rather than stand-in responses. Work with your Integration Manager to align the threshold to your customer experience model.
Pull — Stand-In Decline (790)
If the downstream network does not respond within your configured pull stand-in threshold, Ingo returns code790 (Declined — Stand In) and reverses the transaction. The reversal typically appears as a refund in reporting.
A 790 stand-in decline can be safely retried using the same participant_unique_id1. Because the original transaction was declined and reversed, the retry is treated as a fresh attempt. A successful retry returns 100.
Ingo recommends a pull stand-in threshold of 30 seconds or higher for the same reasons described above.
If no response is received after the stand-in window
Ingo will always issue a stand-in response before your configured threshold elapses. Clients should wait for that response before initiating any retry — do not retry based on an immediate connection error or timeout on your side. If your stand-in window has elapsed and no response has been received, retry using the sameparticipant_unique_id1. Possible outcomes on the retry:
| Response | Meaning |
|---|---|
100 | Ingo did not receive the original request. The retry was processed as a new transaction and succeeded. |
101 | The original request was received and processed successfully. No new transaction was created. |
102 | The original request was received and a stand-in success was issued. Treat as a confirmed success. |
103 | The original request was received and queued for async processing. |
104 | The original request is still processing. See Code 104 handling below. |
101, 102, and 103 only emit when the original request was previously marked successful. Receiving any of these on a retry confirms the original transaction was processed — no further action is needed.
Code 104 — In-Progress Transactions
Code104 requires special handling. It is not a failure — it means a prior request with the same participant_unique_id1 is still processing and a new posting attempt was not initiated.
When you receive a 104:
- Do not generate a new
participant_unique_id1. The original transaction is active. Submitting a new ID will create a second transaction attempt, which is likely not your intent. - Retry with the same
participant_unique_id1after a brief wait. The transaction will either complete and return a success code, or fail and return a terminal code on a subsequent attempt. - If you are subscribed to webhooks, the outcome will also be delivered asynchronously when processing concludes.
Retry-Eligible Codes
The following codes represent transient conditions. A retry with the same request is appropriate for all of them.| Code | Description | Applicable Call |
|---|---|---|
104 | In progress — idempotent response (prior request still processing) | Process |
500 | General error | Search, Verify, Process |
501 | Response from endpoint was invalid | Verify, Process |
502 | Process timeout | Verify, Process |
511 | OFAC timeout | Process |
514 | OFAC unknown error | Process |
706 | Transaction routing failure | Process |
707 | Transaction routing failure | Process |
709 | Transaction routing failure | Process |
717 | Transaction routing failure | Process |
718 | Transaction routing failure | Process |
750 | Response from endpoint not recognized | Verify, Process |
751 | Response from endpoint not defined | Process |
900 | Account identity lookup error | Verify, Process |
901 | Account identity lookup error | Verify, Process |
990 | General error | Verify, Process |
999 | General error | Verify, Process |
Codes
511 and 514 indicate that the OFAC screening service timed out or returned an unexpected error — not that the recipient was matched against the OFAC list. These are transient and retry-eligible. A confirmed OFAC match returns code 130 and is never retry-eligible. See Code Reference for details.participant_unique_id1 and timestamp from the failed request.