Positions on an account
What we last saw, with observedAt saying when. The broker is authoritative and this is a snapshot, not a ledger — observedAt is here so you can tell a current view from a stale one rather than having to assume.
Open positions only, unless includeClosed=true.
Authorization
apiKey Authorization: Bearer fx_live_<id>_<secret>.
A key is shown once, at creation. We cannot show it again or recover it for you.
Keys carry an environment (live or test) in the key itself, so a test key pasted into a
production config fails immediately instead of at the worst possible moment.
Scopes are per key. A key without accounts:write can read accounts and nothing else.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/accounts/497f6eca-6276-4993-bfeb-53cbbbba6f08/positions"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "accountId": "3d07c219-0a88-45be-9cfc-91e9d095a1e9", "brokerPositionId": "string", "symbol": "string", "side": "buy", "volume": null, "openPrice": null, "currentPrice": null, "stopLoss": null, "takeProfit": null, "swap": null, "profit": null, "openedAt": null, "observedAt": "2019-08-24T14:15:22Z", "closedAt": null } ]}Place a market order POST
Sends a market order and waits for the broker's answer. **Send an `Idempotency-Key` header.** Without one, a request that times out leaves you unable to retry safely: you cannot tell whether the order was placed, and guessing wrong opens a second position. With one, retrying is free — the same key returns the same answer and never places a second order. Three failures are worth telling apart, and the response distinguishes them: - **`SEND_FAILED` (502)** — the order never reached the broker. `retryable: true`. Safe to resend. - **`ORDER_REJECTED` (422)** — the broker refused it, with a reason and its own return code. `retryable` says whether the reason was transient (a requote, a moved price) or permanent (insufficient margin, a closed market). - **`ORDER_UNRESOLVED` (502)** — we do not know. The order may be live at the broker. It is in `unknown` while we confirm the result with the broker. **Do not resend it**; poll the order instead.
An account's full deal history GET
Everything the broker recorded against this account, **including deals no order of yours caused** — a stop loss firing, a swap charge, a deposit, or somebody trading the same login from the MetaTrader desktop. That inclusion is the point. A history containing only your own orders would show an account whose balance moves for no visible reason. Ordered by the broker's timestamp, not ours.