curl -X POST https://api.yoshi.ai/apex/accounts \
-H "Authorization: Bearer yoshi_3xK9mP..." \
-H "Content-Type: application/json" \
-d '{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"description": "Long-term investments"
}'
import httpx
response = httpx.post(
"https://api.yoshi.ai/apex/accounts",
headers={"Authorization": "Bearer yoshi_3xK9mP..."},
json={
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"description": "Long-term investments",
},
)
data = response.json()
if data.get("status") == "ready":
print(f"Account created: {data['account']['id']}")
else:
print(f"Pending — poll at: {data['poll_path']}")
const response = await fetch("https://api.yoshi.ai/apex/accounts", {
method: "POST",
headers: {
Authorization: "Bearer yoshi_3xK9mP...",
"Content-Type": "application/json",
},
body: JSON.stringify({
request_id: "550e8400-e29b-41d4-a716-446655440000",
description: "Long-term investments",
}),
});
const data = await response.json();
if (data.status === "ready") {
console.log(`Account created: ${data.account.id}`);
} else {
console.log(`Pending — poll at: ${data.poll_path}`);
}
{
"status": "ready",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"account": {
"id": "acc_brok_abc123",
"name": "Brokerage Account",
"type": "investment",
"subtype": "brokerage",
"status": "active",
"external_id": "ext_apex_456",
"external_source": "apex",
"apex_account_number": "8AA000001",
"as_of": "2026-04-15T12:00:00.000Z",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
},
"staging_account": {
"id": "stg_abc123",
"account_number": "8AA000001",
"apex_person_id": "apx_person_789",
"apex_state": "COMPLETE",
"description": "Long-term investments",
"owner_user_id": "usr_xyz",
"as_of": "2026-04-15T12:00:00.000Z",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
},
"staging_person": {
"id": "stg_person_789",
"owner_user_id": "usr_xyz",
"status": "COMPLETE",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
}
}
{
"code": "apex_account_pending",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"poll_path": "/apex/accounts/by-request/550e8400-e29b-41d4-a716-446655440000"
}
Brokerage
Create brokerage account
Use POST /apex/accounts to open an Apex-backed brokerage account. Covers request body fields, sync and async responses, and error handling.
POST
/
apex
/
accounts
curl -X POST https://api.yoshi.ai/apex/accounts \
-H "Authorization: Bearer yoshi_3xK9mP..." \
-H "Content-Type: application/json" \
-d '{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"description": "Long-term investments"
}'
import httpx
response = httpx.post(
"https://api.yoshi.ai/apex/accounts",
headers={"Authorization": "Bearer yoshi_3xK9mP..."},
json={
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"description": "Long-term investments",
},
)
data = response.json()
if data.get("status") == "ready":
print(f"Account created: {data['account']['id']}")
else:
print(f"Pending — poll at: {data['poll_path']}")
const response = await fetch("https://api.yoshi.ai/apex/accounts", {
method: "POST",
headers: {
Authorization: "Bearer yoshi_3xK9mP...",
"Content-Type": "application/json",
},
body: JSON.stringify({
request_id: "550e8400-e29b-41d4-a716-446655440000",
description: "Long-term investments",
}),
});
const data = await response.json();
if (data.status === "ready") {
console.log(`Account created: ${data.account.id}`);
} else {
console.log(`Pending — poll at: ${data.poll_path}`);
}
{
"status": "ready",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"account": {
"id": "acc_brok_abc123",
"name": "Brokerage Account",
"type": "investment",
"subtype": "brokerage",
"status": "active",
"external_id": "ext_apex_456",
"external_source": "apex",
"apex_account_number": "8AA000001",
"as_of": "2026-04-15T12:00:00.000Z",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
},
"staging_account": {
"id": "stg_abc123",
"account_number": "8AA000001",
"apex_person_id": "apx_person_789",
"apex_state": "COMPLETE",
"description": "Long-term investments",
"owner_user_id": "usr_xyz",
"as_of": "2026-04-15T12:00:00.000Z",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
},
"staging_person": {
"id": "stg_person_789",
"owner_user_id": "usr_xyz",
"status": "COMPLETE",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
}
}
{
"code": "apex_account_pending",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"poll_path": "/apex/accounts/by-request/550e8400-e29b-41d4-a716-446655440000"
}
Request body
string
required
A client-generated UUID that uniquely identifies this account creation request. Use the same value when polling for status.
string | null
An optional label for the brokerage account (for example,
"Long-term investments").Response
This endpoint returns one of two responses depending on whether the account was created synchronously or is being processed asynchronously.200 - Account created
Returned when the brokerage account is created immediately.string
Always
"ready".string
The
request_id you provided in the request.object
The canonical account record.
Show account properties
Show account properties
string
Unique account identifier.
string
Display name of the account.
string
Account type (for example,
"investment").string
Account subtype (for example,
"brokerage").string
Current account status.
string
External identifier from the brokerage provider.
string
Source of the external identifier.
string | null
The Apex brokerage account number.
string
Timestamp of the last data update.
string
When the account was created.
string
When the account was last updated.
object
The staging record for the Apex account.
Show staging_account properties
Show staging_account properties
string
Staging account identifier.
string | null
The Apex account number.
string
Identifier of the associated Apex person.
string
Current Apex account state.
string | null
Account description.
string
The user who owns this account.
string
Timestamp of the last data update.
string
When the staging record was created.
string
When the staging record was last updated.
object
202 - Account creation pending
Returned when account creation cannot complete immediately and is continuing in the background.string
Always
"apex_account_pending".string
The
request_id you provided in the request.string
The path to poll for the account creation status (for example,
"/apex/accounts/by-request/{request_id}").Error responses
| Status | Description |
|---|---|
| 403 | The brokerage account feature is not enabled for your account. |
| 409 | Required identity data is missing or the local account record cannot be resolved. |
| 423 | Identity verification must be completed before creating a brokerage account. |
| 428 | A passkey or recent passkey verification is required. |
| 500 | The brokerage service is not configured or the request failed. |
curl -X POST https://api.yoshi.ai/apex/accounts \
-H "Authorization: Bearer yoshi_3xK9mP..." \
-H "Content-Type: application/json" \
-d '{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"description": "Long-term investments"
}'
import httpx
response = httpx.post(
"https://api.yoshi.ai/apex/accounts",
headers={"Authorization": "Bearer yoshi_3xK9mP..."},
json={
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"description": "Long-term investments",
},
)
data = response.json()
if data.get("status") == "ready":
print(f"Account created: {data['account']['id']}")
else:
print(f"Pending — poll at: {data['poll_path']}")
const response = await fetch("https://api.yoshi.ai/apex/accounts", {
method: "POST",
headers: {
Authorization: "Bearer yoshi_3xK9mP...",
"Content-Type": "application/json",
},
body: JSON.stringify({
request_id: "550e8400-e29b-41d4-a716-446655440000",
description: "Long-term investments",
}),
});
const data = await response.json();
if (data.status === "ready") {
console.log(`Account created: ${data.account.id}`);
} else {
console.log(`Pending — poll at: ${data.poll_path}`);
}
{
"status": "ready",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"account": {
"id": "acc_brok_abc123",
"name": "Brokerage Account",
"type": "investment",
"subtype": "brokerage",
"status": "active",
"external_id": "ext_apex_456",
"external_source": "apex",
"apex_account_number": "8AA000001",
"as_of": "2026-04-15T12:00:00.000Z",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
},
"staging_account": {
"id": "stg_abc123",
"account_number": "8AA000001",
"apex_person_id": "apx_person_789",
"apex_state": "COMPLETE",
"description": "Long-term investments",
"owner_user_id": "usr_xyz",
"as_of": "2026-04-15T12:00:00.000Z",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
},
"staging_person": {
"id": "stg_person_789",
"owner_user_id": "usr_xyz",
"status": "COMPLETE",
"created_at": "2026-04-15T12:00:00.000Z",
"updated_at": "2026-04-15T12:00:00.000Z"
}
}
{
"code": "apex_account_pending",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"poll_path": "/apex/accounts/by-request/550e8400-e29b-41d4-a716-446655440000"
}
Last modified on April 16, 2026
Was this page helpful?