Skip to content

Accounts

One row per trading account. Interviews can focus on a single account, and the activity analysis is computed from the trades on these accounts.

Paths are relative to your base URL
Rubi joins the base URL saved under Integrations with the path on this page. Save https://risk.example-firm.com/rubi/v1 with no trailing slash. GET /traders is then requested as https://risk.example-firm.com/rubi/v1/traders.

Shared rules for authentication, pagination, errors and the live check are on the Own tech overview.

GET/accounts

Returns { data, next_cursor }

Every call, including GET /health, sends Authorization: Bearer <api key> and Accept: application/json. The key is the secret you paste in the dashboard. Rubi never sends a body: every endpoint is GET.

QueryRequiredRules
updated_sincenoRFC 3339. Inclusive lower bound on updated_at. Omitted on the first backfill, which must return every account.
cursornoOpaque cursor from the previous page.
limitno1 to 500. Rubi sends 200 during sync and 5 during the live check.
FieldTypeDescription
idstringRequired. Stable account id, unique in your system. Numbers are accepted.
trader_idstringRequired. Must equal a trader id from GET /traders. The check fails when this is missing or null.
updated_attimestampRequired. RFC 3339 UTC.
platformenum | nullmt4, mt5, ctrader, matchtrader, tradelocker, dxtrade, or other.
loginstring | nullPlatform login, shown on the trader profile.
programstring | nullChallenge or account program name, for example 2 Step 100K.
phaseenum | nullevaluation, verification, funded, or other.
statusenum | nullactive, passed, breached, closed, or suspended.
currencystring | nullISO 4217, for example USD.
initial_balancenumber | nullStarting balance of the account.
balancenumber | nullCurrent balance in account currency.
equitynumber | nullCurrent equity, including open profit.
started_attimestamp | nullWhen the account started.
metadataobject | nullStored as-is. Server name, group or add-ons belong here.

Numeric fields may be JSON numbers or numeric strings. A thousands separator comma inside a string is accepted ("101,250.50" becomes 101250.5).

200 response
{
  "data": [
    {
      "id": "acc_99812",
      "trader_id": "cus_18422",
      "platform": "mt5",
      "login": "7001234",
      "program": "2 Step 100K",
      "phase": "evaluation",
      "status": "active",
      "currency": "USD",
      "initial_balance": 100000,
      "balance": 101250.5,
      "equity": 101190.2,
      "started_at": "2026-09-01T00:00:00Z",
      "metadata": { "server": "Live-1" },
      "updated_at": "2026-09-22T21:00:00Z"
    }
  ],
  "next_cursor": null
}

Order by updated_at then id, ascending. An account whose trader is not in GET /traders cannot be attached, so sync traders first in your own data and let Rubi poll both. Rubi requests traders, then accounts, then trades.