← tanukitrade.com Open WebApp (opens in a new tab) Start 7-day free trial

Range

0DTE boxes and four distance lists.

How far the expected move and the delta ladder sit, and the spot each distance is measured from. No lower or upper bound is returned.

The four distance lists require at least one of symbol or expiry. Sending both is fine. expiry is a date or an alias 0, 1, w1–w4, M1–M3, ALL. Alias case folds. A negative DTE is omitted. A non-positive binary or 1σ distance is omitted. distance_pts is instrument points, at most 4 decimals, with no tick rounding. distance_pct is that distance over the expiry’s spot, rounded to 4 decimal places. That spot is the row’s spot_price, the expiry’s average opex spot, scaled like the distance. Each row’s snapshot_at is its own expiry’s latest opex update.

An unknown expiry next to a symbol is 422 UNKNOWN_EXPIRY. The same unknown expiry with no symbol is HTTP 200 and an empty items list. error.details[0].available lists up to 20 dates the symbol does have.

Box levels are em_upper, em_lower, sigma_upper, and sigma_lower. They are the expected-move box, not a quote. Each snapshot’s spot_price is its peg, the price the box is centred on; widest.spot_price is the peg of the latest snapshot that arrived. The session keys eod, pre, and open are always present. A session that was not stored is null. A symbol with its own row uses that row, unscaled. A micro future uses its parent future, unscaled. XSP uses the SPX row at one tenth. Another synthetic with no row of its own is omitted.

Live options and derived data refresh every minute on NYSE weekdays from 06:40 through 16:00 ET. Outside that window the last snapshot is served. The clocks, the 0DTE capture times, and past boxes are in the glossary.

1 / 5

0DTE boxes

POST/api/v1/range/0dte-boxMCP list_0dte_expected_move_boxes

Lists the latest and previous 0DTE expected-move boxes. A box has target_date, snapshots (eod, pre, open), and widest. The MCP tool is list_0dte_expected_move_boxes. The arguments are this same JSON body. The bearer token stays on the HTTP header.

Parameters · 0DTE boxes

NameTypeRequiredValues
symbolsarray of stringsNoUp to 300 tickers. Unknown names are left out. Order in the response is symbol ascending.
cursorstringNoPrevious meta.next_cursor. Omit it on the first page.

Page size is fixed at 100 rows. The caller does not set it. The response cache refreshes in 180 seconds (rc_ttl).

Valid bodies, from the minimal to the one the sample answers:

  • {}
  • {"symbols":["SPX"]}
curl
curl --compressed \
  --request POST \
  --url "${TANUKI_BASE_URL}/api/v1/range/0dte-box" \
  --header "Authorization: Bearer 12345.YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data '{"symbols":["SPX"]}'

Live builder output for the request in this file. The row list was short enough to keep. latest.snapshots keeps every session: pre snapshot_at 2026-10-21T06:35:02-04:00; open snapshot_at 2026-10-21T09:33:02-04:00; eod snapshot_at 2026-10-20T16:15:02-04:00. Those snapshot_at values are the box write times in get_glossary (about 06:35, 09:33 and 16:15 ET). 06:40 ET is when live data is published, not when the box is written. previous is the prior day's box. built_at is the builder health clock of this capture.

200 application/json
{
  "ok": true,
  "data": {
    "items": [
      {
        "symbol": "SPX",
        "snapshot_type": "latest",
        "latest": {
          "target_date": "2026-10-21",
          "snapshots": {
            "eod": {
              "valid_from": "2026-10-20T16:00:00-04:00",
              "valid_until": "2026-10-21T16:00:00-04:00",
              "snapshot_at": "2026-10-20T16:15:02-04:00",
              "spot_price": 7710.2,
              "em_upper": 7748.96,
              "em_lower": 7671.44,
              "sigma_upper": 7764.87,
              "sigma_lower": 7655.53
            },
            "pre": {
              "valid_from": "2026-10-21T06:30:00-04:00",
              "valid_until": "2026-10-21T16:00:00-04:00",
              "snapshot_at": "2026-10-21T06:35:02-04:00",
              "spot_price": 7723.38,
              "em_upper": 7755.07,
              "em_lower": 7691.69,
              "sigma_upper": 7767.09,
              "sigma_lower": 7679.67
            },
            "open": {
              "valid_from": "2026-10-21T09:30:00-04:00",
              "valid_until": "2026-10-21T16:00:00-04:00",
              "snapshot_at": "2026-10-21T09:33:02-04:00",
              "spot_price": 7738.33,
              "em_upper": 7772.77,
              "em_lower": 7703.89,
              "sigma_upper": 7775.85,
              "sigma_lower": 7700.81
            }
          },
          "widest": {
            "spot_price": 7738.33,
            "em_upper": 7772.77,
            "em_lower": 7671.44,
            "sigma_upper": 7775.85,
            "sigma_lower": 7655.53
          }
        },
        "previous": {
          "target_date": "2026-10-20",
          "snapshots": {
            "eod": {
              "valid_from": "2026-10-19T16:00:00-04:00",
              "valid_until": "2026-10-20T16:00:00-04:00",
              "snapshot_at": "2026-10-19T16:15:01-04:00",
              "spot_price": 7691.49,
              "em_upper": 7732.75,
              "em_lower": 7650.23,
              "sigma_upper": 7750.32,
              "sigma_lower": 7632.66
            },
            "pre": {
              "valid_from": "2026-10-20T06:30:00-04:00",
              "valid_until": "2026-10-20T16:00:00-04:00",
              "snapshot_at": "2026-10-20T06:35:01-04:00",
              "spot_price": 7688.21,
              "em_upper": 7721.68,
              "em_lower": 7654.74,
              "sigma_upper": 7734.19,
              "sigma_lower": 7642.23
            },
            "open": {
              "valid_from": "2026-10-20T09:30:00-04:00",
              "valid_until": "2026-10-20T16:00:00-04:00",
              "snapshot_at": "2026-10-20T09:33:01-04:00",
              "spot_price": 7684.56,
              "em_upper": 7714.65,
              "em_lower": 7654.47,
              "sigma_upper": 7727.01,
              "sigma_lower": 7642.11
            }
          },
          "widest": {
            "spot_price": 7684.56,
            "em_upper": 7732.75,
            "em_lower": 7650.23,
            "sigma_upper": 7750.32,
            "sigma_lower": 7632.66
          }
        }
      }
    ]
  },
  "meta": {
    "request": {
      "symbols": [
        "SPX"
      ]
    },
    "count": 1,
    "total": 1,
    "page": 1,
    "page_count": 1,
    "next_cursor": null,
    "generation": "3f1a595090be",
    "as_of": {},
    "built_at": "2026-10-23T01:08:02-04:00",
    "omitted": [],
    "docs": {
      "reference": "https://tanukitrade.com/docs/api/range#list_0dte_expected_move_boxes",
      "glossary": "https://tanukitrade.com/docs/api/glossary"
    }
  }
}

Response fields · 0DTE boxes

FieldTypeMeaning
symbolstringCanonical ticker. Copy it from list_symbols. Letter case folds to uppercase.
snapshot_typestringlatest on this route.
latestobjecttarget_date, snapshots, widest. eod, pre, and open are always present; a missing session is null. Each snapshot's spot_price is its peg, the price the box is centred on; widest.spot_price is the peg of the latest snapshot that arrived.
previousobject or nullThe prior box, same shape as latest, or null when there is none.

Errors on this route · 0DTE boxes

HTTPCodeWhen
422VALIDATION_ERRORUnknown field, nested value, repeated key, bad JSON, a bad alias, or a cursor that does not match this request.
413PAYLOAD_TOO_LARGEThe JSON body is larger than 4 KiB.
503DATA_WARMINGThe datapoint is not built yet. Wait Retry-After seconds (1).
422RESULT_TOO_LARGEThe uncompressed JSON would exceed 512 KiB. Narrow the filter.

Auth, rate limit, and the other shared failures are on Errors.

2 / 5

Binary expected move

POST/api/v1/range/binary-expected-moveMCP list_range_binary_expected_move

Lists the binary expected move. distance_pts is the per-expiry average of the stored expected move, at most 4 decimal places. distance_pct is that distance over the expiry opex spot, in percent, rounded to 4 decimal places. The MCP tool is list_range_binary_expected_move. The arguments are this same JSON body. The bearer token stays on the HTTP header.

Parameters · Binary expected move

One of Required: at least one of symbol or expiry. Sending both is fine.

NameTypeRequiredValues
symbolstringOne ofOne ticker. Letter case folds to uppercase.
expirystringOne ofYYYY-MM-DD, or an alias 0, 1, w1–w4, M1–M3, ALL. Alias case folds onto that canonical form.
cursorstringNoPrevious meta.next_cursor. Omit it on the first page.

Page size is fixed at 400 rows. The caller does not set it. The response cache refreshes in 180 seconds (rc_ttl).

Valid bodies, from the minimal to the one the sample answers:

  • {"symbol":"SPX"}
  • {"expiry":"1"}
  • {"symbol":"SPX","expiry":"1"}
curl
curl --compressed \
  --request POST \
  --url "${TANUKI_BASE_URL}/api/v1/range/binary-expected-move" \
  --header "Authorization: Bearer 12345.YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data '{"symbol":"SPX","expiry":"1"}'

Live builder output for the request in this file. The row list was short enough to keep. built_at is the builder health clock of this capture.

200 application/json
{
  "ok": true,
  "data": {
    "items": [
      {
        "symbol": "SPX",
        "expiration_date": "2026-10-26",
        "dte": 3,
        "aliases": [
          "1"
        ],
        "is_monthly": false,
        "snapshot_type": "latest",
        "snapshot_at": "2026-10-21T16:01:44-04:00",
        "spot_price": 7760.88,
        "distance_pts": 74.5264,
        "distance_pct": 0.9603
      }
    ]
  },
  "meta": {
    "request": {
      "symbol": "SPX",
      "expiry": "1"
    },
    "count": 1,
    "total": 1,
    "page": 1,
    "page_count": 1,
    "next_cursor": null,
    "generation": "934247a0818e.0277c81a9576",
    "as_of": {},
    "built_at": "2026-10-23T01:08:02-04:00",
    "omitted": [],
    "docs": {
      "reference": "https://tanukitrade.com/docs/api/range#list_range_binary_expected_move",
      "glossary": "https://tanukitrade.com/docs/api/glossary"
    }
  }
}

Response fields · Binary expected move

FieldTypeMeaning
symbolstringCanonical ticker. Copy it from list_symbols. Letter case folds to uppercase.
expiration_datedateCalendar expiry, YYYY-MM-DD, ET.
dteintegerDays to that expiry, as stored for the row.
aliasesarray of strings0, 1, w1–w4, M1–M3, ALL. Weekly aliases use a lowercase w. Monthly aliases and ALL stay uppercase.
is_monthlybooleanTrue on the monthly expiry date. Same rule as discovery expiries.
snapshot_typestringlatest on a current row. history on a stored day.
snapshot_atdatetime ET or nullWhen the source row was captured. ISO 8601 with an ET offset, to milliseconds.
spot_pricenumber or nullThat expiry's average opex spot, the distance_pct basis, at most 4 decimal places. A synthetic is scaled the same way as the distance.
distance_ptsnumberInstrument points, at most 4 decimal places.
distance_pctnumberdistance_pts / that expiry's opex spot × 100, in percent, rounded to 4 decimal places.

Errors on this route · Binary expected move

HTTPCodeWhen
422VALIDATION_ERRORUnknown field, nested value, repeated key, bad JSON, a bad alias, or a cursor that does not match this request.
413PAYLOAD_TOO_LARGEThe JSON body is larger than 4 KiB.
503DATA_WARMINGThe datapoint is not built yet. Wait Retry-After seconds (1).
422RESULT_TOO_LARGEThe uncompressed JSON would exceed 512 KiB. Narrow the filter.
422UNKNOWN_SYMBOLRequired symbol is not in the universe.
422UNKNOWN_EXPIRYExpiry does not resolve for that symbol. details lists up to 20 available dates. Expiry alone, with no symbol, is an empty 200 instead.

Auth, rate limit, and the other shared failures are on Errors.

3 / 5

1-sigma range

POST/api/v1/range/std1-sigmaMCP list_range_std1_sigma

Lists the 1-sigma distance_pts. The generator’s 0DTE override is already in the stored column. Same scaling and omission rules as the binary expected move. distance_pct is a percent. ivx is not returned. The MCP tool is list_range_std1_sigma. The arguments are this same JSON body. The bearer token stays on the HTTP header.

Parameters · 1-sigma range

One of Required: at least one of symbol or expiry. Sending both is fine.

NameTypeRequiredValues
symbolstringOne ofOne ticker. Letter case folds to uppercase.
expirystringOne ofYYYY-MM-DD, or an alias 0, 1, w1–w4, M1–M3, ALL. Alias case folds onto that canonical form.
cursorstringNoPrevious meta.next_cursor. Omit it on the first page.

Page size is fixed at 400 rows. The caller does not set it. The response cache refreshes in 180 seconds (rc_ttl).

Valid bodies, from the minimal to the one the sample answers:

  • {"symbol":"SPX"}
  • {"expiry":"1"}
  • {"symbol":"SPX","expiry":"1"}
curl
curl --compressed \
  --request POST \
  --url "${TANUKI_BASE_URL}/api/v1/range/std1-sigma" \
  --header "Authorization: Bearer 12345.YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data '{"symbol":"SPX","expiry":"1"}'

Live builder output for the request in this file. The row list was short enough to keep. built_at is the builder health clock of this capture.

200 application/json
{
  "ok": true,
  "data": {
    "items": [
      {
        "symbol": "SPX",
        "expiration_date": "2026-10-26",
        "dte": 3,
        "aliases": [
          "1"
        ],
        "is_monthly": false,
        "snapshot_type": "latest",
        "snapshot_at": "2026-10-21T16:01:44-04:00",
        "spot_price": 7760.88,
        "distance_pts": 105.0961,
        "distance_pct": 1.3542
      }
    ]
  },
  "meta": {
    "request": {
      "symbol": "SPX",
      "expiry": "1"
    },
    "count": 1,
    "total": 1,
    "page": 1,
    "page_count": 1,
    "next_cursor": null,
    "generation": "934247a0818e.0277c81a9576",
    "as_of": {},
    "built_at": "2026-10-23T01:08:02-04:00",
    "omitted": [],
    "docs": {
      "reference": "https://tanukitrade.com/docs/api/range#list_range_std1_sigma",
      "glossary": "https://tanukitrade.com/docs/api/glossary"
    }
  }
}

Response fields · 1-sigma range

FieldTypeMeaning
symbolstringCanonical ticker. Copy it from list_symbols. Letter case folds to uppercase.
expiration_datedateCalendar expiry, YYYY-MM-DD, ET.
dteintegerDays to that expiry, as stored for the row.
aliasesarray of strings0, 1, w1–w4, M1–M3, ALL. Weekly aliases use a lowercase w. Monthly aliases and ALL stay uppercase.
is_monthlybooleanTrue on the monthly expiry date. Same rule as discovery expiries.
snapshot_typestringlatest on a current row. history on a stored day.
snapshot_atdatetime ET or nullWhen the source row was captured. ISO 8601 with an ET offset, to milliseconds.
spot_pricenumber or nullThat expiry's average opex spot, the distance_pct basis, at most 4 decimal places. A synthetic is scaled the same way as the distance.
distance_ptsnumberInstrument points, at most 4 decimal places.
distance_pctnumberdistance_pts / that expiry's opex spot × 100, in percent, rounded to 4 decimal places.

Errors on this route · 1-sigma range

HTTPCodeWhen
422VALIDATION_ERRORUnknown field, nested value, repeated key, bad JSON, a bad alias, or a cursor that does not match this request.
413PAYLOAD_TOO_LARGEThe JSON body is larger than 4 KiB.
503DATA_WARMINGThe datapoint is not built yet. Wait Retry-After seconds (1).
422RESULT_TOO_LARGEThe uncompressed JSON would exceed 512 KiB. Narrow the filter.
422UNKNOWN_SYMBOLRequired symbol is not in the universe.
422UNKNOWN_EXPIRYExpiry does not resolve for that symbol. details lists up to 20 available dates. Expiry alone, with no symbol, is an empty 200 instead.

Auth, rate limit, and the other shared failures are on Errors.

4 / 5

Delta ladder

POST/api/v1/range/delta-interpolated-ladderMCP list_range_delta_interpolated_ladder

Lists the 16, 20, 25, 30, 35, and 40 delta distances. Puts are stored negative; the response uses the absolute distance. A rung is null unless both sides are finite. The row returns spot_price, that expiry's average opex spot, not a live quote. A rung does not include a strike or a price. The MCP tool is list_range_delta_interpolated_ladder. The arguments are this same JSON body. The bearer token stays on the HTTP header.

Parameters · Delta ladder

One of Required: at least one of symbol or expiry. Sending both is fine.

NameTypeRequiredValues
symbolstringOne ofOne ticker. Letter case folds to uppercase.
expirystringOne ofYYYY-MM-DD, or an alias 0, 1, w1–w4, M1–M3, ALL. Alias case folds onto that canonical form.
cursorstringNoPrevious meta.next_cursor. Omit it on the first page.

Page size is fixed at 200 rows. The caller does not set it. The response cache refreshes in 180 seconds (rc_ttl).

Valid bodies, from the minimal to the one the sample answers:

  • {"symbol":"SPX"}
  • {"expiry":"1"}
  • {"symbol":"SPX","expiry":"1"}
curl
curl --compressed \
  --request POST \
  --url "${TANUKI_BASE_URL}/api/v1/range/delta-interpolated-ladder" \
  --header "Authorization: Bearer 12345.YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data '{"symbol":"SPX","expiry":"1"}'

Live builder output for the request in this file. The row list was short enough to keep. built_at is the builder health clock of this capture.

200 application/json
{
  "ok": true,
  "data": {
    "items": [
      {
        "symbol": "SPX",
        "expiration_date": "2026-10-26",
        "dte": 3,
        "aliases": [
          "1"
        ],
        "is_monthly": false,
        "snapshot_type": "latest",
        "snapshot_at": "2026-10-21T16:01:44-04:00",
        "spot_price": 7760.88,
        "ladder": {
          "16": {
            "put": {
              "distance_pts": 106.88,
              "distance_pct": 1.3772
            },
            "call": {
              "distance_pts": 90.2658,
              "distance_pct": 1.1631
            }
          },
          "20": {
            "put": {
              "distance_pts": 87.1073,
              "distance_pct": 1.1224
            },
            "call": {
              "distance_pts": 77.8556,
              "distance_pct": 1.0032
            }
          },
          "25": {
            "put": {
              "distance_pts": 66.8501,
              "distance_pct": 0.8614
            },
            "call": {
              "distance_pts": 64.0164,
              "distance_pct": 0.8249
            }
          },
          "30": {
            "put": {
              "distance_pts": 49.685,
              "distance_pct": 0.6402
            },
            "call": {
              "distance_pts": 51.386,
              "distance_pct": 0.6621
            }
          },
          "35": {
            "put": {
              "distance_pts": 34.5294,
              "distance_pct": 0.4449
            },
            "call": {
              "distance_pts": 39.3581,
              "distance_pct": 0.5071
            }
          },
          "40": {
            "put": {
              "distance_pts": 20.6958,
              "distance_pct": 0.2667
            },
            "call": {
              "distance_pts": 27.6247,
              "distance_pct": 0.3559
            }
          }
        }
      }
    ]
  },
  "meta": {
    "request": {
      "symbol": "SPX",
      "expiry": "1"
    },
    "count": 1,
    "total": 1,
    "page": 1,
    "page_count": 1,
    "next_cursor": null,
    "generation": "934247a0818e.0277c81a9576",
    "as_of": {},
    "built_at": "2026-10-23T01:08:02-04:00",
    "omitted": [],
    "docs": {
      "reference": "https://tanukitrade.com/docs/api/range#list_range_delta_interpolated_ladder",
      "glossary": "https://tanukitrade.com/docs/api/glossary"
    }
  }
}

Response fields · Delta ladder

FieldTypeMeaning
symbolstringCanonical ticker. Copy it from list_symbols. Letter case folds to uppercase.
expiration_datedateCalendar expiry, YYYY-MM-DD, ET.
dteintegerDays to that expiry, as stored for the row.
aliasesarray of strings0, 1, w1–w4, M1–M3, ALL. Weekly aliases use a lowercase w. Monthly aliases and ALL stay uppercase.
is_monthlybooleanTrue on the monthly expiry date. Same rule as discovery expiries.
snapshot_typestringlatest on a current row. history on a stored day.
snapshot_atdatetime ET or nullWhen the source row was captured. ISO 8601 with an ET offset, to milliseconds.
spot_pricenumber or nullThat expiry's average opex spot, the distance_pct basis, at most 4 decimal places. A synthetic is scaled the same way as the distance.
ladderobjectKeys "16" through "40". Each side is put and call, each with distance_pts and distance_pct.

Errors on this route · Delta ladder

HTTPCodeWhen
422VALIDATION_ERRORUnknown field, nested value, repeated key, bad JSON, a bad alias, or a cursor that does not match this request.
413PAYLOAD_TOO_LARGEThe JSON body is larger than 4 KiB.
503DATA_WARMINGThe datapoint is not built yet. Wait Retry-After seconds (1).
422RESULT_TOO_LARGEThe uncompressed JSON would exceed 512 KiB. Narrow the filter.
422UNKNOWN_SYMBOLRequired symbol is not in the universe.
422UNKNOWN_EXPIRYExpiry does not resolve for that symbol. details lists up to 20 available dates. Expiry alone, with no symbol, is an empty 200 instead.

Auth, rate limit, and the other shared failures are on Errors.

5 / 5

Tanuki Smart range

POST/api/v1/range/tanuki-smart-rangeMCP list_range_tanuki_smart_range

Each side is the mean of the available positive binary expected move, positive 1-sigma distance, and absolute delta-16 distance. put and call sit on the row. skew is on the row. components carries bem_pts, std1_pts, delta16_put_pts, and delta16_call_pts. The MCP tool is list_range_tanuki_smart_range. The arguments are this same JSON body. The bearer token stays on the HTTP header.

Parameters · Tanuki Smart range

One of Required: at least one of symbol or expiry. Sending both is fine.

NameTypeRequiredValues
symbolstringOne ofOne ticker. Letter case folds to uppercase.
expirystringOne ofYYYY-MM-DD, or an alias 0, 1, w1–w4, M1–M3, ALL. Alias case folds onto that canonical form.
cursorstringNoPrevious meta.next_cursor. Omit it on the first page.

Page size is fixed at 400 rows. The caller does not set it. The response cache refreshes in 180 seconds (rc_ttl).

Valid bodies, from the minimal to the one the sample answers:

  • {"symbol":"SPX"}
  • {"expiry":"1"}
  • {"symbol":"SPX","expiry":"1"}
curl
curl --compressed \
  --request POST \
  --url "${TANUKI_BASE_URL}/api/v1/range/tanuki-smart-range" \
  --header "Authorization: Bearer 12345.YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data '{"symbol":"SPX","expiry":"1"}'

Live builder output for the request in this file. The row list was short enough to keep. built_at is the builder health clock of this capture.

200 application/json
{
  "ok": true,
  "data": {
    "items": [
      {
        "symbol": "SPX",
        "expiration_date": "2026-10-26",
        "dte": 3,
        "aliases": [
          "1"
        ],
        "is_monthly": false,
        "snapshot_type": "latest",
        "snapshot_at": "2026-10-21T16:01:44-04:00",
        "spot_price": 7760.88,
        "put": {
          "distance_pts": 95.5008,
          "distance_pct": 1.2305
        },
        "call": {
          "distance_pts": 89.9628,
          "distance_pct": 1.1592
        },
        "skew": "put",
        "components": {
          "bem_pts": 74.5264,
          "std1_pts": 105.0961,
          "delta16_put_pts": 106.88,
          "delta16_call_pts": 90.2658
        }
      }
    ]
  },
  "meta": {
    "request": {
      "symbol": "SPX",
      "expiry": "1"
    },
    "count": 1,
    "total": 1,
    "page": 1,
    "page_count": 1,
    "next_cursor": null,
    "generation": "934247a0818e.0277c81a9576",
    "as_of": {},
    "built_at": "2026-10-23T01:08:02-04:00",
    "omitted": [],
    "docs": {
      "reference": "https://tanukitrade.com/docs/api/range#list_range_tanuki_smart_range",
      "glossary": "https://tanukitrade.com/docs/api/glossary"
    }
  }
}

Response fields · Tanuki Smart range

FieldTypeMeaning
symbolstringCanonical ticker. Copy it from list_symbols. Letter case folds to uppercase.
expiration_datedateCalendar expiry, YYYY-MM-DD, ET.
dteintegerDays to that expiry, as stored for the row.
aliasesarray of strings0, 1, w1–w4, M1–M3, ALL. Weekly aliases use a lowercase w. Monthly aliases and ALL stay uppercase.
is_monthlybooleanTrue on the monthly expiry date. Same rule as discovery expiries.
snapshot_typestringlatest on a current row. history on a stored day.
snapshot_atdatetime ET or nullWhen the source row was captured. ISO 8601 with an ET offset, to milliseconds.
spot_pricenumber or nullThat expiry's average opex spot, the distance_pct basis, at most 4 decimal places. A synthetic is scaled the same way as the distance.
putobjectdistance_pts and distance_pct.
callobjectdistance_pts and distance_pct.
skewstringsymmetric when the wings differ by at most 0.01, otherwise call or put for the wider wing.
componentsobjectbem_pts, std1_pts, delta16_put_pts, and delta16_call_pts. Null when that input is missing.

Errors on this route · Tanuki Smart range

HTTPCodeWhen
422VALIDATION_ERRORUnknown field, nested value, repeated key, bad JSON, a bad alias, or a cursor that does not match this request.
413PAYLOAD_TOO_LARGEThe JSON body is larger than 4 KiB.
503DATA_WARMINGThe datapoint is not built yet. Wait Retry-After seconds (1).
422RESULT_TOO_LARGEThe uncompressed JSON would exceed 512 KiB. Narrow the filter.
422UNKNOWN_SYMBOLRequired symbol is not in the universe.
422UNKNOWN_EXPIRYExpiry does not resolve for that symbol. details lists up to 20 available dates. Expiry alone, with no symbol, is an empty 200 instead.

Auth, rate limit, and the other shared failures are on Errors.

TanukiTrade API and MCP. Derived options analytics for your code and for agents. Not investment advice. tanukitrade.com