API reference ยท Risk and history
/v1/accounts/{account_id}/riskGet live risk.
Read
Equity, open P&L, margin, exposure per market, the room to each loss limit, the profit target and the nearest liquidation: the figures of your dashboard, computed the same way.
Path parameters#
-
The account number.
Responses#
200OK
-
When the oldest figure here was read.
-
Some figures are older than usual (the engine was busy).
-
The balance.
-
The balance plus the open P&L at the market price.
-
The open P&L.
-
The P&L of the trading day: closed and open.
-
The P&L closed today.
-
The fees paid today.
-
Trades closed today.
-
The margin your positions hold.
-
What is left of the balance for new positions.
-
Show 5 fields
-
The value of every open position.
-
The value of the long ones.
-
The value of the short ones.
-
Gross exposure over equity.
-
Per market, largest first.
Show 5 fields
-
A market id: the asset and USD.
-
The value held on it.
-
That value over equity.
-
The exposure cap of the market.
-
How much of the cap is used, counting your other accounts on the same rule, in percent.
-
-
-
A loss limit and the room left to it.
Show 10 fields
-
limitdecimal stringThe limit, in USD.
-
floordecimal stringThe equity at which it is breached.
-
roomdecimal stringHow much more the account may lose before it.
-
used_pctdecimal string or nullHow much of it is used, in percent.
-
resets_atinteger, Unix msDaily loss only: when it resets (midnight New York).
-
on_breachstringDaily loss only: what happens when it is reached.
One of
fail_accountflattenflatten_and_pause -
estimatedbooleanDaily loss only: the day's start is estimated (the engine does not publish it).
-
modestringMax drawdown only: how the reference moves.
One of
end_of_dayend_of_tradestaticintraday_equity -
at_leastbooleanMax drawdown only: the engine may hold a higher floor than shown (it follows equity highs).
-
The rule no longer applies this limit (its cut-off was reached).
-
-
A loss limit and the room left to it.
Show 10 fields
-
limitdecimal stringThe limit, in USD.
-
floordecimal stringThe equity at which it is breached.
-
roomdecimal stringHow much more the account may lose before it.
-
used_pctdecimal string or nullHow much of it is used, in percent.
-
resets_atinteger, Unix msDaily loss only: when it resets (midnight New York).
-
on_breachstringDaily loss only: what happens when it is reached.
One of
fail_accountflattenflatten_and_pause -
estimatedbooleanDaily loss only: the day's start is estimated (the engine does not publish it).
-
modestringMax drawdown only: how the reference moves.
One of
end_of_dayend_of_tradestaticintraday_equity -
at_leastbooleanMax drawdown only: the engine may hold a higher floor than shown (it follows equity highs).
-
The rule no longer applies this limit (its cut-off was reached).
-
-
Show 4 fields
-
The balance that reaches it.
-
Still to make.
-
How far, in percent.
-
Positions must be closed when it is reached.
-
-
Show 3 fields
-
A market id: the asset and USD.
-
Its liquidation price.
-
How far the price is from it, in percent.
-
-
When the trading day ends (midnight New York).
-
What needs your attention, most serious first.
401The request has no Authorization header.
{
"error": {
"type": "authentication",
"code": "missing_api_key",
"message": "No API key: send it as Authorization: Bearer <key>.",
"request_id": "req_0f9c2a7d8e1b4c6a9f3e5d7b1a2c4e6f",
"retryable": false,
"doc_url": "https://docs.phoenixperpsfunding.com/reference/errors#missing_api_key"
}
}403The key only works from the addresses you listed.
{
"error": {
"type": "permission",
"code": "ip_not_allowed",
"message": "This address is not on the key's allowlist.",
"request_id": "req_0f9c2a7d8e1b4c6a9f3e5d7b1a2c4e6f",
"retryable": false,
"doc_url": "https://docs.phoenixperpsfunding.com/reference/errors#ip_not_allowed"
}
}404The account does not exist in this environment, or the key does not reach it.
{
"error": {
"type": "not_found",
"code": "account_not_found",
"message": "No account with that id is reachable with this key.",
"request_id": "req_0f9c2a7d8e1b4c6a9f3e5d7b1a2c4e6f",
"retryable": false,
"doc_url": "https://docs.phoenixperpsfunding.com/reference/errors#account_not_found"
}
}409The account exists but is not open on the trading engine yet.
{
"error": {
"type": "conflict",
"code": "account_not_ready",
"message": "This account is still being opened.",
"request_id": "req_0f9c2a7d8e1b4c6a9f3e5d7b1a2c4e6f",
"retryable": true,
"doc_url": "https://docs.phoenixperpsfunding.com/reference/errors#account_not_ready"
}
}429A request budget is used up (details.scope says which).
{
"error": {
"type": "rate_limit",
"code": "rate_limited",
"message": "Too many requests: slow down.",
"request_id": "req_0f9c2a7d8e1b4c6a9f3e5d7b1a2c4e6f",
"retryable": true,
"doc_url": "https://docs.phoenixperpsfunding.com/reference/errors#rate_limited"
}
}500An error we did not expect.
{
"error": {
"type": "server",
"code": "internal_error",
"message": "Something went wrong on our side.",
"request_id": "req_0f9c2a7d8e1b4c6a9f3e5d7b1a2c4e6f",
"retryable": true,
"doc_url": "https://docs.phoenixperpsfunding.com/reference/errors#internal_error"
}
}503The trading engine did not give a complete answer in time; nothing partial is returned.
{
"error": {
"type": "engine",
"code": "state_unavailable",
"message": "The account's figures cannot be read right now.",
"request_id": "req_0f9c2a7d8e1b4c6a9f3e5d7b1a2c4e6f",
"retryable": true,
"doc_url": "https://docs.phoenixperpsfunding.com/reference/errors#state_unavailable"
}
}Errors#
Codes this endpoint can return. Match on the code, never on the message.