Net Drift

Overview

Net Drift returns call vs put premium for a slice of the options chain, bucketed over time. Each bucket summarizes the trades that landed in that window: netCallPremium, netCallVolume, netPutPremium, netPutVolume, and the mid-market premium for both legs. When the filter narrows to a single ticker the response also includes the underlying stockPrice per bucket.

POST/v1/options/tool/net-drift
curl -X POST https://api.quantdata.us/v1/options/tool/net-drift \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionDate": "2026-05-13",
    "filter": { "ticker": "AAPL" }
  }'

Selecting the time window

Net Drift accepts sessionDate, timeRange, or neither. The two time fields are mutually exclusive; if you omit both, the most recent trading session is used. aggregationPeriod sets the bucket size and defaults to a span-appropriate value (see Conventions for the resolution table).

Multi-day range with explicit bucket

Request · timeRange + aggregationPeriod
{
  "timeRange": {
    "startTime": "2026-05-12T13:30:00Z",
    "endTime": "2026-05-14T20:00:00Z"
  },
  "aggregationPeriod": "15m",
  "filter": { "tickers": ["AAPL", "NVDA"] }
}

aggregationPeriod accepts the canonical short forms (1m, 5m, 15m, 1h, 1d, 1w, etc.). Only periods compatible with the requested span are accepted: 1m works for a single-day request, 1w works only beyond a year. Out-of-range combinations are rejected with a validation error.

Response shape

datais an object keyed by each bucket's start time (Unix epoch milliseconds). The entries are ordered by timestamp in ascending order. Each entry summarizes the trades that landed in the bucket window.

200 OK · application/json
{
  "data": {
    "1747137600000": {
      "midMarketCallPremium": 2.85,
      "midMarketPutPremium": 1.92,
      "netCallPremium": 184201.50,
      "netCallVolume": 6428,
      "netPutPremium": 102837.25,
      "netPutVolume": 3915,
      "stockPrice": 213.45
    },
    "1747137900000": {
      "midMarketCallPremium": 2.91,
      "midMarketPutPremium": 1.88,
      "netCallPremium": 221340.75,
      "netCallVolume": 7102,
      "netPutPremium": 95412.40,
      "netPutVolume": 3608,
      "stockPrice": 213.78
    }
  }
}

Per-bucket fields:

  • midMarketCallPremium, midMarketPutPremium: the per-contract mid-market premium for each leg at the bucket close, in dollars.
  • netCallPremium, netPutPremium: total premium for the leg across all trades in the bucket, in dollars.
  • netCallVolume, netPutVolume: contract count for the leg across all trades in the bucket.
  • stockPrice: underlying price at the bucket close. Only present when the request filters to exactly one ticker.

Filters

Convenience filter fields: tickers, expirationDates, expirationDateRange, strikePrices, strikePriceRange, moneyTypes. All are optional. The filterExpression DSL is also accepted and can be combined with filter; both are evaluated as AND.

Filter expression · AND composition

Request · filterExpression
{
  "sessionDate": "2026-05-13",
  "filterExpression": {
    "conjunction": "AND",
    "filters": [
      { "field": "ticker", "operation": "=", "values": ["AAPL", "NVDA"] },
      { "field": "dte", "operation": "<=", "value": 7 }
    ]
  }
}

See Field Reference for the type and allowed values of every filterable field, and Filter Expression for the full DSL grammar.

Where to go next