---
title: "Volume-vs-Open-Interest accumulation analysis"
method: GET
path: "/v1/vol-oi/{ticker}"
tags: ["Analytics"]
---

# Volume-vs-Open-Interest accumulation analysis

`GET /v1/vol-oi/{ticker}`

## Request

- Base URL: `https://flow-api.skylit.ai`
- URL: `https://flow-api.skylit.ai/v1/vol-oi/{ticker}`
- Auth: HTTP bearer

Distinguishes new position building (accumulation) from position
closing (distribution) by bucketing Vol/OI ratios per option type
and moneyness band. Returns an overall accumulation score (0–100),
an estimate of the share of volume representing new positions, and
a one-token signal (`strong_accumulation` → `low_activity`).

## Path parameters

- `ticker` string, required

## Query parameters

- `timeframe` 'daily' | 'weekly'
- `option_type` 'call' | 'put' | 'all'
- `moneyness` 'otm_10plus' | 'otm_5_10' | 'otm_3_5' | 'atm_itm' | 'all'
- `min_oi` integer
- `date` string, date

## Response `200`

Vol/OI breakdown with accumulation score.

- VolOiSuccess
  - `data` VolOiResponse, required
    - `ticker` string, required
    - `timestamp` string, date-time, required
    - `timeframe` 'daily' | 'weekly', required
    - `volOiAnalysis` VolOiAnalysis, required
      - `calls` VolOiOptionType, required
        - `totalVolume` integer, required
        - `totalOi` integer, required
        - `volOiRatio` number, required
        - `signal` 'strong_accumulation' | 'accumulation' | 'mixed' | 'distribution' | 'low_activity', required
        - `byMoneyness` VolOiByMoneyness, required
          - `otm10plus` object, required: ≥10% OTM.
            - `volume` integer, required
            - `oi` integer, required
            - `ratio` number, required: Vol/OI ratio for the bucket (0 when OI is zero).
          - `otm510` object, required: 5–10% OTM.
            - `volume` integer, required
            - `oi` integer, required
            - `ratio` number, required: Vol/OI ratio for the bucket (0 when OI is zero).
          - `otm35` object, required: 3–5% OTM.
            - `volume` integer, required
            - `oi` integer, required
            - `ratio` number, required: Vol/OI ratio for the bucket (0 when OI is zero).
          - `atmItm` object, required: ATM/ITM (<3% OTM or already ITM).
            - `volume` integer, required
            - `oi` integer, required
            - `ratio` number, required: Vol/OI ratio for the bucket (0 when OI is zero).
      - `puts` VolOiOptionType, required
        - `totalVolume` integer, required
        - `totalOi` integer, required
        - `volOiRatio` number, required
        - `signal` 'strong_accumulation' | 'accumulation' | 'mixed' | 'distribution' | 'low_activity', required
        - `byMoneyness` VolOiByMoneyness, required
          - `otm10plus` object, required: ≥10% OTM.
            - `volume` integer, required
            - `oi` integer, required
            - `ratio` number, required: Vol/OI ratio for the bucket (0 when OI is zero).
          - `otm510` object, required: 5–10% OTM.
            - `volume` integer, required
            - `oi` integer, required
            - `ratio` number, required: Vol/OI ratio for the bucket (0 when OI is zero).
          - `otm35` object, required: 3–5% OTM.
            - `volume` integer, required
            - `oi` integer, required
            - `ratio` number, required: Vol/OI ratio for the bucket (0 when OI is zero).
          - `atmItm` object, required: ATM/ITM (<3% OTM or already ITM).
            - `volume` integer, required
            - `oi` integer, required
            - `ratio` number, required: Vol/OI ratio for the bucket (0 when OI is zero).
    - `accumulationScore` integer, required: Composite accumulation score weighted by volume + OTM share.
    - `newPositionEstimatePct` integer, required: Estimated share of volume that represents new positions.
    - `signal` 'strong_accumulation' | 'accumulation' | 'mixed' | 'distribution' | 'low_activity', required
  - `meta` Meta, required
    - `timestamp` string, date-time, required: Server-side timestamp the response was generated at.
    - `requestId` string, required: Short opaque ID for log correlation.

## Other responses

- `400`: Request validation failed.
- `401`: Missing or invalid API key.
- `402`: The account's shared Skylit credit balance is lower than this route's cost. Top up to continue. Carries `X-Credits-Remaining: 0`.
- `403`: API key revoked/expired, monthly quota exceeded, or the account's API access is suspended (`account_suspended`).
- `404`: Unknown resource (ticker / sector / window with no data).
- `429`: Per-minute rate limit exceeded.
- `503`: Underlying data source temporarily unavailable, or the credit balance could not be verified (`credit_check_failed`). Safe to retry.

---

[API](https://skmtc.dev/skylit/apis/flowseeker-skylit-public-api.md) - [All operations](https://skmtc.dev/skylit/apis/flowseeker-skylit-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/skylit/apis/flowseeker-skylit-public-api/revisions/3280190b1b24?raw)
