Get an account's order event timeline
Every step of every order on one account, newest first: the order being submitted, accepted, modified, cancelled, filled or rejected, with the time each step happened. Use it to see what a trader did and when — for example, to check whether they tried to close a position or cancel an order before a fill.
Each event carries:
- action — a readable summary, e.g.
Close position requested by trader,Order modified,Cancelled by trader,Position closed by trader,Rejected: Order would exceed max contracts limit. - initiatedBy — who started the order:
trader,automatic(risk rules, brackets, market close),admin(your firm’s staff),copy_trading, ornullwhen it cannot be determined. - orderId — the same ID as
id/orderIdinGET /organization/trading-accounts/{accountId}/orders; pass it asorderIdhere to see one order’s full lifecycle. - reason / rejectReason — the recorded text.
reasondescribes the order as a whole, so it repeats on every event of that order. - occurredAt — when this step happened (UTC).
Page with pagination.nextCursor. A cancel or modify request from the trader appears as its own event, followed by the outcome (cancelled, accepted after a modify, or rejected).
curl -X GET "https://api.hyperprop.com/platform/v1/organization/trading-accounts/7c9e6679-7425-40de-944b-e07fc1f90ae7/order-events?from=2026-10-07T00:00:00Z&eventType=submit_requested,cancelled,fill_final" \
-H "X-API-Key: hp_live_your_key_here"
curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"events": [
{
"id": "b1e4f0a2-5c3d-4e8f-9a7b-1d2c3e4f5a6b",
"orderId": "3f2b8c1e-9d4a-4e7b-8a61-0c5d2e9f7a10",
"eventType": "submit_requested",
"action": "Close position requested by trader",
"initiatedBy": "trader",
"status": "pending_submit",
"contract": "ESZ6",
"product": "CME",
"symbol": "ES",
"side": "sell",
"orderType": "market",
"quantity": 2,
"filledQuantity": 0,
"limitPrice": null,
"stopPrice": null,
"filledPrice": null,
"lastFillPrice": null,
"lastFillQuantity": null,
"reason": "User closed position ESZ6",
"rejectReason": null,
"occurredAt": "2026-10-07T14:32:10.512345+00:00",
"revertedAt": null
}
],
"pagination": {
"limit": 100,
"hasMore": true,
"nextCursor": "eyJlbmdpbmVfdXBkYXRlZF9hdCI6IjIwMjYtMTAtMDdUMTQ6MzI6MTAuNTEyMzQ1KzAwOjAwIiwiaWQiOiJhYmMifQ"
}
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "Invalid cursor",
"code": "INVALID_CURSOR"
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "This account does not belong to your organization",
"code": "ACCOUNT_NOT_IN_ORG"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Trading account not found",
"code": "ACCOUNT_NOT_FOUND"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}Authorizations
Organization API key. Format: "hp_live_{key}". Organization admins manage the key in the dashboard.
Path Parameters
The account whose order events to retrieve
Query Parameters
Only events at or after this time (ISO 8601)
Only events at or before this time (ISO 8601)
Comma-separated event types to include. One or more of: planned, submit_requested, validated, accepted, replace_requested, cancel_requested, fill_partial, fill_final, cancelled, rejected, expired, bracket_auto_resized. Default: all
^(planned|submit_requested|validated|accepted|replace_requested|cancel_requested|fill_partial|fill_final|cancelled|rejected|expired|bracket_auto_resized)(,(planned|submit_requested|validated|accepted|replace_requested|cancel_requested|fill_partial|fill_final|cancelled|rejected|expired|bracket_auto_resized))*$Only events of this order (the orderId from this endpoint or id / orderId from the orders endpoint)
Include events voided by a Time Machine revert (they carry revertedAt)
Pass pagination.nextCursor from the previous response to get the next (older) page
1 <= x <= 500curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/order-events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"events": [
{
"id": "b1e4f0a2-5c3d-4e8f-9a7b-1d2c3e4f5a6b",
"orderId": "3f2b8c1e-9d4a-4e7b-8a61-0c5d2e9f7a10",
"eventType": "submit_requested",
"action": "Close position requested by trader",
"initiatedBy": "trader",
"status": "pending_submit",
"contract": "ESZ6",
"product": "CME",
"symbol": "ES",
"side": "sell",
"orderType": "market",
"quantity": 2,
"filledQuantity": 0,
"limitPrice": null,
"stopPrice": null,
"filledPrice": null,
"lastFillPrice": null,
"lastFillQuantity": null,
"reason": "User closed position ESZ6",
"rejectReason": null,
"occurredAt": "2026-10-07T14:32:10.512345+00:00",
"revertedAt": null
}
],
"pagination": {
"limit": 100,
"hasMore": true,
"nextCursor": "eyJlbmdpbmVfdXBkYXRlZF9hdCI6IjIwMjYtMTAtMDdUMTQ6MzI6MTAuNTEyMzQ1KzAwOjAwIiwiaWQiOiJhYmMifQ"
}
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "Invalid cursor",
"code": "INVALID_CURSOR"
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "This account does not belong to your organization",
"code": "ACCOUNT_NOT_IN_ORG"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Trading account not found",
"code": "ACCOUNT_NOT_FOUND"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}