Skip to main content
POST
Use the playground below to try this endpoint directly, or review the OpenAPI details in the right panel.
Verification documents: Stage KYB documents first, then either pass the returned doc_submission_ids on this request or link them afterward. If Brale’s review later requires more documents, subscribe to account.verification.documents_required (see Webhook Events) or poll required documents — stage and link those documents the same way. When verification passes, Brale sends account.verification.completed and the account status becomes complete.

Linking documents at creation

Include optional doc_submission_ids in the request body to link staged document submissions when the account is created. Each ID must come from a prior Stage a Verification Document call (POST /documents). Omit the field to create the account without documents and link them later. doc_submission_ids is not supported for testnet-only clients or self-attested accounts. In those cases, omit the field or link documents after creation if supported for your account type. For the full account creation payload (business details, controller, beneficial owners, TOS attestation), see Accounts. The example below is a US controller and owner; for parties outside the US, see Non-US controllers and beneficial owners. For the individual (KYC) path, see Accounts — Creating an individual account.

Choosing between a business and an individual account

POST /accounts accepts three optional dimension fields — entity_type, account_type, and verification_mode — that select the account shape. Supported combinations are business custodial, business transactional, and individual transactional. Individual custodial is not currently supported. Omitting all three fields preserves today’s business custodial behavior. See Account types for the full matrix and Account availability for the U.S. states where each combination can be created.

Example request with documents (business)

Example response (201)

Linked documents are uploaded asynchronously after the account is created. The account status remains pending while Brale reviews the submission.

Example request (individual)

Create a KYC-verified individual account. The individual object and tos_attestation are required. Business-only fields (business_name, ein, website, business_controller, beneficial_owners) must not be sent on this path.

Example response, individual (201)

The account’s name is derived from the individual’s first and last name. status transitions to complete when KYC succeeds and account.verification.completed fires. See Individual accounts for the end-to-end workflow, including the receive-only constraints on transactional accounts.

Required scope

accounts:write

Authorizations

Authorization
string
header
required

Use the Bearer token returned from the Auth endpoint via OAuth2 client_credentials flow. Include the token in the "Authorization: Bearer " header.

Headers

Idempotency-Key
string
required

A unique string used to prevent duplicate operations. Each POST request must use a new idempotency key. Use a UUIDv4 string. Example: idemp-123e4567-e89b-12d3-a456-426614174000

Body

application/json

Business (KYB) account creation payload. This is the default path when entity_type is omitted, or when it is explicitly set to business. account_type selects between a custodial account (the default) and a non-custodial transactional account.

business_name
string
required
Example:

"My Customer"

ein
string
required
Example:

"123456789"

address
USStreetAddress · object
required
business_controller
ControllingParty · object
required

A business controller or beneficial owner. Identity is supplied one of two ways, and exactly one of them is required: ssn for a US party, which is what every request written before non-US parties were supported already sends, or identity (number and type) otherwise.

ssn is only accepted when the party's country is the US, since an SSN has no meaning elsewhere. A US party may also use identity when the document is something other than an SSN.

email
string
required
phone_number
string
required
Example:

"515-555-1212"

tos_attestation
EndUserTosAttestation · object
required
website
string
required
Example:

"https://example.com"

entity_type
enum<string>

Optional discriminator. When omitted, defaults to business.

Available options:
business
Example:

"business"

account_type
enum<string>

Optional. When omitted, defaults to custodial for business accounts. custodial accounts receive Brale-managed internal wallets and can hold balances. transactional accounts are non-custodial: they receive no internal wallets, hold no balances at Brale, and register external destination-only addresses.

Available options:
custodial,
transactional
Example:

"custodial"

verification_mode
enum<string>

Optional. When omitted, defaults to standard.

Available options:
standard
Example:

"standard"

beneficial_owners
ControllingParty · object[] | null
ultimate_beneficial_owners
ControllingParty · object[]
deprecated

Deprecated alias of beneficial_owners.

name
string
Example:

"My Account"

doc_submission_ids
string<ksuid>[]

Optional pre-staged verification document submission IDs to link on creation.

Pattern: ^[a-zA-Z0-9]{26}$

Response

Account successfully created

id
string<ksuid>
Pattern: ^[a-zA-Z0-9]{26}$
Example:

"2VcUIIsgARwVbEGlIYbhg6fGG57"