---
title: "Chain-level bid/ask/mid distribution"
method: GET
path: "/v1/chain-ratio/{ticker}"
tags: ["Ratios"]
---

# Chain-level bid/ask/mid distribution

`GET /v1/chain-ratio/{ticker}`

## Request

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

Aggregates a ticker's full option chain to surface buying vs
selling pressure (`askRatio`, `bidRatio`, `midRatio`,
`aggressionRatio`), call/put balance, and ATM/OTM concentration.
Returns a `bias`, `aggression`, and `confidence` interpretation.
Reference: PRD Sections 12.3 and 14.

## Path parameters

- `ticker` string, required

## Query parameters

- `date` string, date
- `timeframe` '5m' | '15m' | '1h' | '4h' | '1d'
- `option_type` 'call' | 'put' | 'all'
- `min_premium` integer
- `min_dte` integer
- `max_dte` integer

## Response `200`

Chain ratio analysis with interpretation.

- ChainRatioSuccess
  - `data` ChainRatioResponse, required
    - `ticker` string, required
    - `date` string, date, required
    - `timeframe` string, required
    - `tradeCount` integer, required
    - `totalPremium` number, required
    - `chainRatios` ChainRatios, required
      - `callPutRatio` number, required: Call premium / put premium (capped at 999 when puts = 0).
      - `askRatio` number, required: Share (0–1) of trades at or above ask.
      - `bidRatio` number, required: Share (0–1) of trades at or below bid.
      - `midRatio` number, required: Share (0–1) of trades at mid (or with no BBO).
      - `aggressionRatio` number, required: (askTrades + bidTrades) / midTrades — capped at 999 when midTrades = 0.
      - `atmConcentration` number, required: Share (0–1) of volume in ATM strikes (±3% moneyness).
      - `otmCallConcentration` number, required: Share (0–1) of call volume in OTM strikes.
      - `otmPutConcentration` number, required: Share (0–1) of put volume in OTM strikes.
    - `interpretation` RatioInterpretation, required
      - `bias` 'BULLISH' | 'BEARISH' | 'NEUTRAL' | 'MIXED', required
      - `aggression` 'HIGH' | 'MEDIUM' | 'LOW', required
      - `confidence` 'HIGH' | 'MEDIUM' | 'LOW', required
      - `description` string, 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)
