External Account Validations
Understand how external accounts are verified, validated, and activated for transactions
Validating an external account helps:
- Reduce ACH return risks (e.g., insufficient funds, closed accounts)
- Prevent fraudulent activity
- Improve success rates of debit and credit transactions
Depending on your program configuration, validations can be triggered during account creation or later using the validation API. Multiple validation methods may be applied before an account becomes fully active.
Validation & Activation Lifecycle
When an external account is created, it moves through validation checks before reaching an active state. The diagram below shows the high-level flow:
sequenceDiagram
participant App as Your application
participant PCE as PCE
participant Bank as EWS / Bank
participant Cust as Customer
App->>PCE: Create external account (validation options)
PCE-->>App: status INACTIVE (PENDING_VERIFICATION)
PCE->>Bank: EWS instant validation
alt EWS returns OPEN
Bank-->>PCE: Account valid
else EWS inconclusive (ON_FAILURE fallback)
Bank-->>PCE: NOT_FOUND / high-risk
PCE->>Bank: Prenote (zero-dollar)
Bank-->>PCE: Prenote result
end
opt Micro-deposit (ALWAYS)
PCE->>Cust: Send two micro-deposits
Cust-->>PCE: Confirm amounts (verify API)
end
Note over PCE: Combine method results + OFAC into a final status
alt Debit + credit checks pass
PCE-->>App: Webhook — ACTIVE (full debit & credit)
else Debit check fails, credit passes
PCE-->>App: Webhook — ACTIVE (Credit only, debit restricted)
else Critical failure (OFAC rejected / EWS high-risk)
PCE-->>App: Webhook — BLOCKED
end
Validation Methods
Each validation method runs independently. Their combined results determine the final account status.
1. EWS (Early Warning Services) — Instant Validation
Validates account ownership at the financial institution in real time.
| Status | Meaning |
|---|---|
PENDING | Validation not yet started |
OPEN / VALIDATED | Account is valid and open |
NOT_FOUND | Account does not exist at the bank |
INVALID_DEBIT_ACC | Account cannot accept debits |
CLOSED | Account has been closed |
HIGH_RISK | Account flagged as high risk |
Trigger: SetvalidateAccount: [{"ews": true}]during account creation or via the validate API.
2. Prenote — ACH Pre-notification
Sends a zero-dollar ACH entry to verify the routing and account number are valid.
| Status | Meaning |
|---|---|
PENDING | Prenote not yet sent |
PROCESSING | Prenote submitted to ACH network |
COMPLETED | Routing and account verified |
FAILED | Invalid routing or account number |
Trigger: Setprenote: "ALWAYS"or"ON_FAILURE"(falls back to prenote if EWS fails).
3. Micro-Deposit — Customer Verification
Sends two small credit amounts (e.g., $0.12, $0.34) to the customer's bank. The customer confirms the amounts to prove account ownership.
| Status | Meaning |
|---|---|
PENDING | Micro-deposits not yet initiated |
PROCESSING | Deposits sent, awaiting arrival |
AWAITING_VERIFICATION | Deposits arrived — waiting for customer to confirm amounts |
COMPLETED | Customer confirmed correct amounts |
RETURNED | Deposits returned by the bank (invalid account) |
FAILED | Verification failed (wrong amounts or max attempts exceeded) |
Trigger: SetmicroDeposit: "ALWAYS"or"ON_FAILURE". Verify withPOST .../verifyendpoint.
4. OFAC — Compliance Screening
Screens the account holder name against the OFAC Specially Designated Nationals (SDN) list.
| Status | Meaning |
|---|---|
PENDING | Screening not yet started |
VERIFIED | No sanctions match found |
UNDER_REVIEW | Potential match — manual review required |
REJECTED | Confirmed sanctions match — account blocked |
IGNORED | OFAC screening is disabled for this program |
OFAC screening runs automatically on every new external account. Accounts withUNDER_REVIEWorREJECTEDstatus cannot transact until resolved.
5. Document Verification (Optional)
Validates authorization documents attached to the external account.
| Status | Meaning |
|---|---|
PENDING | Document submitted, review in progress |
VERIFIED | Document accepted |
REJECTED | Document rejected — re-upload required |
Attach documents using thelinkedDocumentfield withpurpose: "AUTHORIZATION".
Final Account Status
The combined results of all validations determine the final account status:
| Final Status | Condition | Can Transact? |
|---|---|---|
| ACTIVE | All enabled validations passed | Yes — full debit & credit |
| ACTIVE (Credit Only) | Partial pass — debit validation failed but credit validations passed | Credit only — debit restricted |
| BLOCKED | Any critical validation failed (OFAC rejected, EWS high-risk) | No — blocked until resolved |
| INACTIVE | Validations still in progress | No — pending completion |
Triggering Validations
At Account Creation
Include validation options in the POST /externalAccount request body:
{
"accountNumber": "742019385624",
"routingNumber": "021000021",
"type": "CHECKING",
"holderName": "Acme Corp",
"holderType": "CORPORATE",
"validateAccount": [{ "ews": true }],
"microDeposit": "ALWAYS",
"prenote": "ON_FAILURE"
}After Account Creation
Use the validate API to trigger additional validations on an existing account:
POST /v1/customer/id/{customerId}/externalAccount/id/{id}/validate
{
"validateAccount": [{ "ews": true }],
"prenote": "NEVER",
"microDeposit": "ALWAYS"
}Best Practices
| Practice | Recommendation |
|---|---|
| Default validation | Use ews: true + microDeposit: "ON_FAILURE" for most accounts |
| Wire-only accounts | Use ews: true + microDeposit: "NEVER" — micro-deposit not needed for wires |
| High-value accounts | Use ews: true + microDeposit: "ALWAYS" + prenote: "ALWAYS" for maximum verification |
| Bulk onboarding | Use microDeposit: "ON_FAILURE" to skip micro-deposit when EWS passes (faster activation) |
Updated 1 day ago