{"openapi":"3.1.0","info":{"title":"Veritas Data API","description":"Company-confirmed and cadence-estimated earnings report dates for US small, mid, large and mega caps, built only from SEC EDGAR and company announcements. Every date carries its source URL.","version":"0.3.0"},"paths":{"/health/live":{"get":{"summary":"Health Live","description":"Liveness: this process can reach the database. Railway's deploy healthcheck uses this answer.","operationId":"health_live_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Live Health Live Get"}}}}}}},"/health":{"get":{"summary":"Health","description":"Strict health for uptime monitors: 503 if the DB is unreachable, the worker heartbeat is older\nthan 10 minutes, or no full refresh has succeeded in 36 hours. The body says which.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/status.json":{"get":{"summary":"Status Json","description":"Public status: component states, last/next job runs, data counters. No secrets, no customer data.","operationId":"status_json_status_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Status Json Status Json Get"}}}}}}},"/v1/next/{ticker}":{"get":{"summary":"Next Event","description":"Next earnings event for a ticker: date, BMO/AMC, confirmed vs estimated, source URL.","operationId":"next_event_v1_next__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Next Event V1 Next  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/history/{ticker}":{"get":{"summary":"History","description":"Past release dates and timing, each linked to the 8-K Item 2.02 on EDGAR.","operationId":"history_v1_history__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response History V1 History  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/company/{ticker}":{"get":{"summary":"Company","description":"Reference data: CIK, exchange, public float bucket, EDGAR link.","operationId":"company_v1_company__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Company V1 Company  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages":{"get":{"summary":"Packages Catalogue","description":"Public price list: plans with prices and limits, the free tier, and the market-cap buckets (labels, not entitlements).","operationId":"packages_catalogue_v1_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Packages Catalogue V1 Packages Get"}}}}}}},"/v1/signup":{"post":{"summary":"Signup","description":"Free account: one per email. Emails a key good for 100 calls in total. Asking again for the\nsame email replaces the key (usage carries over), which is also how a lost key is recovered.","operationId":"signup_v1_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_signup_v1_signup_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Signup V1 Signup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/coverage":{"get":{"summary":"Coverage All","description":"Universe coverage and the latest accuracy run: companies by cap bucket, earnings releases on\nrecord (first/last), filings stored, events by status, announcements, last refresh. Cached 10 min.","operationId":"coverage_all_v1_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Coverage All V1 Coverage Get"}}}}}}},"/v1/coverage/{ticker}":{"get":{"summary":"Coverage","description":"How far back the data goes for a ticker: first and last release on record (and per year),\nEDGAR filings stored, when we started tracking its events, date changes and announcements captured.","operationId":"coverage_v1_coverage__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Coverage V1 Coverage  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/results/{ticker}":{"get":{"summary":"Results","description":"Parsed earnings releases: reported revenue and EPS (GAAP and non-GAAP) with the sentence each came\nfrom, guidance sentences verbatim, call time, webcast, and the EDGAR exhibit URL; cross-checked against\nXBRL when the 10-Q/10-K is filed.","operationId":"results_v1_results__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":40,"minimum":1,"default":8,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Results V1 Results  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/fundamentals/{ticker}":{"get":{"summary":"Fundamentals","description":"Normalized statements per period from the company's XBRL facts: revenue, gross profit, operating and net\nincome, diluted EPS and shares, cash flow, capex, free cash flow, cash, debt, assets, liabilities, equity. Every\nnumber names its us-gaap tag and accession; nulls carry a reason.","operationId":"fundamentals_v1_fundamentals__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(quarterly|annual)$","default":"quarterly","title":"Period"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":40,"minimum":1,"default":8,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fundamentals V1 Fundamentals  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facts/{ticker}/{tag}":{"get":{"summary":"Facts","description":"Raw time series for one stored us-gaap concept (e.g. Revenues, EarningsPerShareDiluted), each value cited.","operationId":"facts_v1_facts__ticker___tag__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":400,"minimum":1,"default":40,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Facts V1 Facts  Ticker   Tag  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/insiders/{ticker}":{"get":{"summary":"Insiders","description":"Insider transactions from Form 4: owner, role, code, shares, price, holdings after, direct/indirect,\nfootnotes, filing URL. Deterministic XML parsing; nothing inferred.","operationId":"insiders_v1_insiders__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Insiders V1 Insiders  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/insiders/{ticker}/around-earnings":{"get":{"summary":"Insiders Around Earnings","description":"Insider trades in the window before and after each past report date (from the filings-backed history).","operationId":"insiders_around_earnings_v1_insiders__ticker__around_earnings_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":1,"default":30,"title":"Window Days"}},{"name":"limit_events","in":"query","required":false,"schema":{"type":"integer","maximum":40,"minimum":1,"default":8,"title":"Limit Events"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Insiders Around Earnings V1 Insiders  Ticker  Around Earnings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/filings/{ticker}":{"get":{"summary":"Filings","description":"Filing index for a company from stored EDGAR submissions: accession, form, dates, 8-K items, document URL.","operationId":"filings_v1_filings__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"form","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma-separated, e.g. 10-K,10-Q,8-K,4","title":"Form"},"description":"comma-separated, e.g. 10-K,10-Q,8-K,4"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Filings V1 Filings  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/calendar":{"get":{"summary":"Calendar","description":"Events in a date window for every company in the universe. Filter by status and cap.","operationId":"calendar_v1_calendar_get","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date","title":"From"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date","title":"To"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma-separated: estimated,confirmed,conflict,reported","title":"Status"},"description":"comma-separated: estimated,confirmed,conflict,reported"},{"name":"cap","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma-separated filter: small,mid,large,mega (default: all)","title":"Cap"},"description":"comma-separated filter: small,mid,large,mega (default: all)"},{"name":"timing","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"BMO | AMC | DURING | UNKNOWN","title":"Timing"},"description":"BMO | AMC | DURING | UNKNOWN"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Calendar V1 Calendar Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/changes":{"get":{"summary":"Changes","description":"Dates that moved, got confirmed, went to conflict, or were reported since `since`.","operationId":"changes_v1_changes_get","parameters":[{"name":"since","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"ISO timestamp; changes after this instant","title":"Since"},"description":"ISO timestamp; changes after this instant"},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"}},{"name":"cap","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma-separated filter: small,mid,large,mega (default: all)","title":"Cap"},"description":"comma-separated filter: small,mid,large,mega (default: all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Changes V1 Changes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/quote":{"get":{"summary":"Checkout Quote","description":"Monthly price for a plan.","operationId":"checkout_quote_v1_checkout_quote_get","parameters":[{"name":"plan","in":"query","required":false,"schema":{"type":"string","default":"trader","title":"Plan"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Checkout Quote V1 Checkout Quote Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout":{"post":{"summary":"Checkout","description":"Start a Stripe Checkout for the signed-in user (session cookie + X-CSRF-Token header from /buy/).\nReturns {url}; send the buyer there. The key is attached to the account by the webhook.","operationId":"checkout_v1_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_checkout_v1_checkout_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Checkout V1 Checkout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/{session_id}/key":{"get":{"summary":"Checkout Key","description":"The key bought in this checkout, shown once. state: ready | shown | pending.","operationId":"checkout_key_v1_checkout__session_id__key_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Checkout Key V1 Checkout  Session Id  Key Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/portal":{"post":{"summary":"Billing Portal","description":"Link to Stripe's customer portal: update card, see invoices, cancel.","operationId":"billing_portal_v1_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Billing Portal V1 Billing Portal Post"}}}}}}}},"components":{"schemas":{"Body_checkout_v1_checkout_post":{"properties":{"plan":{"type":"string","title":"Plan","default":"trader"}},"type":"object","title":"Body_checkout_v1_checkout_post"},"Body_signup_v1_signup_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_signup_v1_signup_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}