Sell a paper prop account from a template
create-prop provisions the account, the prop account and the paper trading
state in one transaction. When this is done a trader has an active evaluation
they can place orders against immediately — no agreement step, no deposit.
-
Pick the template
Section titled “Pick the template”You need two ids from the same row: the template
idand the firm that owns it,propTenantId. Onlyactivetemplates can be sold.Terminal window curl -s "https://api.troncharts.xyz/api/v1/prop-templates?activeOnly=true" \-H "authorization: Bearer $TOKEN" \-H "x-tenant-slug: $TC_TENANT_SLUG"# → { "templates": [ { "id": "acme-25k-two-step", "propTenantId": "…", … } ] }const { templates } = await sdk.propTemplates.list({ activeOnly: true }) -
Identify the owner user
Section titled “Identify the owner user”A bearer credential has no user session, so it must name the user the new account belongs to.
ownerUserIdmust be a user in your tenant — omit it and you get 400owner_user_required; pass a stranger’s id and you get 404owner_user_not_found. -
Create the account
Section titled “Create the account”propTenantIdmust be a UUID (the firm id from step 1).baselineUsdseeds the simulated cash balance and defaults to10000— it is separate from the template’saccountSizeUsd, which is what the rules judge. Pass it explicitly if you want the two to match.Terminal window curl -s https://api.troncharts.xyz/api/v1/accounts/create-prop \-H "authorization: Bearer $TOKEN" \-H "x-tenant-slug: $TC_TENANT_SLUG" \-H 'content-type: application/json' \-d '{"templateId": "acme-25k-two-step","propTenantId": "'"$FIRM_ID"'","mode": "paper","ownerUserId": "'"$USER_ID"'","displayName": "Acme 25K — run 1"}'# → 201 { "mode": "paper", "accountId": "…", "accountNumber": "100042",# "propAccount": { "status": "active", "startedAt": "…", … } }const res = await sdk.accounts.createProp({templateId: 'acme-25k-two-step',propTenantId: firmId,mode: 'paper',ownerUserId,}) as { accountId: string; accountNumber: string }The prop account lands
status: 'active'withstartedAtset. Rejections to expect: 404template_not_found, 400template_inactive, and 400template_mode_unsupportedwhen the template is marked live-only. -
Reset the run when you need a clean slate
Section titled “Reset the run when you need a clean slate”Paper accounts are resettable: balance and positions go back to the account size, breach state clears, and the evaluation window restarts at its original length. Live and funded accounts reject with 400
not_paper.Terminal window curl -s -X POST https://api.troncharts.xyz/api/v1/prop-accounts/$PROP_ACCOUNT_ID/reset \-H "authorization: Bearer $TOKEN" \-H "x-tenant-slug: $TC_TENANT_SLUG"await sdk.propAccounts.reset(propAccountId)
Next: Create a challenge template · Prop account model · Launch a prop firm