Upscale
Menu
On this page

Get the events of the trader account

Try it out ↓
GET/accounts/events
Get the events of the trader accountAccounts

Lifecycle events across every account of the caller, newest first: challenge purchases, completions and failures, withdrawal requests and payouts, funded-limit locks and unlocks, demo and tournament accounts being opened or closed.

  • Authenticated with an API key, only accounts that have api_trading enabled are included.
  • Paginated through limit and offset; the response carries the total count.
Base URL https://api.upscale.trade

Authorization

bearerhttp · bearerrequired

Personal API key, prefixed with usk_.

Parameters

Query
limitintegeroptional

Page size: how many records to return.

Default: 20

minimum
1
maximum
100
Example: 20
offsetintegeroptional

How many records to skip before the page.

Default: 0

minimum
0
maximum
9007199254740991
Example: 0

Examples

curl --request GET 'https://api.upscale.trade/accounts/events' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY'

Responses

200Responseapplication/json
dataobject[]required

Requested page of account events, newest first. The payload shape follows eventType.

Array items · object

One of

eventTypestring · enumrequired
Allowed: "account_archive_expired"
Example: account_archive_expired
payloadobjectrequired
Object · 3 fields
archivedAtstringrequired
Example: string
restoreAvailableUntilstringrequired
Example: string
expiredAtstringrequired
Example: string
View example
{
  "archivedAt": "string",
  "restoreAvailableUntil": "string",
  "expiredAt": "string"
}
idstring · uuidrequired

Event identifier.

pattern
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
Example: 00000000-0000-4000-8000-000000000000
accountIdstring · uuidrequired

Trader account the event happened on.

Example: 00000000-0000-4000-8000-000000000000
createdAtstring · date-timerequired

When the event happened.

Example: 2026-05-01T12:30:00.000Z
accountobjectrequired

The account as it stands now — not as it was when the event happened.

Object · 45 fields
accountIdstring · uuidrequired

Trader account identifier.

pattern
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
Example: 00000000-0000-4000-8000-000000000000
userIdstring · uuidrequired

Owner of the account.

pattern
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
Example: 00000000-0000-4000-8000-000000000000
paymentIdstring · uuid · nullablerequired

Payment the challenge behind this account was bought with. Null for accounts that were not purchased.

pattern
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
Example: 00000000-0000-4000-8000-000000000000
challengeIdstring · nullablerequired

Challenge the account runs. Null for demo and tournament accounts.

Example: challenge1
tournamentIdstring · uuid · nullablerequired

Tournament the account was created for. Null outside tournament accounts.

pattern
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
Example: 00000000-0000-4000-8000-000000000000
typestring · enumrequired

Account kind: a paid challenge (real), a demo account, or a tournament entry.

Allowed: "demo" "real" "tournament"
Example: demo
initialPhasestringrequired

Phase the account started in.

Example: active_evaluation
currentPhasestringrequired

Phase the account is in now: active_evaluation, active_verification, funded, or funded_success once it has enough profitable days.

Example: active_evaluation
statusstring · enumrequired

Account status. Trading is possible on active; the trading_locked_* statuses only allow closing, and the rest stop trading entirely.

Allowed: "pending" "active" "archived" "archive_expired" "failed" "frozen" "suspended" "closed" "trading_locked_by_funded_limit" "trading_locked_by_instant_funded_limit" "phase_transition_pending" "transition_review"
Example: active
profitTargetstring · nullablerequired

Profit the settled balance needs to pass the current phase, in percent of the initial balance — not fp9. Null when the phase has no target.

Example: 5
maxDailyDrawdownstring · nullablerequired

Daily drawdown limit of the current phase, in percent of the initial balance — not fp9. The loss is counted from dayStartEquity. Null when the phase has no daily limit.

Example: 5
maxTotalDrawdownstring · nullablerequired

Total drawdown limit of the current phase, in percent of the initial balance — not fp9. Null when the phase has no total limit.

Example: 10
maxTrailingTotalDrawdownstring · nullablerequired

Trailing drawdown limit of the current phase, in percent of the highest equity reached — not fp9. Null when the phase has no trailing limit.

Example: 6
drawdownBasestring · fp9 · nullablerequired

Equity the funded-phase drawdown is measured from, fp9 raw. Null while it is measured from the initial balance.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
maxDrawdownStopstring · fp9 · nullablerequired

Equity level at which the funded-phase drawdown fails the account, fp9 raw. Null while it is derived from the initial balance.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
minTradingDaysnumber · nullablerequired

Profitable days (profitableDays) required before the current phase can be passed. Null when the phase has no minimum.

Example: 3
suspendedUntilstring · date-time · nullablerequired

When a suspension of the account lifts. Null when it is not suspended.

Example: 2023-10-01T00:00:00.000Z
accountBalancestring · fp9required

Balance without the unrealised pnl of open positions, fp9 raw.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
initialAccountBalancestring · fp9required

Balance the account was opened with, fp9 raw — the nominal size of the challenge.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
maxEquitystring · fp9 · nullablerequired

Highest equity the account has reached, fp9 raw. Null before the first trade.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
dayStartEquitystring · fp9 · nullablerequired

Equity the current trading day opened at, fp9 raw.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
profitableDaysnumberrequired

Profitable days counted in the current withdrawal period.

Example: 0
prevPeriodProfitableDaysnumberrequired

Profitable days counted in the previous withdrawal period.

Example: 0
archivedAtstring · date-time · nullablerequired

Start of the account archive period.

Example: 2026-05-01T12:30:00.000Z
archiveRestoreAvailableUntilstring · date-time · nullablerequired

Unarchive deadline, independent of paid Restore.

Example: 2026-05-01T12:30:00.000Z
createdAtstring · date-timerequired

When the account was created.

Example: 2026-05-01T12:30:00.000Z
failureReasonstring · enum · nullablerequired

Rule that failed the account. Null while it has not failed.

Allowed: "archive_expired" "max_total_drawdown" "max_trailing_total_drawdown" "max_daily_drawdown"
Example: archive_expired
fundedAtstring · date-time · nullablerequired

When the account reached the funded phase. Null before that.

Example: 2026-05-01T12:30:00.000Z
failedAtstring · date-time · nullablerequired

When the account failed. Null while it has not.

Example: 2026-05-01T12:30:00.000Z
transitionReviewAtstring · date-time · nullablerequired

When the phase transition was sent for manual review. Null when no review is pending.

Example: 2026-05-01T12:30:00.000Z
currentWithdrawalPeriodStartedAtstring · date-time · nullablerequired

Start of the running withdrawal period. Null while none is running.

Example: 2026-05-01T12:30:00.000Z
fundedLimitUnlockedAtstring · date-time · nullablerequired

When the account last came out of a managed-capital lock; trading days of the period are counted from here. Null when it was never locked.

Example: 2026-05-01T12:30:00.000Z
maxWithdrawalAmountstring · fp9required

Largest amount that may be withdrawn from the account right now, fp9 raw.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
payoutBaselineBalancestring · fp9required

Balance the next payout is measured from, fp9 raw. Equal to the initial balance until the first payout moves it.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
isActiveWithdrawalInPeriodbooleanrequired

Whether a withdrawal request is already in flight for the current period.

Example: true
profitSplitPercentnumberrequired

Share of the profit paid out to the trader, in percent.

Example: 80
debtstring · fp9required

Outstanding promo-discount debt of the account, fp9 raw. Withheld from the next payout; 0 when there is none.

pattern
^(?:-?[1-9][0-9]*|0)$
Example: 1000000000
dailyDrawdownProtectionobject · nullablerequired

Daily drawdown protection of the account. Null when the account does not carry the option.

Object · 1 field
usedAtstring · date-time · nullablerequired

When the protection was consumed. Null while it is still available.

Example: 2026-05-01T12:30:00.000Z
View example
{
  "usedAt": "2026-05-01T12:30:00.000Z"
}
aiFailedReportbooleanrequired

Whether an automated report has been produced for the failure of this account.

Example: true
apiTradingbooleanrequired

Whether the account may be traded with a personal API key. Requests made with a key are refused on accounts where this is false.

Example: true
availableMarketsstring · enumrequired

Market category the account may trade: crypto, rwa, or all.

Allowed: "crypto" "rwa" "all"
Example: crypto
antifraudStatusstring · enumrequired

Antifraud state of the account; anything other than normal marks it for review.

Allowed: "normal" "test_account" "balance_exceeded" "manually_flagged" "manually_cleared"
Example: normal
tradingLockReasonstring · nullablerequired

Why trading is locked: auto for the managed-capital limit hit on promotion, otherwise the reason an administrator gave. Null when the account is not locked.

Example: string
tournamentobject · nullablerequired

Tournament the account belongs to. Null for accounts outside a tournament.

Object · 5 fields
idstring · uuidrequired

Tournament identifier.

pattern
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
Example: 00000000-0000-4000-8000-000000000000
statusstring · enumrequired

Stage the tournament is in.

Allowed: "active" "completed"
Example: active
startDatestring · date-timerequired

When the tournament opens for trading.

Example: 2026-05-01T12:30:00.000Z
endDatestring · date-timerequired

When the tournament closes.

Example: 2026-05-01T12:30:00.000Z
finalRecalcDonebooleanrequired

Whether final standings have been recomputed after the close.

Example: true
View example
{
  "id": "00000000-0000-4000-8000-000000000000",
  "status": "active",
  "startDate": "2026-05-01T12:30:00.000Z",
  "endDate": "2026-05-01T12:30:00.000Z",
  "finalRecalcDone": true
}
restoreobjectrequired

Whether a failed funded account can be brought back, and until when.

Object · 2 fields
restoreAvailablebooleanrequired

Whether the failed funded account can be restored right now.

Example: true
restoreAvailableUntilstring · date-time · nullablerequired

When the restore window closes. Null when there is no window.

Example: 2026-05-01T12:30:00.000Z
View example
{
  "restoreAvailable": true,
  "restoreAvailableUntil": "2026-05-01T12:30:00.000Z"
}
View example
{
  "accountId": "00000000-0000-4000-8000-000000000000",
  "userId": "00000000-0000-4000-8000-000000000000",
  "paymentId": "00000000-0000-4000-8000-000000000000",
  "challengeId": "challenge1",
  "tournamentId": "00000000-0000-4000-8000-000000000000",
  "type": "demo",
  "initialPhase": "active_evaluation",
  "currentPhase": "active_evaluation",
  "status": "active",
  "profitTarget": "5",
  "maxDailyDrawdown": "5",
  "maxTotalDrawdown": "10",
  "maxTrailingTotalDrawdown": "6",
  "drawdownBase": "1000000000",
  "maxDrawdownStop": "1000000000",
  "minTradingDays": 3,
  "suspendedUntil": "2023-10-01T00:00:00.000Z",
  "accountBalance": "1000000000",
  "initialAccountBalance": "1000000000",
  "maxEquity": "1000000000",
  "dayStartEquity": "1000000000",
  "profitableDays": 0,
  "prevPeriodProfitableDays": 0,
  "archivedAt": "2026-05-01T12:30:00.000Z",
  "archiveRestoreAvailableUntil": "2026-05-01T12:30:00.000Z",
  "createdAt": "2026-05-01T12:30:00.000Z",
  "failureReason": "archive_expired",
  "fundedAt": "2026-05-01T12:30:00.000Z",
  "failedAt": "2026-05-01T12:30:00.000Z",
  "transitionReviewAt": "2026-05-01T12:30:00.000Z",
  "currentWithdrawalPeriodStartedAt": "2026-05-01T12:30:00.000Z",
  "fundedLimitUnlockedAt": "2026-05-01T12:30:00.000Z",
  "maxWithdrawalAmount": "1000000000",
  "payoutBaselineBalance": "1000000000",
  "isActiveWithdrawalInPeriod": true,
  "profitSplitPercent": 80,
  "debt": "1000000000",
  "dailyDrawdownProtection": {
    "usedAt": "2026-05-01T12:30:00.000Z"
  },
  "aiFailedReport": true,
  "apiTrading": true,
  "availableMarkets": "crypto",
  "antifraudStatus": "normal",
  "tradingLockReason": "string",
  "tournament": {
    "id": "00000000-0000-4000-8000-000000000000",
    "status": "active",
    "startDate": "2026-05-01T12:30:00.000Z",
    "endDate": "2026-05-01T12:30:00.000Z",
    "finalRecalcDone": true
  },
  "restore": {
    "restoreAvailable": true,
    "restoreAvailableUntil": "2026-05-01T12:30:00.000Z"
  }
}
Example · account_archive_expired
{
  "eventType": "account_archive_expired",
  "payload": {
    "archivedAt": "string",
    "restoreAvailableUntil": "string",
    "expiredAt": "string"
  },
  "id": "00000000-0000-4000-8000-000000000000",
  "accountId": "00000000-0000-4000-8000-000000000000",
  "createdAt": "2026-05-01T12:30:00.000Z",
  "account": {
    "accountId": "00000000-0000-4000-8000-000000000000",
    "userId": "00000000-0000-4000-8000-000000000000",
    "paymentId": "00000000-0000-4000-8000-000000000000",
    "challengeId": "challenge1",
    "tournamentId": "00000000-0000-4000-8000-000000000000",
    "type": "demo",
    "initialPhase": "active_evaluation",
    "currentPhase": "active_evaluation",
    "status": "active",
    "profitTarget": "5",
    "maxDailyDrawdown": "5",
    "maxTotalDrawdown": "10",
    "maxTrailingTotalDrawdown": "6",
    "drawdownBase": "1000000000",
    "maxDrawdownStop": "1000000000",
    "minTradingDays": 3,
    "suspendedUntil": "2023-10-01T00:00:00.000Z",
    "accountBalance": "1000000000",
    "initialAccountBalance": "1000000000",
    "maxEquity": "1000000000",
    "dayStartEquity": "1000000000",
    "profitableDays": 0,
    "prevPeriodProfitableDays": 0,
    "archivedAt": "2026-05-01T12:30:00.000Z",
    "archiveRestoreAvailableUntil": "2026-05-01T12:30:00.000Z",
    "createdAt": "2026-05-01T12:30:00.000Z",
    "failureReason": "archive_expired",
    "fundedAt": "2026-05-01T12:30:00.000Z",
    "failedAt": "2026-05-01T12:30:00.000Z",
    "transitionReviewAt": "2026-05-01T12:30:00.000Z",
    "currentWithdrawalPeriodStartedAt": "2026-05-01T12:30:00.000Z",
    "fundedLimitUnlockedAt": "2026-05-01T12:30:00.000Z",
    "maxWithdrawalAmount": "1000000000",
    "payoutBaselineBalance": "1000000000",
    "isActiveWithdrawalInPeriod": true,
    "profitSplitPercent": 80,
    "debt": "1000000000",
    "dailyDrawdownProtection": {
      "usedAt": "2026-05-01T12:30:00.000Z"
    },
    "aiFailedReport": true,
    "apiTrading": true,
    "availableMarkets": "crypto",
    "antifraudStatus": "normal",
    "tradingLockReason": "string",
    "tournament": {
      "id": "00000000-0000-4000-8000-000000000000",
      "status": "active",
      "startDate": "2026-05-01T12:30:00.000Z",
      "endDate": "2026-05-01T12:30:00.000Z",
      "finalRecalcDone": true
    },
    "restore": {
      "restoreAvailable": true,
      "restoreAvailableUntil": "2026-05-01T12:30:00.000Z"
    }
  }
}
View example
[
  {
    "eventType": "account_archive_expired",
    "payload": {
      "archivedAt": "string",
      "restoreAvailableUntil": "string",
      "expiredAt": "string"
    },
    "id": "00000000-0000-4000-8000-000000000000",
    "accountId": "00000000-0000-4000-8000-000000000000",
    "createdAt": "2026-05-01T12:30:00.000Z",
    "account": {
      "accountId": "00000000-0000-4000-8000-000000000000",
      "userId": "00000000-0000-4000-8000-000000000000",
      "paymentId": "00000000-0000-4000-8000-000000000000",
      "challengeId": "challenge1",
      "tournamentId": "00000000-0000-4000-8000-000000000000",
      "type": "demo",
      "initialPhase": "active_evaluation",
      "currentPhase": "active_evaluation",
      "status": "active",
      "profitTarget": "5",
      "maxDailyDrawdown": "5",
      "maxTotalDrawdown": "10",
      "maxTrailingTotalDrawdown": "6",
      "drawdownBase": "1000000000",
      "maxDrawdownStop": "1000000000",
      "minTradingDays": 3,
      "suspendedUntil": "2023-10-01T00:00:00.000Z",
      "accountBalance": "1000000000",
      "initialAccountBalance": "1000000000",
      "maxEquity": "1000000000",
      "dayStartEquity": "1000000000",
      "profitableDays": 0,
      "prevPeriodProfitableDays": 0,
      "archivedAt": "2026-05-01T12:30:00.000Z",
      "archiveRestoreAvailableUntil": "2026-05-01T12:30:00.000Z",
      "createdAt": "2026-05-01T12:30:00.000Z",
      "failureReason": "archive_expired",
      "fundedAt": "2026-05-01T12:30:00.000Z",
      "failedAt": "2026-05-01T12:30:00.000Z",
      "transitionReviewAt": "2026-05-01T12:30:00.000Z",
      "currentWithdrawalPeriodStartedAt": "2026-05-01T12:30:00.000Z",
      "fundedLimitUnlockedAt": "2026-05-01T12:30:00.000Z",
      "maxWithdrawalAmount": "1000000000",
      "payoutBaselineBalance": "1000000000",
      "isActiveWithdrawalInPeriod": true,
      "profitSplitPercent": 80,
      "debt": "1000000000",
      "dailyDrawdownProtection": {
        "usedAt": "2026-05-01T12:30:00.000Z"
      },
      "aiFailedReport": true,
      "apiTrading": true,
      "availableMarkets": "crypto",
      "antifraudStatus": "normal",
      "tradingLockReason": "string",
      "tournament": {
        "id": "00000000-0000-4000-8000-000000000000",
        "status": "active",
        "startDate": "2026-05-01T12:30:00.000Z",
        "endDate": "2026-05-01T12:30:00.000Z",
        "finalRecalcDone": true
      },
      "restore": {
        "restoreAvailable": true,
        "restoreAvailableUntil": "2026-05-01T12:30:00.000Z"
      }
    }
  }
]
totalCountnumberrequired

Total number of events across all pages.

Example: 0
401

Unauthorized

429

Rate limit of the API key exceeded (api_key_rate_limit_exceeded). Retry-After says when to come back; the body carries the bucket (read / write), the window that tripped, its limit and retryAt.