Skip to main content
POST
Create a trading account

Authorizations

Authorization
string
header
required

JWT Bearer token for user session auth. Format: "Bearer {token}". Used by User and Organization endpoints.

Body

application/json
type
enum<string>
required

Account type

Available options:
evaluation,
sim_funded,
competition
Example:

"evaluation"

tradingPlanId
string
required

ID of the trading plan (get from /trading-plans)

Example:

"550e8400-e29b-41d4-a716-446655440000"

tradingRuleId
string

Override default rules (optional)

Example:

"660e8400-e29b-41d4-a716-446655440000"

traderId
string

Hyperprop user ID to link this account to. Provide EITHER traderId OR email (exactly one). Email and name are auto-resolved from the user profile.

Example:

"f994bc02-343c-4026-8a57-afc085eca8d5"

email
string

Email of an EXISTING Hyperprop user. Resolved to their user ID server-side. Provide EITHER traderId OR email (exactly one). The trader must already have a Hyperprop account.

Example:

"john@example.com"

unassigned
enum<boolean>

Create the account with NO trader attached. The response (and the account.created webhook) contains a one-time importKey — hand it to your customer, and they redeem it inside the Hyperprop app under Trading Accounts → Import. Billing and market-data entitlement start at redemption, not at creation. Mutually exclusive with traderId/email.

Available options:
true
Example:

true

markets
enum<string>[]

Markets this account may trade. Omit for a futures account: the default is the full CME Group bundle. CME Group data is one inseparable licence, so naming any of CME/CBOT/NYMEX/COMEX grants all four and is billed once at the bundle rate. BINANCE (BTCUSDT perpetual) is licensed separately, is free public data, and is selected on its own — send ["BINANCE"] for a crypto-only account or include it alongside a CME market for both. A crypto-only account is not billed for CME market data.

Minimum array length: 1
Available options:
CME,
CBOT,
NYMEX,
COMEX,
BINANCE
Example:
accountNumber
string

Custom account number (auto-generated if omitted)

Example:

"APEX-100K-7845"

initialBalance
number

Starting balance (defaults to plan's account size)

Example:

100000

customerId
string

REQUIRED. Your customer's ID in YOUR system. Queryable via GET /trading-accounts?customerId=..., included in every account payload and webhook (data.customerId), and the soulbound-identity key: all accounts you create for the same customerId must end up on the same Hyperprop login (see notes). Use a stable per-customer ID, not a per-order ID.

Maximum string length: 255
Example:

"mffu-cust-4471"

externalRef
string

DEPRECATED alias for customerId — accepted for backward compatibility only. Send customerId instead.

Maximum string length: 255
Example:

"mffu-cust-4471"

traderExternalId
string

Your own reference for this trader. Stored on the trader record, queryable via GET /traders?externalUserId=..., and returned as trader.externalUserId in account payloads and webhooks.

Maximum string length: 255
Example:

"mffu-user-4471"

metadata
object

Custom metadata - store any data you need (JSON)

Example:
purchase
object

Purchase/payment details

Response

Success - Trading account created

success
boolean
Example:

true

message
string
Example:

"Trading account created successfully"

data
object
Example: