POST Historical Bars
Request historical OHLCV bar data for any instrument available in NinjaTrader. This is an async operation that requests data from NT8's historical data infrastructure, so the response may take a moment depending on the date range and bar type.
Pull historical OHLCV bars
POST /v1/api/market/bars
Headers
| Name | Value |
|---|---|
| Content-Type | application/json |
| Authorization | Bearer <token> |
Body Parameters
This is a POST request, parameters are sent as a JSON body.
| Name | Type | Required | Description |
|---|---|---|---|
instrument | string | Required | Instrument name (e.g., "ES 09-26") |
periodType | string | Optional | Bar type. Default: "minute". Options: minute, day, week, month, year |
period | integer | Optional | Bar period value. Default: 1. Example: 5 for 5-minute bars |
daysBack | integer | Optional | Number of days of history. Default: 1. Ignored if from is provided |
from | string | Optional | Start date in UTC (e.g., "2026-03-17T00:00:00Z") |
to | string | Optional | End date in UTC. Default: now |
limit | integer | Optional | Maximum number of bars to return (taken from the most recent). Default: 5000. |
Code Examples
- Python
import requests
token = 'my-secret-token'
url = "https://app.crosstrade.io/v1/api/market/bars"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
data = {
"instrument": "ES 09-26",
"periodType": "minute",
"period": 5,
"daysBack": 1,
"limit": 3
}
try:
response = requests.post(url, headers=headers, json=data)
print(f"Response Code: {response.status_code}, Response Text: {response.text}")
except Exception as e:
print(f"An error occurred: {e}")
Response
- 200
- 400
{
"instrument": "ES 09-26",
"periodType": "minute",
"period": 5,
"count": 3,
"bars": [
{
"time": "2026-03-18T20:00:00.0000000Z",
"epoch": 1773864000000,
"open": 6731.75,
"high": 6731.75,
"low": 6731.75,
"close": 6731.75,
"volume": 1
},
{
"time": "2026-03-18T20:15:00.0000000Z",
"epoch": 1773864900000,
"open": 6719.0,
"high": 6719.0,
"low": 6719.0,
"close": 6719.0,
"volume": 1
},
{
"time": "2026-03-18T20:20:00.0000000Z",
"epoch": 1773865200000,
"open": 6713.5,
"high": 6713.5,
"low": 6713.5,
"close": 6713.5,
"volume": 1
}
],
"success": true
}
{
"error": "'instrument' is required"
}
The request has a 10-second timeout. If NinjaTrader's data infrastructure takes longer than that to load the requested bars (which can happen with very large date ranges or exotic bar types), the response will return a timeout error. In that case, try reducing the date range or bar count.
WebSocket API
This request can also be made over the WebSocket API. All parameters are passed inside args.
{
"action": "rpc",
"id": "my-request-id",
"api": "GetBars",
"args": {
"instrument": "ES 09-26",
"periodType": "minute",
"period": 5,
"daysBack": 1,
"limit": 100
}
}
With an explicit date range:
{
"action": "rpc",
"id": "my-request-id",
"api": "GetBars",
"args": {
"instrument": "ES 09-26",
"periodType": "day",
"period": 1,
"from": "2026-03-01T00:00:00Z",
"to": "2026-03-18T00:00:00Z"
}
}