Skip to main content
POST
Request a virtual account for a user
Starts banking onboarding for one of your users so Capa can provision a named virtual account — a US bank account (account number + ABA routing number) issued in the user’s own name. See the Virtual Accounts guide for the full flow. Currently available for the United States (US) only. Any other country value is rejected with 400.
Onboarding is asynchronous. A SUBMITTED response only means the request was accepted — the account is not usable yet. Poll Get Virtual Account Status until it reports COMPLETED, then read the account from List Bank Accounts.

Response Statuses

A 201 does not always mean a new onboarding was started. Always branch on data.status: The endpoint is safe to call repeatedly: when an onboarding is already in flight or already complete, it returns the existing record instead of starting a second one.

Missing Requirements

status: "REQUIREMENTS_MISSING" means the user’s KYB is not complete. Nothing was submitted. The response carries:
  • kybLink — a hosted link where the user can finish their KYB. It may be absent if a link could not be minted; in that case, direct the user through your usual KYB flow.
  • missingRequirements — what is still outstanding, each entry with a field path and a human-readable message. Useful for surfacing a reason in your UI, but you do not need to collect these fields yourself — completing KYB satisfies them.
Once KYB is complete, call this endpoint again.

Error Codes

Common Errors

User Ownership Errors

Endpoint-Specific Errors

Authorizations

partner-api-key
string
header
required

API key for the affiliated partner performing the request.

Path Parameters

userId
string
required

The ID of the user to onboard. Must belong to the authenticated partner.

Example:

"8374f327-38bd-4b0b-b8a7-2524599eb903"

Body

application/json
country
enum<string>
required

The country whose banking provider should issue the virtual account. Only US is currently supported.

Available options:
US
Example:

"US"

Response

Onboarding request processed. Inspect status to know what actually happened — a 201 does not always mean a new onboarding was started.

success
boolean
Example:

true

data
object