---
title: Volume Profile
description: Volume distributed across price levels via the Kiyotaka Data API.
---

# Volume Profile

<EndpointBar method="GET" path="/v1/points"></EndpointBar>

<TypeHeader type="VOLUME_PROFILE_AGG" meta="Weight: 2x | Max points: 20,000"></TypeHeader>

Volume distributed across price levels for a given interval. Shows where the most trading activity occurred.
The server determines the price bucket size automatically from market metadata. You do not need to pass `blockSize` in the request.

## Response fields

| Field | Type | Description |
| --- | --- | --- |
| `profile` | double[] | Alternating `[price, buyVolume, sellVolume]` triplets |
| `timestamp` | Timestamp | Interval start |

The `profile` array contains repeating price / buy volume / sell volume triplets:
`[price1, buyVolume1, sellVolume1, price2, buyVolume2, sellVolume2, ...]`
Each triplet already includes the bucket's price level, so you can read the profile directly from the response without sending `blockSize`.

## Capabilities

| Feature | Supported | Details |
| --- | --- | --- |
| USD denomination | Yes | `transform.normalize.quote=USD` converts volume to USD |
| Multi-exchange aggregation | Yes | `transform.groupBy.type=GROUP_BY_TYPE_SUM` with `coin` param |

## Examples

### Single exchange

Fetches 1 hour of volume profile data for BTCUSDT on Binance Futures. The server chooses the price bucket size automatically.

<CodeTabs>

<CodePanel lang="curl">
<pre><span class="s-f">curl</span> <span class="s-s">"https://api.kiyotaka.ai/v1/points</span>
    <span class="s-p">?type</span>=<span class="s-s">VOLUME_PROFILE_AGG</span>
    <span class="s-p">&exchange</span>=<span class="s-s">BINANCE_FUTURES</span>
    <span class="s-p">&rawSymbol</span>=<span class="s-s">BTCUSDT</span>
    <span class="s-p">&interval</span>=<span class="s-s">HOUR</span>
    <span class="s-p">&from</span>=<span class="s-n">1774800000</span>
    <span class="s-p">&period</span>=<span class="s-n">3600</span><span class="s-s">"</span> \\
  <span class="s-k">-H</span> <span class="s-s">"X-Kiyotaka-Key: YOUR_API_KEY"</span></pre>
</CodePanel>

<CodePanel lang="python">
<pre><span class="s-k">import</span> <span class="s-v">requests</span>
&#10;
<span class="s-v">response</span> = requests.<span class="s-f">get</span>(
    <span class="s-s">"https://api.kiyotaka.ai/v1/points?type=VOLUME_PROFILE_AGG&exchange=BINANCE_FUTURES&rawSymbol=BTCUSDT&interval=HOUR&from=1774800000&period=3600 "</span>,
    headers={<span class="s-s">"X-Kiyotaka-Key"</span>: <span class="s-s">"YOUR_API_KEY"</span>}
)
<span class="s-v">data</span> = response.<span class="s-f">json</span>()</pre>
</CodePanel>

<CodePanel lang="javascript">
<pre><span class="s-k">const</span> <span class="s-v">response</span> = <span class="s-k">await</span> <span class="s-f">fetch</span>(
  <span class="s-s">"https://api.kiyotaka.ai/v1/points?type=VOLUME_PROFILE_AGG&exchange=BINANCE_FUTURES&rawSymbol=BTCUSDT&interval=HOUR&from=1774800000&period=3600 "</span>,
  { headers: { <span class="s-s">"X-Kiyotaka-Key"</span>: <span class="s-s">"YOUR_API_KEY"</span> } }
)
<span class="s-k">const</span> <span class="s-v">data</span> = <span class="s-k">await</span> response.<span class="s-f">json</span>()</pre>
</CodePanel>

</CodeTabs>

### Aggregated across exchanges (USD)

Combines volume profile data from Binance Futures and Bybit for BTC, with volume converted to USD. Gives a cross-exchange view of where trading activity concentrated.

<CodeTabs>

<CodePanel lang="curl">
<pre><span class="s-f">curl</span> <span class="s-s">"https://api.kiyotaka.ai/v1/points</span>
    <span class="s-p">?type</span>=<span class="s-s">VOLUME_PROFILE_AGG</span>
    <span class="s-p">&exchange</span>=<span class="s-s">BINANCE_FUTURES</span>
    <span class="s-p">&exchange</span>=<span class="s-s">BYBIT</span>
    <span class="s-p">&coin</span>=<span class="s-s">BTC</span>
    <span class="s-p">&interval</span>=<span class="s-s">HOUR</span>
    <span class="s-p">&from</span>=<span class="s-n">1774800000</span>
    <span class="s-p">&period</span>=<span class="s-n">3600</span>
    <span class="s-p">&transform.groupBy.type</span>=<span class="s-s">GROUP_BY_TYPE_SUM</span>
    <span class="s-p">&transform.normalize.quote</span>=<span class="s-s">USD</span><span class="s-s">"</span> \\
  <span class="s-k">-H</span> <span class="s-s">"X-Kiyotaka-Key: YOUR_API_KEY"</span></pre>
</CodePanel>

<CodePanel lang="python">
<pre><span class="s-k">import</span> <span class="s-v">requests</span>
&#10;
<span class="s-v">response</span> = requests.<span class="s-f">get</span>(
    <span class="s-s">"https://api.kiyotaka.ai/v1/points?type=VOLUME_PROFILE_AGG&exchange=BINANCE_FUTURES&exchange=BYBIT&coin=BTC&interval=HOUR&from=1774800000&period=3600&transform.groupBy.type=GROUP_BY_TYPE_SUM&transform.normalize.quote=USD "</span>,
    headers={<span class="s-s">"X-Kiyotaka-Key"</span>: <span class="s-s">"YOUR_API_KEY"</span>}
)
<span class="s-v">data</span> = response.<span class="s-f">json</span>()</pre>
</CodePanel>

<CodePanel lang="javascript">
<pre><span class="s-k">const</span> <span class="s-v">response</span> = <span class="s-k">await</span> <span class="s-f">fetch</span>(
  <span class="s-s">"https://api.kiyotaka.ai/v1/points?type=VOLUME_PROFILE_AGG&exchange=BINANCE_FUTURES&exchange=BYBIT&coin=BTC&interval=HOUR&from=1774800000&period=3600&transform.groupBy.type=GROUP_BY_TYPE_SUM&transform.normalize.quote=USD "</span>,
  { headers: { <span class="s-s">"X-Kiyotaka-Key"</span>: <span class="s-s">"YOUR_API_KEY"</span> } }
)
<span class="s-k">const</span> <span class="s-v">data</span> = <span class="s-k">await</span> response.<span class="s-f">json</span>()</pre>
</CodePanel>

</CodeTabs>

### Response

<CodeBlock lang="JSON">
<pre>{
  <span class="s-p">"series"</span>: [
    {
      <span class="s-p">"id"</span>: {
        <span class="s-p">"type"</span>: <span class="s-s">"VOLUME_PROFILE_AGG"</span>,
        <span class="s-p">"exchange"</span>: <span class="s-s">"BINANCE_FUTURES"</span>,
        <span class="s-p">"rawSymbol"</span>: <span class="s-s">"BTCUSDT"</span>,
        <span class="s-p">"normalizedSymbol"</span>: <span class="s-s">"BTC-USDT"</span>,
        <span class="s-p">"category"</span>: <span class="s-s">"PERPETUAL"</span>,
        <span class="s-p">"interval"</span>: <span class="s-s">"HOUR"</span>,
        <span class="s-p">"coin"</span>: <span class="s-s">"BTC"</span>
      },
      <span class="s-p">"points"</span>: [
        {
          <span class="s-p">"Point"</span>: {
            <span class="s-p">"profile"</span>: [<span class="s-n">66108</span>, <span class="s-n">0</span>, <span class="s-n">5.466999999999996</span>, <span class="s-n">66114</span>, <span class="s-n">6.239000000000001</span>, <span class="s-n">25.31399999999998</span>, <span class="s-n">66120</span>, <span class="s-n">7.307999999999996</span>, <span class="s-n">20.503000000000004</span>, <span class="s-o">...</span>],
            <span class="s-p">"timestamp"</span>: { <span class="s-p">"s"</span>: <span class="s-n">1774803600</span> }
          }
        }
      ]
    }
  ]
}</pre>
</CodeBlock>

### How to read `profile`

`profile` is a flat array of repeating triplets:
`[price1, buyVolume1, sellVolume1, price2, buyVolume2, sellVolume2, ...]`
So:
- `profile[0]` is the first price level
- `profile[1]` is the buy volume at that price
- `profile[2]` is the sell volume at that price
- `profile[3]` is the next price level
- `profile[4]` is the buy volume at that next price
- `profile[5]` is the sell volume at that next price