Overview
The Account Intelligence V3 endpoint is part of GrailPay’s broader Account Intelligence system. It helps assess whether a user’s bank account is valid, active, and safe to use. With a single API call, the endpoint returns a confidence_score along with key insights based on the account and identity data you provide. This enables your team to make smarter, risk-informed decisions during onboarding, funding, and payout processes — enhancing safety, reducing fraud, and improving overall user experience. In the request payload, you’ll find an identity object that supports two mutually exclusive options: individual or organization. Use the organization object when validating business-related information, and the individual object when validating a person. If both are provided in the same request, the system will return an error. While only the account and routing numbers are required to perform a basic validation, we strongly encourage you to send as much information as possible. The more complete the data, the more accurate and meaningful the resulting confidence score and insights will be. Actions By default, every call to the Account Intelligence endpoint will validate the account and routing number provided. However, depending on the services you wish to use, you may request additional checks by specifying them in the actions object. The actions object allows you to include optional features in your validation request. Currently, we support one additional action: Name Match. This feature checks whether the name provided in the identity object matches the name on file for the bank account. To enable Name Match, include it in the actions block of your request payload, as shown in the example below.This API is only available for U.S. bank accounts.
Endpoint
POST /api/v3/accounts/validate
Request Body
Request Fields
Field | Type | Required |
---|---|---|
bank_account | object | yes |
bank_account.account_number | string | yes |
bank_account.routing_number | string | yes |
bank_account.account_type | string [checking , savings ] | no |
location | object | no |
location.address | object | no |
location.address.street_1 | string | yes, if address object included |
location.address.street_2 | string | no |
location.address.city | string | yes, if address object included |
location.address.state | string | yes, if address object included |
location.address.zip | string | yes, if address object included |
location.gps | object | no |
location.gps.latitude | decimal | yes, if gps object included |
location.gps.longitude | decimal | yes, if gps object included |
location.ip_address | string | no |
identity | object | no |
identity.individual | object | no |
identity.individual.first_name | string | yes, if individual object included |
identity.individual.last_name | string | yes, if individual object included |
identity.individual.middle_name | string | no |
identity.individual.prefix | string | no |
identity.individual.suffix | string | no |
identity.individual.email | string | no |
identity.individual.phone_number | string | no |
identity.individual.device_id | string | no |
identity.organization | object | no |
identity.organization.name | string | yes, if organization object included |
identity.organization.alternate_name | string | no |
identity.organization.email | string | no |
identity.organization.phone_number | string | no |
identity.organization.device_id | string | no |
actions | object | no |
actions.name_match | boolean | no |
Response
Sucess ( 200 )
Errors & Warnings
Error ( 400 )
Error ( 401 )
Error ( 415 )
Error ( 429 ) )
Error ( 500
Usage Recommendations
- Always pass complete and accurate data to maximize validation accuracy.
- Use the confidence_score and decisioning_insights data to drive onboarding decisions.
- Check the name_match, negative_transactions_seen fields closely if the confidence_score is low.
- You can display insights like valid_routing_number to users or use them for internal routing logic.