# Generated by tools/build_contracts.py from tools/algoseek_catalog.py -- do not edit by hand.
# Open Data Contract Standard v3.2.0 (https://bitol-io.github.io/open-data-contract-standard/).
apiVersion: v3.2.0
kind: DataContract
id: urn:alphaswarm:datacontract:algoseek:us-options-daily-analytics
name: AlgoSeek US Options Daily Analytics
version: 0.1.0
status: draft
domain: market-data
tags:
- algoseek
- licensed-data
- options
- opra
- us
- analytics
description:
  purpose: 'One row per option contract per trading day with end-of-day model values computed from the
    last-minute NBBO mid-price: implied volatility, theoretical price and delta, gamma, theta, vega and
    rho, plus the underlying mid and the last option quote used, and a code saying how the implied vol
    was obtained.'
  usage: Options pricing, volatility, and flow research on US-listed equity and index options.
  limitations: 'Delivered as recorded from the source feed: AlgoSeek does not remove crossed or locked
    quotes, bad prints, or out-of-sequence packets unless contracted to. Consumers own cleaning. Contract
    identity per row = Ticker + CallPut + Strike + Expiration (+ OptionStyle as attribute). No OSI/OCC
    symbol column; Strike is USD per share (one decimal in sample), Expiration is yyyymmdd. Whether Ticker
    is the option root or underlying (SPX vs SPXW) is not stated. Pricing model: Black-Scholes-Merton
    family. American options use QuantLib FdBlackScholesVanillaEngine (finite difference, implicit time
    stepping, uniform grid of 300 time steps by 900 price steps) with projected discrete dividends. European
    options use the closed-form Black-Scholes with dividend yield (Haug 2007). Greeks: delta, gamma and
    theta come from the QuantLib grid for American options; rho and vega are central finite differences
    (rate bumped 10 bp, volatility bumped 100 bp). Units are not stated: sample matches vega per 1 vol
    point, rho per 1 percentage point, theta per calendar day (one-day price decay). Underlying price
    input: underlying NBBO mid-price at the last minute traded (UnderLastMidPrice, minute stamped in UnderLastMidTime,
    15:59 in the sample). Option price input: option NBBO mid at the last minute traded (LastBid/LastAsk/LastMid
    with their own timestamps).'
  authoritativeDefinitions:
  - type: businessDefinition
    url: https://algoseek.com/dataset/us-options-daily-analytics/
  - type: implementation
    url: https://algoseek.com/data-docs/options-market-data/algoseek.US.Options.Daily.Analytics.pdf
  - type: implementation
    url: https://algoseek.com/docs/rest-api/reference
context:
  instructions: 'Identify a contract by underlying, expiration, strike and call/put. Most options tick
    files carry no underlying/root column: the underlying comes from the file path or API identifier,
    so keep it alongside every row you land. Strikes and prices are plain decimals (not scaled). EventType
    is a bit field: low 4 bits message type, 16 cancel, 32 call, 64 NBBO, 128 buy/bid side. Check OCC
    special settlements before comparing prices across a corporate action.'
  constraints:
  - id: c1
    constraint: 'Licensed vendor data: never export raw rows to a tenant-local destination or include
      them verbatim in a public artifact; serve only through entitlement-checked platform reads.'
  - id: c3
    constraint: Do not treat the vendor's `Ticker` as a stable identity across time; join on an AlgoSeek
      security key (SecId or ASID, which are distinct) or the platform symbol mapping.
servers:
- server: algoseek-s3
  type: s3
  environment: vendor
  description: AlgoSeek flat-file delivery (the layout the schema below describes).
  location: s3://${ALGOSEEK_S3_BUCKET_OPT_GREEKS_DAILY}/
  format: csv
  encoding: UTF-8
  customProperties:
  - property: layout
    value: Plain-text CSV with fixed header row; by default one file per symbol per trading day (e.g.
      all AAPL data for one date in one CSV). Compression and bucket/path naming not stated.
  - property: compression
    value: gzip
  - property: header
    value: true
  - property: entitlement
    value: Bucket access is granted per subscription; bucket names arrive with license provisioning.
- server: algoseek-rest-api
  type: api
  environment: vendor
  description: AlgoSeek Datasets REST API (X-API-KEY header; JSON, CSV or gzipped CSV). Returns AlgoSeek's
    normalized API layout, which differs from the flat-file columns in this contract's schema.
  location: https://api.algoseek.com/v1/data/us-equity-opt/greeks-daily/:identifier
  customProperties:
  - property: auth
    value: X-API-KEY header issued by AlgoSeek
  - property: columnsEndpoint
    value: https://api.algoseek.com/v1/meta/datasets/{dataset_id}/columns
  - property: statusEndpoint
    value: https://api.algoseek.com/v1/meta/datasets/{dataset_id}/status
  - property: responseFormats
    value:
    - json
    - csv
    - csv_gzip
  - property: pagination
    value: offset + limit; tick endpoints take trade_date and identifier (Ticker or ASID) in the path
schema:
- name: us_options_daily_analytics
  physicalName: opt_greeks_daily
  physicalType: file
  logicalType: object
  businessName: US Options Daily Analytics
  description: 'One row per option contract per trading day with end-of-day model values computed from
    the last-minute NBBO mid-price: implied volatility, theoretical price and delta, gamma, theta, vega
    and rho, plus the underlying mid and the last option quote used, and a code saying how the implied
    vol was obtained.'
  dataGranularityDescription: one option contract (Ticker x CallPut x Strike x Expiration) x one TradeDate
  properties:
  - name: TradeDate
    logicalType: date
    logicalTypeOptions:
      format: yyyymmdd
    physicalType: string (yyyymmdd) (csv text)
    description: Trading date of the calculation
    primaryKey: true
    primaryKeyPosition: 1
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: Ticker
    logicalType: string
    physicalType: string (csv text)
    description: Symbol name; sample shows the underlying/root (AAPL)
    primaryKey: true
    primaryKeyPosition: 2
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: CallPut
    logicalType: string
    physicalType: string (csv text)
    description: Option contract type, C = Call or P = Put
    primaryKey: true
    primaryKeyPosition: 3
    required: true
    enum:
    - value: C
      label: Call
    - value: P
      label: Put
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: OptionStyle
    logicalType: string
    physicalType: string (csv text)
    description: Exercise style, A = American or E = European
    required: true
    enum:
    - value: A
      label: American
    - value: E
      label: European
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: Strike
    logicalType: number
    physicalType: decimal (csv text)
    description: Fixed price at which the option can be exercised, quoted per share of underlying
    primaryKey: true
    primaryKeyPosition: 4
    required: true
    customProperties:
    - property: unit
      value: USD
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: Expiration
    logicalType: date
    logicalTypeOptions:
      format: yyyymmdd
    physicalType: string (yyyymmdd) (csv text)
    description: Expiration date of the option contract
    primaryKey: true
    primaryKeyPosition: 5
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: YearsToMaturity
    logicalType: number
    physicalType: decimal (csv text)
    description: Time until expiry in years; sample equals DaysToMaturity/365
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: DaysToMaturity
    logicalType: integer
    logicalTypeOptions:
      format: i64
    physicalType: integer (csv text)
    description: Calendar days from TradeDate until the contract expires
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: UnderLastMidPrice
    logicalType: number
    physicalType: decimal (csv text)
    description: Underlying NBBO mid-price at the last minute traded; model spot input
    required: true
    customProperties:
    - property: unit
      value: USD
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: UnderLastMidTime
    logicalType: time
    logicalTypeOptions:
      format: HH:MM (e.g. 15:59)
    physicalType: decimal (csv text)
    description: Minute bar used for UnderLastMidPrice; guide doc type says decimal but sample is HH:MM
      text
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: LastBidPrice
    logicalType: number
    physicalType: decimal (csv text)
    description: Option NBBO bid at the last minute traded
    customProperties:
    - property: unit
      value: USD
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: LastBidTime
    logicalType: time
    logicalTypeOptions:
      format: HH:MM:SS.mmm
    physicalType: string (csv text)
    description: Timestamp of LastBidPrice; sample shows values from 09:30 to 15:59, so it can be hours
      stale
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: LastMidPrice
    logicalType: number
    physicalType: decimal (csv text)
    description: Option NBBO mid-price at the last minute traded; (LastBid+LastAsk)/2 in sample; input
      price for implied vol
    customProperties:
    - property: unit
      value: USD
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: LastAskPrice
    logicalType: number
    physicalType: decimal (csv text)
    description: Option NBBO ask at the last minute traded
    customProperties:
    - property: unit
      value: USD
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: LastAskTime
    logicalType: time
    logicalTypeOptions:
      format: HH:MM:SS.mmm
    physicalType: string (csv text)
    description: Timestamp of LastAskPrice
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: MidImpliedVol
    logicalType: number
    physicalType: decimal (csv text)
    description: Implied volatility solved from LastMidPrice, or estimated per ImpliedVolConvergence
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: MidTheoPrice
    logicalType: number
    physicalType: decimal (csv text)
    description: Model theoretical price corresponding to LastMidPrice
    required: true
    customProperties:
    - property: unit
      value: USD
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: MidDelta
    logicalType: number
    physicalType: decimal (csv text)
    description: Change in option price per unit change in underlying price
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: MidGamma
    logicalType: number
    physicalType: decimal (csv text)
    description: Change in delta per unit change in underlying price
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: MidTheta
    logicalType: number
    physicalType: decimal (csv text)
    description: Change in option value with time; guide says decay per day; sample negative for long
      options
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: MidVega
    logicalType: number
    physicalType: decimal (csv text)
    description: Change in option price per volatility change; sample scale matches 1 vol point (0.01)
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: MidRho
    logicalType: number
    physicalType: decimal (csv text)
    description: Change in option price per risk-free rate change; sample scale matches 1 percentage point
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: ImpliedVolConvergence
    logicalType: string
    physicalType: string (csv text)
    description: 'Code for how MidImpliedVol was obtained: converged, interpolated, put-call pair, extrapolated
      or failed'
    required: true
    enum:
    - value: Converged
      label: IV solved within the pricing model
    - value: IntrVal_LinInterp
      label: Bid below intrinsic value; IV linearly interpolated from nearby strikes
    - value: SmallBid_LinInterp
      label: Bid <= $0.01; IV linearly interpolated
    - value: Failed_LinInterp
      label: IV solve failed; IV linearly interpolated
    - value: IntrVal_PutCallPair
      label: Bid below intrinsic value; IV estimated from put-call parity pair
    - value: SmallBid_PutCallPair
      label: Bid <= $0.01; IV estimated from put-call pair
    - value: Failed_PutCallPair
      label: IV solve failed; IV estimated from put-call pair
    - value: IntrVal_FlatExtrapol
      label: Bid below intrinsic value; IV from constant extrapolation
    - value: SmallBid_FlatExtrapol
      label: Bid <= $0.01; IV from constant extrapolation
    - value: Failed_FlatExtrapol
      label: IV solve failed; IV from constant extrapolation
    - value: Failed
      label: IV could not be calculated or estimated
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  quality:
  - id: row_count_positive
    metric: rowCount
    mustBeGreaterThan: 0
    dimension: completeness
    severity: error
    description: Every delivered partition (trade date, or snapshot) carries at least one row.
  - id: primary_key_unique
    metric: duplicateValues
    mustBe: 0
    arguments:
      properties:
      - TradeDate
      - Ticker
      - CallPut
      - Strike
      - Expiration
    dimension: uniqueness
    severity: error
    description: The declared primary key is unique within each delivered partition (one file or table
      snapshot).
support:
- channel: algoseek-support
  tool: email
  url: mailto:support@algoseek.com
  scope: issues
  description: Vendor support for data defects, missing days, and entitlement problems.
team:
  name: AlphaSwarm data engineering
slaProperties:
- id: retention
  property: retention
  value: license-term
  description: Retention of landed copies is bounded by the AlgoSeek license; purge on termination.
  driver: regulatory
customProperties:
- property: vendor
  value: AlgoSeek
- property: vendorDataGroup
  value: us-equity-opt
- property: vendorDatasetTextId
  value: opt_greeks_daily
- property: vendorSampleUrl
  value: https://as-metadata-services-assets.s3.amazonaws.com/sample_data/cloud_storage/opt_greeks_daily.csv
- property: assetClass
  value: option
- property: venues
  value:
  - OPRA consolidated feed (derived data)
- property: coverage
  value: US listed options on stocks, ETFs and indexes (American and European styles), derived from algoseek
    equity and options market data. Excludes VIXW options, FX options and options on OTC underlyings.
    Non-standard deliverables are not modelled (relevant fields set to zero). History start is not stated.
- property: timezone
  value: America/New_York
- property: timestampFormat
  value: LastBidTime/LastAskTime HH:MM:SS.mmm; UnderLastMidTime HH:MM
- property: sessionHours
  value: 'End-of-day: inputs are the last-minute bars of the regular session (underlying minute 15:59
    in every sample row); exact definition of ''last minute traded'' for 16:15-close index options not
    stated'
- property: priceAdjustment
  value: n/a
- property: licensedData
  value: true
- property: evidenceGrade
  value: vendor-doc
- property: knownIssues
  value:
  - Primary key is inferred; AlgoSeek's guide does not name one.
  - Update cadence and publication latency are not stated in the guide; confirm with AlgoSeek (or GET
    /v1/meta/datasets/{id}/status).
  - 'Doc discrepancy: UnderLastMidTime: guide doc type is ''decimal'' but the description is ''the minute
    bar'' and the sample is text ''HH:MM'' (15:59).'
  - 'Doc discrepancy: Guide text says the convergence field flags ''root convergence, capping, interpolation,
    or extrapolation'' but Table 2 lists 11 codes and none is a capping code.'
  - 'Doc discrepancy: Product page says metrics use the ''last-minute mid-price of each trading session'';
    the guide says ''last minute traded'' for each contract. Sample LastBidTime ranges from 09:30 to 15:59
    while UnderLastMidTime is always 15:59, so option quotes can be older than the underlying quote.'
  - 'Doc discrepancy: Product page says ''each listed US options contract''; guide says ''each traded
    contract''.'
  - 'Doc discrepancy: Guide describes Theta only as decay per day and gives no scaling for Vega/Rho; sample
    magnitudes imply vega per 1 vol point and rho per 1 percentage point (verified against Black-Scholes
    for the first sample row), which the guide text (10 bp rate bump, 100 bp vol bump) does not state
    as the reporting scale.'
  - 'Doc discrepancy: Guide says rows correspond to ''individual events'' (boilerplate); each row is a
    contract-day.'
  - 'Doc discrepancy: Guide cover says ''US Options Daily Analytics Guide'' but the running header says
    ''US Options Analytics EOD Guide''.'
  - 'Doc discrepancy: Guide columns match the 23-column sample header exactly, in the same order. Column
    is named Expiration here, ExpirationDate in the bar datasets.'
contractCreatedTs: '2026-11-02T00:00:00Z'
