Time Price Opportunity (Market Profile) data. Shows how price distributes over time blocks within a session. Includes structural features like Point of Control, Value Area, Initial Balance Range, poor highs/lows, and single prints.
TPO is a Kiyotaka exclusive -- no other crypto data API offers Market Profile data.
Required parameters
TPO requests must include:
exchange(at least one)fromandperiod(the time range)- One of:
coin,rawSymbol, ornormalizedSymbol tpoSession-- the session type to roll up TPO blocks into.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
tpoSession | TPOSession | Yes | Session type. See TPO sessions. |
tpoBlockSizeMinutes | int32 | No | Size of each time block: 5, 30, 60, or 240 minutes. Default: 30. |
TPO sessions
| Value | Description |
|---|---|
TPO_SESSION_DAILY | Daily session profile. from must be aligned to 00:00:00 UTC. |
TPO_SESSION_WEEKLY | Weekly session profile. from must align to a session boundary. |
TPO_SESSION_MONTHLY | Monthly session profile. from must align to a session boundary. |
Response fields
| Field | Type | Description |
|---|---|---|
timestamp | Timestamp | Session start |
period_start | Timestamp | Profile period start |
period_end | Timestamp | Profile period end |
levels | TPOLevel[] | Array of price levels (see below) |
TPO responses currently use snake_case JSON field names. Additional derived fields such as block_size_minutes, poc_price, vah_price, val_price, profile_high, profile_low, opening_price, closing_price, ibr_high, ibr_low, total_tpo_count, value_area_percentage, poor_highs, poor_lows, total_volume, and single_prints may be omitted when the backend does not populate them.
Unlike most REST types, TPO currently returns its payload under Point.TpoAggregation instead of inlining fields directly under Point.
TPOLevel fields
Each entry in the levels array contains:
| Field | Type | Description |
|---|---|---|
price | double | Price level |
block_ids | int32[] | Time block indices where this price was visited |
buy_volume | double | Buy volume at this price |
sell_volume | double | Sell volume at this price |
Current /v1/points responses may omit derived levels fields such as tpo_count, volume, first_touch_block, and last_touch_block when they are not populated.
Capabilities
| Feature | Supported | Details |
|---|---|---|
| USD denomination | Yes | transform.normalize.quote=USD |
| Multi-exchange aggregation | Yes | transform.groupBy.type=GROUP_BY_TYPE_SUM with coin param |
| Session types | Yes | Daily, weekly, monthly profiles |
| Configurable block size | Yes | 5, 30, 60, or 240 minute blocks |
Examples
Daily profile with 30-minute blocks
Fetches 1 day of daily Market Profile for BTCUSDT on Binance Futures. Each session is divided into 30-minute time blocks (the default). Returns POC, Value Area, Initial Balance Range, and per-price-level TPO counts.
curl "https://api.kiyotaka.ai/v1/points ?type=TPO_AGG &exchange=BINANCE_FUTURES &rawSymbol=BTCUSDT &interval=DAY &from=1774800000 &period=86400 &tpoSession=TPO_SESSION_DAILY &tpoBlockSizeMinutes=30" \\ -H "X-Kiyotaka-Key: YOUR_API_KEY"
Weekly profile
Fetches 1 week of weekly Market Profile with 60-minute time blocks. Useful for identifying higher-timeframe value areas and structural features.
curl "https://api.kiyotaka.ai/v1/points ?type=TPO_AGG &exchange=BINANCE_FUTURES &rawSymbol=BTCUSDT &interval=WEEK &from=1774800000 &period=604800 &tpoSession=TPO_SESSION_WEEKLY &tpoBlockSizeMinutes=60" \\ -H "X-Kiyotaka-Key: YOUR_API_KEY"
High-resolution (5-minute blocks)
Same daily profile but with 5-minute time blocks instead of 30. Produces more granular TPO data with more time blocks per session -- useful for intraday analysis.
curl "https://api.kiyotaka.ai/v1/points ?type=TPO_AGG &exchange=BINANCE_FUTURES &rawSymbol=BTCUSDT &interval=DAY &from=1774800000 &period=86400 &tpoSession=TPO_SESSION_DAILY &tpoBlockSizeMinutes=5" \\ -H "X-Kiyotaka-Key: YOUR_API_KEY"
Response
{
"series": [
{
"id": {
"type": "TPO_AGG",
"exchange": "BINANCE_FUTURES",
"rawSymbol": "BTCUSDT",
"normalizedSymbol": "BTC-USDT",
"category": "PERPETUAL",
"interval": "FIFTEEN_MINUTES",
"coin": "BTC"
},
"points": [
{
"Point": {
"TpoAggregation": {
"timestamp": { "s": 1774828800 },
"period_start": { "s": 1774828800 },
"period_end": { "s": 1774886400 },
"levels": [
{
"price": 65754,
"block_ids": [0],
"buy_volume": 10.413000000000006,
"sell_volume": 10.654999999999998
}
]
}
}
}
]
}
]
}