Traders and accounts

.md

Who joined and bought over a period, how far accounts get and where they fail, and every account by status now.

Scopesadmin:read
Permissionview_traders|view_accounts
GET/v1/admin/dashboard/traders

New traders and how many of them bought, pass rates per phase, funded accounts gained and lost, why accounts failed, and every account by status right now. The Traders panel of the dashboard on the website.

It has two halves, each behind its own permission, as on the website: registrations needs view_traders, and phases, breaches and statuses need view_accounts. Either one opens the endpoint, and the half this person may not see is null. Accounts of our own staff never count.

Needs a firm. Our own staff name one with the Propper-Workspace header.

Request

ParameterDescription
periodtoday, 7d, 30d, 90d or 12m. Left out means 30d
curl "https://api.proppertrading.com/v1/admin/dashboard/traders?period=7d" \
  -H "Authorization: Bearer ptat_9f2c1a44_3b8e7d2f5c9a1b4e6d8f0a2c4e6b8d1f" \
  -H "Propper-Workspace: acme"

Response

{
    "data": {
        "object": "dashboard_traders",
        "period": {
            "range": "7d",
            "from": "2026-10-09T00:00:00+00:00",
            "to": "2026-10-15T19:05:32+00:00",
            "previous_from": "2026-10-02T00:00:00+00:00",
            "previous_to": "2026-10-08T19:05:32+00:00",
            "granularity": "day",
            "timezone": "UTC"
        },
        "buckets": ["2026-10-09", "2026-10-10", "2026-10-11", "2026-10-12", "2026-10-13", "2026-10-14", "2026-10-15"],
        "registrations": {
            "current": 1,
            "previous": 92,
            "series": [0, 0, 0, 0, 0, 1, 0],
            "previous_series": [8, 18, 16, 16, 5, 16, 13],
            "conversion": {
                "registered": 1,
                "purchased": 0,
                "rate": 0,
                "previous_rate": 0.3587
            }
        },
        "phases": {
            "evaluation": [
                {
                    "phase": 1,
                    "passed": 0,
                    "failed": 2,
                    "previous_passed": 4,
                    "previous_failed": 18,
                    "rate": 0,
                    "previous_rate": 0.1818
                }
            ],
            "funded": {
                "active": 258,
                "new": 0,
                "previous_new": 22,
                "series": [0, 0, 0, 0, 0, 0, 0],
                "lost": 0,
                "previous_lost": 8
            }
        },
        "breaches": {
            "current": 2,
            "previous": 26,
            "reasons": [
                { "key": "time_limit", "count": 2 },
                { "key": "daily_loss", "count": 0 },
                { "key": "max_drawdown", "count": 0 },
                { "key": "other", "count": 0 }
            ]
        },
        "statuses": {
            "active": 72,
            "passed": 149,
            "failed": 80,
            "funded": 258,
            "suspended": 0,
            "breached": 725
        }
    },
    "meta": {
        "request_id": "req_01m50f94fs4xaxvde1v5e80hyg"
    }
}
FieldDescription
bucketsThe points of the series
registrations.current, previousNew traders in the period and in the one before
registrations.conversionOf those who registered in the period, how many bought a challenge since, and the rate as a fraction. Null rate when nobody registered. A free account is not a purchase
phases.evaluationPer evaluation phase, the accounts that passed and failed in the period, and the pass rate as a fraction. An account still running is not in it
phases.funded.activeFunded accounts now
phases.funded.newAccounts that started on a funded phase in the period, by passing or bought as instant funding
phases.funded.lostFunded accounts that failed in the period
breaches.reasonsAccounts that failed in the period by reason, most first: daily_loss, max_drawdown, time_limit or other
statusesEvery account by status now

The period

period is today, 7d, 30d (the default), 90d or 12m. Each runs up to this moment, in the firm's timezone, and is compared with the stretch of the same length right before it, so today is set against yesterday up to the same hour. The points of a series are an hour for today, a week for 12m, and a day otherwise: buckets names them, oldest first, and every series has one value per bucket.

FieldDescription
period.rangeThe period asked for
period.from, toThe period, local to the firm. to is now
period.previous_from, previous_toThe stretch it is compared with
period.granularityhour, day or week: how wide one bucket is
period.timezoneThe firm's timezone, which the buckets are in

Errors

StatusCodeMeaning
400workspace_requiredAsked by our own staff without naming a firm
400invalid_periodperiod is not one of the five
401invalid_tokenNot a token, or the secret does not match
401revoked_tokenSigned out here or from another device
401expired_tokenNinety days without use, or a set expiry passed
403admin_access_requiredThis account no longer helps run the environment
403insufficient_scopeThis device does not hold admin:read
403workspace_not_permittedThe Propper-Workspace header names an environment this account cannot act in
403forbiddenWith neither view_traders nor view_accounts