Overview
An external account is any bank account that exists outside the Ahrvo Banking system. It is linked to a customer to collect funds into the customer’s account via funding sources such as ACH, Wire, or Check. Customers can configure one or more external accounts. Every external account undergoes OFAC name checks for transaction processing.
Example: A customer’s Wells Fargo bank account from which they agree to debit or credit funds.
2. Attributes
| Field | Sub-field | Type | Description |
|---|---|---|---|
resourceName | — | String (Enum) | Always externalAccount. |
id | — | Long | Unique identifier assigned by Ahrvo Banking. |
externalId | — | String (≤45 chars) | Reference ID assigned by the program manager. |
holderName | — | String (≤128 chars) | Account holder name (printable ASCII except ~ and |). |
holderPhone | — | String | Holder’s phone number. |
holderAddress.addressLine1 | — | String (≤35 chars) | Address line 1. |
holderAddress.addressLine2 | — | String (≤35 chars) | Address line 2. |
holderAddress.city | — | String (≤25 chars) | City. |
holderAddress.state | — | String (2 chars) | State. |
holderAddress.zip | — | String (5 or 9 digits) | ZIP code. |
accountNumber | — | String (≤40 chars) | Full bank account number (letters, digits, *:#-/&,+’). |
accountNumberLast4 | — | String | Last four digits of the account number. |
routingNumber | — | String (9 chars) | ACH routing number. |
wireRoutingNumber | — | String (9 chars) | Wire routing number (if different). |
type | — | Enum | Account type (e.g., CHECKING). |
holderType | — | Enum | Holder type (e.g., INDIVIDUAL, BUSINESS). |
purpose | — | String | Purpose of linking this account. |
validateAccount.status | — | String (Enum) | EWS validation status. |
validateAccount.statusReason | — | String | EWS validation reason. |
validateAccount.statusDate | — | Timestamp | EWS validation date. |
prenoteValidation | — | String (Enum) | Prenote mode: ALWAYS, NEVER, ON_FAILURE. |
prenote.status | — | String | Prenote status. |
prenote.statusReason | — | String | Prenote reason. |
prenote.statusDate | — | Timestamp | Prenote date. |
microDepositValidation | — | String (Enum) | Micro-deposit mode: ALWAYS, NEVER. |
microDeposit.status | — | String | Micro-deposit status. |
microDeposit.statusReason | — | String | Micro-deposit reason. |
microDeposit.statusDate | — | Timestamp | Micro-deposit date. |
bankInfo.contactNumber | — | String | Bank’s contact number. |
bankInfo.name | — | String | Bank’s name. |
bankInfo.address | — | String | Bank’s address. |
bankInfo.routingNumber | — | String | Bank’s routing number. |
status | — | String (Enum) | Current external account status. |
statusReason | — | String | Reason for current status. |
statusDate | — | Timestamp | Date of current status. |
verification.ofacStatus | — | String | OFAC verification status. |
verification.ofacStatusReason | — | String | OFAC status reason. |
verification.ofacStatusDate | — | Timestamp | OFAC status date. |
metaData | — | Map | Key/value store (max 20 keys). |
tags | — | [String] | Labels assigned to this external account. |
linkedDocument.id | — | String | Document ID. |
linkedDocument.purpose | — | String (Enum) | AUTHORIZATION. |
linkedDocument.document.resourceName | — | String | Always document. |
linkedDocument.document.url | — | String | Document URL. |
linkedDocument.document.id | — | String | Document reference ID. |
linkedDocument.document.externalId | — | String | Document external ID. |
linkedDocument.document.type | — | String | Document type (e.g., SPAA). |
linkedDocument.document.name | — | String | Document filename. |
linkedDocument.document.base64EncodedContent | — | String | Base64-encoded file content. |
linkedDocument.linkedOn | — | Timestamp | Upload timestamp (MM/DD/YYYY HH:mm:ss UTC). |
linkedBy.userType | — | String | User type who linked the document. |
linkedBy.username | — | String | Username who linked the document. |
linkedBy.status | — | String | User status. |
validateInstantly.status | — | String | Instant-validation status (Ahrvo Account). |
validateInstantly.statusReason | — | String | Instant-validation reason. |
validateInstantly.statusDate | — | Timestamp | Instant-validation date. |
comment | — | String | User comments. |
createdOn | — | Timestamp | Creation timestamp. |
createdBy.username | — | String | Creator username. |
createdBy.status | — | String | Creator status. |
lastUpdatedOn | — | Timestamp | Last update timestamp. |
lastUpdatedBy.username | — | String | Updater username. |
lastUpdatedBy.status | — | String | Updater status. |
3. Statuses
External Account Statuses
| Status | Status Reason | Events responsible |
|---|---|---|
INACTIVE | Pending Verification | Default on creation. |
PENDING_VERIFICATION | Pending Verification | Verification in progress. |
ACTIVE | — | Successful OFAC/validation. |
BLOCKED | Various (e.g., R02, manual) | Returns on collect/prenote/micro; manual block; account closed via instant validation. |
OFAC Statuses
| Status | Events responsible |
|---|---|
PENDING_VERIFICATION | Default on create/update if OFAC enabled. |
VERIFIED | Successful OFAC verification. |
UNDER_REVIEW | Automation failed; manual review. |
REJECTED | Manual OFAC disapproval. |
IGNORED | OFAC disabled by program manager. |
Linked Document Statuses
| Status | Events responsible |
|---|---|
PENDING VERIFICATION | Default on document upload. |
VERIFIED | Reviewer-approved. |
REJECTED | Reviewer-rejected. |
EWS Statuses & Status Reasons
| Status | Reason |
|---|---|
PENDING | Pending |
NOT_FOUND | Account not found/undetermined |
CLOSED | Account closed/Pending closure |
HIGH_RISK | Stop payment requested/negative balance |
INVALID_DEBIT_ACCOUNT | No debits accepted |
OPEN | Active, good standing |
VALIDATED | Validated and in good standing |
Prenote Statuses & Status Reasons
| Status | Reason | Description |
|---|---|---|
PENDING | PENDING | Scheduled prenote not yet in transit. |
PROCESSING | PROCESSING | Prenote in transit. |
COMPLETED | COMPLETED | Prenote succeeded; account info valid. |
FAILED | RETURNED | Prenote failed; bank return code (e.g., account closed). |
NOT_REQUIRED | NOT_REQUIRED | Skipped due to instant validation block. |
Micro Deposit Statuses & Status Reasons
| Status | Reason | Description |
|---|---|---|
PENDING | PENDING | Micro-deposit not yet in transit. |
AWAITING_VERIFICATION | PROCESSING | Micro-deposit in transit. |
VERIFIED | VERIFIED | Micro-deposit succeeded; account info valid. |
VERIFICATION_FAILED | VERIFICATION FAILED | Micro-deposit failed after max attempts. |
NOT_REQUIRED | NOT_REQUIRED | Skipped due to instant validation block. |
Instant Validation Statuses & Status Reasons
| Status | Reason | Description |
|---|---|---|
PENDING | PENDING | Under instant validation. |
OPEN | VERIFIED_BY_SYSTEM | Ahrvo account instantly validated. |
INVALID_DEBIT_ACCOUNT | No debits accepted | Ahrvo account accepts only credits. |
VERIFICATION_FAILED | VERIFICATION FAILED | Name mismatch on Ahrvo account. |
BLOCKED | Account blocked/inactive | Ahrvo account is BLOCKED or INACTIVE. |
NOT_FOUND | Account not found | No matching Ahrvo account found. |
4. Business Validations
externalIdmust be unique and immutable.- Cannot create duplicate account (same number, routing & type) for same owner.
- In
INACTIVEstatus, any field may be updated; inACTIVE, onlyholderNameandpurpose. - Only one of prenote or micro-deposit validations allowed.
- Validation methods enabled by program manager only.
- Accounts activate post successful OFAC or validation.
- Manually
BLOCKEDaccounts may be unblocked (returns toPENDING_VERIFICATION). - External account may be deleted if no transactions exist.
- Verified documents cannot be deleted.
5. Error Codes & Messages
| Error Code | Error Message | Condition |
|---|---|---|
EC-BL-0003 | ExternalAccount with external reference: <external-id> already exists. | Duplicate externalId. |
EC-BL-0004 | Routing Number: <routing-number> does not exist. | Invalid ACH routing number. |
EC-BL-0004 | Wire Routing Number: <routing-number> does not exist. | Invalid wire routing number. |
EC-VA-0005 | {"errorCode":"EC-VA-0005","errorMessage":"Validation failed.","errors":[{"field":"<field>","message":"Is required."}]} | Missing mandatory field. |
EC-BL-2344 | Either prenote or micro deposit is allowed. | Both validation methods requested simultaneously. |
EC-BL-0525 | Details entered do not match; you have {attempts_remaining} attempts left. | Micro-deposit verify amounts mismatch. |
EC-BL-0526 | Maximum no. of attempts reached; account verification failed. | Micro-deposit attempts exhausted. |
6. Operations
- Create External Account
- Update External Account
- Retrieve External Account by
id - Delete External Account
- Retrieve all External Accounts linked to a Customer
- List External Accounts
- Validate External Account
- Verify External Account