Maximum attempt limits apply to SaaS and Embedded Account Capture integrations only. Where a maximum attempts value appears below, it is enforced by the Ingo-hosted experience. Direct IngoPay API integrations do not enforce attempt counters — your application controls whether and how often a recipient may retry.
Recipient Authentication (RA)
Recipient Authentication is a required feature for programs using Notify — Classic and Notify — Managed Parties. It is used as a fraud prevention mechanism supplementing your KYC process, verifying that the recipient engaging in the disbursement flow is the intended party. Recipients are challenged against authentication data you provide in the Notify API request. You configure the challenge fields, field order, input format, and the behavior on match and mismatch. Risk value definitions:Recipient Verification Data Matching (RVDM)
RVDM is an optional feature for programs using the IngoPay API and Embedded Account Capture. It compares customer-entered account data against recipient information provided in the API request to detect mismatches that may indicate fraud. You configure your risk tolerance for each field independently, allowing you to set different responses for high-confidence fields (e.g., name) vs. lower-confidence fields (e.g., address). Risk value definitions:
Configurable fields:
Address Verification Service — AVS (Card Only)
AVS is an optional feature for card-based disbursements. It compares the billing address entered by the recipient against the cardholder address on file at the issuing bank. Ingo collects the address from the recipient, submits it to the issuer, and handles the response according to your configured risk profile. AVS is performed during the verify call, via the IngoPay API or the Embedded Account Capture SDK.Issuers control their own matching algorithms. Ingo has no visibility into individual issuer matching logic — results may vary. Many issuers use fuzzy matching for near-match scenarios.
Configurable AVS responses:
Card Verification Value — CVV (Card Only)
CVV is an optional feature for card-based disbursements. It verifies that the recipient is in possession of the physical card by requiring entry of the 3-digit security code printed on the card. When enabled, a full CVV match is required. A mismatch results in a hard failure and the recipient is given a configurable number of re-entry attempts before a terminal event is recorded. CVV is performed during the verify call, via the IngoPay API or the Embedded Account Capture SDK.Account Name Inquiry — ANI (Card Only)
ANI is an optional feature for card-based disbursements. It verifies that the cardholder name provided by the recipient matches the name held by the issuing bank, providing an additional fraud check during card tokenization. ANI is performed within the same card validation call that carries AVS and CVV — it is not a separate request. ANI results are included in thenetwork_validation object within the tokenization success webhook event.
ANI is currently supported for Visa cards only. Mastercard support is planned. Because Ingo normalizes provider responses, no integration change will be required when it is added — see Status Codes.
ANI does not have its own attempt counter. A hard ANI result draws from the same AVS / CVV maximum attempts allowance rather than a separate ANI limit.
network_validation payload example:
Name match decision codes:
These are Ingo-normalized values. Integrate against them rather than against any network-specific response values.
Account Number Validation — ANV (Bank Account Only)
ANV is an optional feature for bank account (ACH) disbursements. It verifies the active status of the bank account number provided by the recipient against the issuing bank’s records. ANV is performed during the verify call via the IngoPay API or the Embedded Account Capture SDK. Risk value definitions:
Configurable ANV responses:
Name on Account Validation — NAV (Bank Account Only)
NAV is an optional feature for bank account (ACH) disbursements. It verifies that the recipient’s name — and optionally their address — matches the account holder information held by the issuing bank. Risk value definitions:
Configurable NAV responses:
PayPal Risk Verification Service
PayPal account verification, upon recipient consent, matches the recipient’s PayPal account data against client-provided recipient information for risk management purposes. Acceptance or rejection is based on your configurable matching criteria. If rejected, the recipient cannot reattempt verification with an alternate PayPal account. Configurable verification fields:One-Time Authorization Code — OTAC
OTAC may be used as a primary, secondary, or dual authentication mechanism for Notify — Managed Parties programs. It delivers a time-limited code to the recipient via SMS or email, confirming they have access to the registered contact method. Configurable OTAC options:OFAC Screening
OFAC screening may be required depending on your program’s use case and integration. Ingo can perform OFAC checks for each recipient presented in the payment processing gateway. When configured, an OFAC check runs during the process call for any recipient whose last OFAC validation exceeds 30 days. A suspended transaction is placed on hold pending review by Ingo’s Risk Services team. Results are delivered asynchronously via webhook. See Webhooks for the applicable event codes.Transactional Velocity Limits
Velocity limits apply to all disbursement methods and are evaluated at the individual Customer Account Number level — the recipient’s destination account — rather than in aggregate across your program. Your Integration Manager will work with you to configure program-specific limits within the boundaries set by card networks, Ingo, and your sponsor bank.Configured limits
All periods are rolling except the daily limit, which resets at midnight Mountain Time.
Which code is returned for a single transaction breach depends on your integration. SaaS participants receive
603 — “transaction amount is outside your allowed range,” covering both the configured maximum and minimum. Non-SaaS integrations receive 711 — “exceeds single transaction amount limit.” Map whichever applies to your integration, and confirm which you should expect with your Integration Manager.604 is a separate funding control, returned when the amount exceeds your prefund balance or daily processing cap — not a velocity limit. See the Status Codes for full descriptions.Enforcement behavior
Every request is evaluated against your configured limits in real time, and the outcome is deterministic. A request that breaches a limit is declined on that attempt, with the applicable code returned in the synchronous process response — there is no attempt counter that trips after a number of tries and no accumulating penalty. Where a cumulative limit is breached, that request and any subsequent request continue to be declined until the relevant window clears. Because the decline reason is returned synchronously with a specific code, you can surface a meaningful message to your user rather than a generic failure. Map each code above to the message you want your recipients or operators to see.Validating limits before submission
You may choose to mirror your configured limits in your own system and validate before calling Ingo, so a user receives immediate feedback rather than waiting for a decline.- Single transaction range is the most practical to enforce pre-flight, because it is a static threshold requiring no history.
- Cumulative limits can also be tracked on your side, but take more effort to maintain — you would accumulate per destination account and align to the midnight Mountain Time boundary for the daily limit.
Accumulate on account_id, not customer_account_token
If you track cumulative limits yourself, key your accumulation on account_id — the Ingo-assigned unique identifier for the disbursed-to account. It is returned in the account tokenization and payment webhook events. Persist it against your own records when you receive it.
The
account_id inside the open banking object is a Finicity identifier and is not the same field — the spec notes it as distinct. Use the Ingo account_id (maxLength: 36) from the account and disbursement payloads.Ingo’s ledger remains the authority for all cumulative limits. Treat any client-side check as a fast-fail for user experience, and continue to handle the response codes above as the final outcome.