Bank Accounts
Attach the funding, billing, and settlement accounts a business uses, written in full and returned masked.
A bank account is the account a business uses to receive settled funds, pay fees, or both. A single account can serve more than one purpose. Bank accounts are held on the business, not on a location: every location settles through the business's accounts. For the full field list, jump to the Request reference.
Common use cases
- Attach a funding account where settled funds land.
- Add a separate billing account for fees.
- Retire an old account and add a new one.
PENDING-PUBLISHThe boarding API Reference is pending publication; the
ref:targets on this page are placeholders. Replace each with the real boarding-specoperationIdonce the boarding reference ships.
Scenarios
A bank account is written in full and read back masked. You send the real accountNumber and routingNumber on create; on read, PCE returns only accountNumberLast4 and omits the routing number entirely.
Before you begin (all scenarios)
- You have the
businessIdthe account belongs to. - You know the account's
purpose(funding, billing, or others) andaccountType. - You have the full account and routing numbers to send on create.
Scenario 1: Add a bank account
Attach the account a business settles through. Make a POST request to /v1/businesses/{businessId}/bank-accounts.
curl -X POST https://sandbox-api.prioritycommerce.com/v1/businesses/{businessId}/bank-accounts \
-H "x-api-key: <your-key>" \
-H "Content-Type: application/json" \
-d '{
"purpose": ["billing"],
"accountNumber": "9988776655",
"routingNumber": "111000025",
"accountType": "checking",
"bankName": "Bank of America",
"isPrimary": false,
"externalId": "acme-billing-1"
}'Response: 201 Created
{
"id": "ba_89",
"uri": "/v1/businesses/{businessId}/bank-accounts/ba_89",
"externalId": "acme-billing-1",
"purpose": ["billing"],
"accountNumberLast4": "6655",
"accountType": "checking",
"bankName": "Bank of America",
"isPrimary": false,
"createdAt": "2026-06-15T12:10:00Z"
}accountNumber is written in full and read back masked to accountNumberLast4, so you never get the full number back. routingNumber is not returned on read. accountNumber and routingNumber are not editable: to change them, add a new account and retire the old one (Scenario 2).
Scenario 2: Replace an account
Because the account and routing numbers can't be edited, replacing an account is two steps: add the new one, then retire the old one. Add the replacement first so the business is never without a funding account.
# 1. Add the new account
curl -X POST https://sandbox-api.prioritycommerce.com/v1/businesses/{businessId}/bank-accounts \
-H "x-api-key: <your-key>" \
-H "Content-Type: application/json" \
-d '{ "purpose": ["funding"], "accountNumber": "5566778899", "routingNumber": "021000021", "accountType": "checking", "bankName": "Wells Fargo", "isPrimary": true }'# 2. Retire the old account
curl -X DELETE https://sandbox-api.prioritycommerce.com/v1/businesses/{businessId}/bank-accounts/{bankAccountId} \
-H "x-api-key: <your-key>"Manage bank accounts
- List or read one:
GET /v1/businesses/{businessId}/bank-accounts, orGET /v1/businesses/{businessId}/bank-accounts/{bankAccountId}for one account, in the masked shape above. - Update:
PATCH /v1/businesses/{businessId}/bank-accounts/{bankAccountId}changespurpose,isPrimary,accountType, orbankNameonly. - Remove:
DELETE /v1/businesses/{businessId}/bank-accounts/{bankAccountId}retires the instrument.
Re-read the account to see changes; there is no status webhook.
PENDING-PUBLISHTwo things to confirm before publish: (1) no worked
GETexample for a bank account exists in the source; the masked shape above reuses the create response, which is reasonable given masking is the stated convention but isn't a confirmedGET; (2) whether a retired account stays visible on the business for records and audit.
Request reference
| Field | Required | Description |
|---|---|---|
purpose[] | ✓ | One or more of funding, billing, reserves, chargeback, recovery, sweep. |
accountNumber | ✓ | The account number, written in full and returned masked to accountNumberLast4. |
routingNumber | ✓ | The 9-digit routing number; not returned on read. |
accountType | ✓ | checking or savings. |
bankName | Recommended | The name of the bank. |
isPrimary | Optional | Whether this is the primary account. |
externalId | Recommended | Your own reference for the account. |
Statuses
A bank account is attached to the business and does not run its own underwriting lifecycle; it is validated as part of the business's requirements. If an account is missing or malformed, it surfaces on the service's missingFields or errors. See Status lifecycle and Underwriting exceptions.
Sandbox testing
Use the sandbox to attach and read accounts before going live, and confirm the masked read shape.
| Scenario | Test data | Expected result |
|---|---|---|
| Add an account | Valid accountNumber + 9-digit routingNumber | 201 Created with accountNumberLast4 |
| Masked read | GET the account you created | accountNumberLast4 returned; routingNumber omitted |
| Malformed routing | A routing number that isn't 9 digits | Submit-time validation error |
PENDING-PUBLISHSandbox test routing/account numbers are pending the boarding sandbox guide. Confirm before publish.
Go live
The shared pre-production checklist is in Getting Started. Specific to bank accounts:
- A funding account is attached with
purposeincludingfunding. - Account and routing numbers are correct (they can't be edited after create).
- The primary account is the one you want settlements to land in.
Best practices
| Practice | Description |
|---|---|
| Add before you retire | When replacing an account, add the new one first so the business is never without a funding account. |
Set purpose precisely | A single account can carry several purposes; list only the ones it truly serves. |
Store the ba_ id and externalId | You need them to update, retire, or reconcile the account. |
| Expect a masked read | Persist your own record of the full number; reads return only accountNumberLast4. |
Next steps
See also
- Create a business: add bank accounts inline in the composite create
- Businesses: how bank accounts fit the entity model
- Underwriting exceptions: resolve a rejected bank account
Updated 1 day ago