Manual Bank Verification
Manual Bank Verification API
Overview and Workflow
The Manual Bank Verification API allows you to verify a user's bank account information (Account Number and Routing Number) and identity details without requiring the user to log in via online banking credentials. This endpoint validates the banking structure, assesses return risk, and checks account ownership against provided identity data.
As a Client, you will indicate which Result Codes are automatic “failures” after processing. Aerosync will set the failure codes for your configurationId. Aerosync can also set banks to the Manual verification blocklist as needed (IE if you wants to automatically block Chime, we would add this to your routing number blocklist)
Happy path
- On success, a result code will be returned, along with a connectionId representing the new bank.
- You can call the Aerosync /accounts endpoint with this connectionId to see more account details as needed
On failure
- Result code returned
- connectionId will be returned as
null - You will need to triage with the end user to understand if they have an alternative AN/RN pair or better identity information
HTTP Request
Sandbox - POST http://api.sandbox.aerosync.com/v2/manual-bank-verification
Production - POST http://api.aerosync.com/v2/manual-bank-verification
Request Parameters
The request body accepts a JSON object containing the bank account and identity details.
| Parameter | Type | Required? | Description |
|---|---|---|---|
| accountNumber | String | Yes | Max 20 characters. Numeric only. |
| routingNumber | String | Yes | Exact 9 characters. Numeric only. |
| firstName | String | Yes | User's first name. |
| lastName | String | Yes | User's last name. |
| accountType | String | No | Enum:checkingorsavings. Note: Savings validation must be enabled in your configuration. |
| businessName | String | No | Name of the business (if applicable). |
| fullSSN | String | No | User's SSN. 9 characters. Numeric only. |
| dateOfBirth | String | No | User's date of birth. Format:MMDDYYYY |
| street | String | No | User's street address. Max 100 chars. Alphanumeric, dashes, periods (.), and forward slashes (/) allowed. |
| city | String | No | City of user street address. Max 50 chars. Alphanumeric, dashes, periods (.), and forward slashes (/) allowed. |
| state | String | No | State of the user's city. 2-character state code (e.g., "NY"). |
| zipCode | String | No | Numeric only. No dashes. |
| phoneNumber | String | No | 10 characters. Numeric only. |
| emailAddress | String | No | Max 50 chars. Alphanumeric, dashes, periods (.), and underscores (_) allowed. |
Request example:
POST /manual-bank-verification
Authorization: Bearer {{token}}
x-api-key:'API key'
{
"accountNumber": "123456789",
"routingNumber": "000000009",
"firstName": "Cory",
"lastName": "Anderson"
}Response Handling
The API returns a JSON object containing the verification status and detailed result codes.
Success Response (HTTP 201)
A 201 status indicates the verification process completed successfully and the account is considered valid based on your configuration. A connectionId is generated.
{
"statusCode": 201,
"resultCode": "11",
"connectionId": "6c8e1e6d-3db5-4235-a86b-62aa467ceb02",
"verified": true,
"resultCodeDetails": [
{
"bankVerificationCode": "Pass - Valid Account",
"accountOwnerVerificationCode": "Pass",
"description": "Account owner details match with a high confidence the data on file with the bank"
}
]
}
Failure/Review Response (HTTP 200)
A 200 status with a failure resultCode indicates the request was processed, but the verification failed or requires manual review (e.g., invalid account, high return risk, or ownership mismatch). No connectionId is returned.
{
"statusCode": 200,
"resultCode": "73",
"connectionId": null,
"verified": false,
"resultCodeDetails": [
{
"bankVerificationCode": "Fail",
"accountOwnerVerificationCode": "Fail",
"description": "The information provided does not match the information from the bank"
}
]
}
Error Response (HTTP 400)
Occurs when invalid parameters are sent or configuration requirements are not met (e.g., trying to verify a Savings account when that feature is disabled).
{
"error": {
"code": "AC-122",
"message": "Savings accounts are not enabled for this configuration"
}
}
Result Code Reference
The resultCode is a composite indicator of two factors: Bank Verification (Is the account valid/safe?) and Account Owner Verification (Does the user match the bank's records?).
Interpreting the Codes
- 1x - 4x: Bank Verification Passed (Various levels of confidence).
- 5x - 8x: Bank Verification Failed or Low Confidence.
- x1: Owner Match (Pass).
- x2: Owner Unknown (No Data).
- x3: Owner Mismatch (Fail).
| Result Code | Bank Verification Code | Bank Verification Code Description | Account Owner Verification Code | Account Owner Verification Code Description |
|---|---|---|---|---|
| 11 | Pass (Valid Account) | The account is open and valid and has a good history of valid transactions | Pass (Match) | Account owner details match with a high confidence the data on file with the bank |
| 12 | Pass (Valid Account) | The account is open and valid and has a good history of valid transactions | No Data | No Data came back from the account owner details provided |
| 13 | Pass (Valid Account) | The account is open and valid and has a good history of valid transactions | Fail (Mismatch) | Account owner details provided do not match the data on file with the bank |
| 21 | Pass (High Confidence Structure) | The account number structure matches routing number provided | Pass (Match) | Account owner details match with a high confidence the data on file with the bank |
| 22 | Pass (High Confidence Structure) | The account number structure matches routing number provided | No Data | No Data came back from the account owner details provided |
| 23 | Pass (High Confidence Structure) | The account number structure matches routing number provided | Fail (Mismatch) | Account owner details provided do not match the data on file with the bank |
| 31 | Pass (Medium Risk of Returns) | Account history indicates debit return may be more likely | Pass (Match) | Account owner details match with a high confidence the data on file with the bank |
| 32 | Pass (Medium Risk of Returns) | Account history indicates debit return may be more likely | No Data | No Data came back from the account owner details provided |
| 33 | Pass (Medium Risk of Returns) | Account history indicates debit return may be more likely | Fail (Mismatch) | Account owner details provided do not match the data on file with the bank |
| 41 | Pass (Medium Confidence Account Number Structure) | Account number structure structure may be invalid and doesn’t match the routing number provided | Pass (Match) | Account owner details match with a high confidence the data on file with the bank |
| 42 | Pass (Medium Confidence Account Number Structure) | Account number structure structure may be invalid and doesn’t match the routing number provided | No Data | No Data came back from the account owner details provided |
| 43 | Pass (Medium Confidence Account Number Structure) | Account number structure structure may be invalid and doesn’t match the routing number provided | Fail (Mismatch) | Account owner details provided do not match the data on file with the bank |
| 51 | Fail (Low Confidence Account Number Structure) | Account number structure structure is likely invalid and doesn’t match the routing number provided | Pass (Match) | Account owner details match with a high confidence the data on file with the bank |
| 52 | Fail (Low Confidence Account Number Structure) | Account number structure structure is likely invalid and doesn’t match the routing number provided | No Data | No Data came back from the account owner details provided |
| 53 | Fail (Low Confidence Account Number Structure) | Account number structure structure is likely invalid and doesn’t match the routing number provided | Fail (Mismatch) | Account owner details provided do not match the data on file with the bank |
| 61 | Fail (High Risk of Returns) | Account history indicates debit return may be highly | Pass (Match) | Account owner details match with a high confidence the data on file with the bank |
| 62 | Fail (High Risk of Returns) | Account history indicates debit return may be highly | No Data | No Data came back from the account owner details provided |
| 63 | Fail (High Risk of Returns) | Account history indicates debit return may be highly | Fail (Mismatch) | Account owner details provided do not match the data on file with the bank |
| 71 | Fail (Invalid Account/RN) | The Account Number, Routing Number may be invalid or the account may be closed | Pass (Match) | Account owner details match with a high confidence the data on file with the bank |
| 72 | Fail (Invalid Account/RN) | The Account Number, Routing Number may be invalid or the account may be closed | No Data | No Data came back from the account owner details provided |
| 73 | Fail (Invalid Account/RN) | The Account Number, Routing Number may be invalid or the account may be closed | Fail (Mismatch) | Account owner details provided do not match the data on file with the bank |
| 81 | No Data | No Data came back from the routing number provided | Pass (Match) | Account owner details match with a high confidence the data on file with the bank |
| 82 | No Data | No Data came back from the routing number provided | No Data | No Data came back from the account owner details provided |
| 83 | No Data | No Data came back from the routing number provided | Fail (Mismatch) | Account owner details provided do not match the data on file with the bank |
| 94 | Blocklisted | Routing number specified on Blocklist | Blocklisted | Routing number specified on Blocklist |
Workflow Note
Specific resultCode values can be configured as automatic failures based on your business logic. If a code is configured as a failure, the API will not return a connectionId. To set a passing or failing resultCode, please contact your dedicated Solutions Engineer.
Updated 22 days ago