{"basePath":"/api","definitions":{"model.APIError":{"properties":{"code":{"example":"RESOURCE_NOT_FOUND","type":"string"},"details":{"items":{"$ref":"#/definitions/model.APIErrorDetail"},"type":"array"},"docs_url":{"type":"string"},"examples":{"items":{"type":"string"},"type":"array"},"hint":{"type":"string"},"message":{"example":"The requested resource was not found.","type":"string"},"suggestions":{"items":{"type":"string"},"type":"array"}},"type":"object"},"model.APIErrorDetail":{"properties":{"field":{"type":"string"},"got":{"type":"string"},"reason":{"type":"string"}},"type":"object"},"model.APIResponse":{"properties":{"data":{},"error":{"$ref":"#/definitions/model.APIError"},"metadata":{},"pagination":{},"request_id":{"type":"string"},"success":{"type":"boolean"}},"type":"object"},"model.AllocationBreakdown":{"properties":{"allocation_name":{"description":"e.g., \"Investors\", \"Team, Future Team + Advisors\"","type":"string"},"cliff_amount":{"description":"Amount of tokens in this allocation","type":"number"},"cliff_value":{"description":"Value in USD","type":"number"},"reference_price":{"description":"Reference price used for calculation","type":"number"},"reference_price_updated_time":{"description":"When reference price was updated","type":"string"},"standard_allocation_name":{"description":"e.g., \"Private Investors\", \"Founder / Team\"","type":"string"},"unlock_date":{"description":"ISO 8601 date string","type":"string"},"unlock_precision":{"description":"e.g., \"MONTH\", \"DAY\"","type":"string"}},"type":"object"},"model.AnalyticsRow":{"type":"object"},"model.BalanceSheetData":{"properties":{"accepted_date":{"example":"2024-11-01 06:01:36","type":"string"},"account_payables":{"type":"number"},"accounts_receivables":{"type":"number"},"calendar_end_date":{"example":"2024-09-28","type":"string"},"capital_lease_obligations_current":{"type":"number"},"cash_and_cash_equivalents":{"type":"number"},"cash_and_short_term_investments":{"type":"number"},"cik":{"example":"0000320193","type":"string"},"created_at":{"type":"string"},"deferred_tax_liabilities_non_current":{"type":"number"},"filing_date":{"example":"2024-11-01","type":"string"},"fiscal_year":{"example":"2024","type":"string"},"goodwill_and_intangible_assets":{"type":"number"},"id":{"example":1,"type":"integer"},"inventory":{"type":"number"},"long_term_debt":{"type":"number"},"minority_interest":{"type":"number"},"net_debt":{"type":"number"},"observed_at":{"example":1730419200,"type":"integer"},"other_assets":{"type":"number"},"other_current_assets":{"type":"number"},"other_current_liabilities":{"type":"number"},"other_liabilities":{"type":"number"},"other_non_current_assets":{"type":"number"},"period":{"example":"Q4","type":"string"},"preferred_stock":{"type":"number"},"property_plant_equipment_net":{"type":"number"},"reported_currency":{"example":"USD","type":"string"},"retained_earnings":{"type":"number"},"short_term_debt":{"type":"number"},"symbol":{"example":"AAPL","type":"string"},"tax_payables":{"type":"number"},"total_assets":{"type":"number"},"total_current_assets":{"type":"number"},"total_current_liabilities":{"type":"number"},"total_debt":{"type":"number"},"total_equity":{"type":"number"},"total_liabilities":{"type":"number"},"total_liabilities_and_total_equity":{"type":"number"},"total_non_current_assets":{"type":"number"},"total_non_current_liabilities":{"type":"number"},"total_payables":{"type":"number"},"total_stockholders_equity":{"type":"number"},"updated_at":{"type":"string"}},"type":"object"},"model.CashFlowData":{"properties":{"accepted_date":{"example":"2024-11-01 06:01:36","type":"string"},"acquisitions_net":{"type":"number"},"calendar_end_date":{"example":"2024-09-28","type":"string"},"capital_expenditure":{"type":"number"},"cash_at_beginning_of_period":{"type":"number"},"cash_at_end_of_period":{"type":"number"},"change_in_working_capital":{"type":"number"},"cik":{"example":"0000320193","type":"string"},"created_at":{"type":"string"},"deferred_income_tax":{"type":"number"},"depreciation_and_amortization":{"type":"number"},"effect_of_forex_changes_on_cash":{"type":"number"},"filing_date":{"example":"2024-11-01","type":"string"},"fiscal_year":{"example":"2024","type":"string"},"free_cash_flow":{"type":"number"},"id":{"example":1,"type":"integer"},"net_cash_provided_by_financing_activities":{"type":"number"},"net_cash_provided_by_investing_activities":{"type":"number"},"net_cash_provided_by_operating_activities":{"type":"number"},"net_change_in_cash":{"type":"number"},"net_debt_issuance":{"type":"number"},"net_dividends_paid":{"type":"number"},"net_income":{"type":"number"},"net_stock_issuance":{"type":"number"},"observed_at":{"example":1730419200,"type":"integer"},"operating_cash_flow":{"type":"number"},"other_financing_activities":{"type":"number"},"other_investing_activities":{"type":"number"},"other_non_cash_items":{"type":"number"},"period":{"example":"Q4","type":"string"},"reported_currency":{"example":"USD","type":"string"},"symbol":{"example":"AAPL","type":"string"},"updated_at":{"type":"string"}},"type":"object"},"model.ChannelCommentaryItemRef":{"properties":{"endpoint":{"description":"Endpoint is the path of the endpoint that serves the row:\n\"/api/v1/social-feeds/x/search\", \"/api/v1/other/podcast/transcripts\",\n\"/api/v1/stocks/tv-news\" or \"/api/v1/stocks/market-news\".","type":"string"},"id":{"description":"ID is that row's key exactly as that endpoint returns it, written as a string: the\npost's platform_id, the transcript's id, the story_id, or the article's id.","type":"string"}},"type":"object"},"model.ChannelCommentaryPerson":{"properties":{"id":{"description":"ID is the person registry's id, the same one /api/v1/persons answers with.","type":"string"},"name":{"description":"Name is the registry's display_name, the name /api/v1/persons answers with; null when\nthe registry has no name for the person.","type":"string"}},"type":"object"},"model.ChannelCommentarySpeaker":{"properties":{"attribution_source":{"description":"AttributionSource is how the name was reached: intro_selfstated, intro_introduced,\nsignoff, title, websearch, or adjudicated. Per voice, since one video mixes them.","type":"string"},"confidence":{"description":"Confidence runs 0..1. Below 0.4 is already dropped; at or above 0.7 use it, between\nthe two show it as uncertain. An entry stored without one stays and reports 0.","type":"number"},"name":{"description":"Name is the spelling found on a source, not the one in the audio transcript.","type":"string"},"person_id":{"description":"PersonID is the person registry id, as /api/v1/persons answers with it. Absent when the\nname matched no one in the registry: the name was heard, and nothing says who it is.","type":"string"},"role":{"description":"Role is host, guest, or clip: the show plays a recording of this person made somewhere\nelse, and they were not in the video.","enum":["host","guest","clip"],"example":"guest","type":"string"},"unknown_turn_indexes":{"description":"UnknownTurnIndexes are the zero-based positions, in turns, of turns of this voice that\ncannot be attributed to the person it names.","items":{"type":"integer"},"type":"array"}},"type":"object"},"model.ChannelCommentaryTurn":{"properties":{"end_sec":{"description":"EndSec is the end of the turn, in seconds from the start of the video.","type":"number"},"speaker":{"description":"Speaker is who said the turn: the name of the voice's entry in resolved_speakers. A\nvoice with no entry there (it was given no name, or a name below 0.4) shows its voice\nlabel, such as \"spk 3\", and so does a turn that the entry lists in\nunknown_turn_indexes.","example":"Arthur Hayes","type":"string"},"start_sec":{"description":"StartSec is the start of the turn, in seconds from the start of the video.","type":"number"},"text":{"description":"Text is what the voice said in this turn.","type":"string"},"voice":{"description":"Voice is the voice's label in this video, such as \"spk 3\", whether or not speaker\nshows a name. It is a key of resolved_speakers when the voice was given a name, and the\nvalue quote_speaker takes.","example":"spk 3","type":"string"}},"type":"object"},"model.CliffUnlocks":{"properties":{"allocation_breakdown":{"description":"Breakdown by allocation","items":{"$ref":"#/definitions/model.AllocationBreakdown"},"type":"array"},"cliff_amount":{"description":"Total cliff amount","type":"number"},"cliff_value":{"description":"Total cliff value in USD","type":"number"},"value_to_market_cap":{"description":"Percentage of market cap","type":"number"}},"type":"object"},"model.CommodityData":{"properties":{"change":{"example":6.25,"type":"number"},"change_percent":{"example":0.3,"type":"number"},"close":{"example":2056.5,"type":"number"},"date":{"example":"2024-01-01","type":"string"},"high":{"example":2065.89,"type":"number"},"low":{"example":2042.15,"type":"number"},"open":{"example":2050.25,"type":"number"},"symbol":{"example":"HEUSX","type":"string"},"volume":{"example":1234567,"type":"integer"},"vwap":{"example":2053.45,"type":"number"}},"type":"object"},"model.CommoditySymbol":{"properties":{"currency":{"example":"USX","type":"string"},"exchange":{"example":"CME","type":"string"},"name":{"example":"Lean Hogs Futures","type":"string"},"symbol":{"example":"HEUSX","type":"string"},"trade_month":{"example":"Dec","type":"string"}},"type":"object"},"model.CompanyDetail":{"properties":{"ceo":{"example":"Jensen Huang","type":"string"},"cik":{"example":"0001045810","type":"string"},"company_description":{"example":"NVIDIA Corporation provides graphics and compute solutions.","type":"string"},"country":{"example":"United States","type":"string"},"employees":{"example":29600,"type":"integer"},"exchange":{"example":"NASDAQ","type":"string"},"exchange_short_name":{"example":"NASDAQ","type":"string"},"industry":{"example":"Semiconductors","type":"string"},"ipo_date":{"example":"1999-01-22","type":"string"},"is_adr":{"example":false,"type":"boolean"},"is_etf":{"example":false,"type":"boolean"},"is_fund":{"example":false,"type":"boolean"},"is_listed":{"example":true,"type":"boolean"},"keywords":{"description":"Keywords are the X (Twitter) search terms for the company, ordered\nstable-identity terms first ($CASHTAG, public name, key products / CEO /\nbrands) then the weekly-refreshed news-driven terms. Coverage is the\nseeded US equity universe; symbols outside it (non-US listings,\nnewly-added tickers) get an empty list. Always present, never null.","example":["$NVDA","NVIDIA","Jensen Huang","Blackwell GPU"],"items":{"type":"string"},"type":"array"},"logo":{"example":"https://example.com/logo.png","type":"string"},"name":{"example":"NVIDIA Corporation","type":"string"},"sector":{"example":"Technology","type":"string"},"symbol":{"example":"NVDA","type":"string"},"website":{"example":"https://www.nvidia.com","type":"string"}},"type":"object"},"model.CompanyExecutiveInfo":{"properties":{"accepted_date":{"type":"string"},"all_other_compensation":{"type":"integer"},"bonus":{"type":"integer"},"cik":{"type":"string"},"company_name":{"type":"string"},"filing_date":{"type":"string"},"incentive_plan_compensation":{"type":"integer"},"link":{"type":"string"},"name_and_position":{"type":"string"},"option_award":{"type":"integer"},"salary":{"type":"integer"},"stock_award":{"type":"integer"},"symbol":{"type":"string"},"total":{"type":"integer"},"year":{"type":"integer"}},"type":"object"},"model.CompanyHolderInfo":{"properties":{"avg_price_paid":{"example":17.65,"type":"number"},"calendar_end_date":{"example":"2014-06-30","type":"string"},"change_in_market_value":{"example":5250000,"type":"number"},"change_in_market_value_percentage":{"example":24.3056,"type":"number"},"change_in_ownership":{"example":0.0007,"type":"number"},"change_in_ownership_percentage":{"example":16.3377,"type":"number"},"change_in_performance":{"example":-939186,"type":"integer"},"change_in_shares_number":{"example":176300,"type":"integer"},"change_in_shares_number_percentage":{"example":16.3399,"type":"number"},"change_in_weight":{"example":0.0066,"type":"number"},"change_in_weight_percentage":{"example":17.177,"type":"number"},"cik":{"example":"0001126328","type":"string"},"filing_date":{"example":"2014-08-12","type":"string"},"first_added":{"example":"2005-12-31","type":"string"},"holding_period":{"example":35,"type":"integer"},"industry_title":{"example":"SEMICONDUCTORS \u0026 RELATED DEVICES","type":"string"},"investment_discretion":{"example":"DFND","type":"string"},"investor_name":{"example":"PRINCIPAL FINANCIAL GROUP INC","type":"string"},"is_counted_for_performance":{"example":true,"type":"boolean"},"is_new":{"example":false,"type":"boolean"},"is_sold_out":{"example":false,"type":"boolean"},"last_market_value":{"example":21600000,"type":"number"},"last_ownership":{"example":0.0042,"type":"number"},"last_performance":{"example":2417356,"type":"integer"},"last_shares_number":{"example":1078956,"type":"integer"},"last_weight":{"example":0.0385,"type":"number"},"market_value":{"example":26850000,"type":"number"},"observed_at":{"example":1407902400,"type":"integer"},"ownership":{"example":0.0048,"type":"number"},"performance":{"example":1478169,"type":"integer"},"performance_percentage":{"example":6.8434,"type":"number"},"put_call_share":{"example":"Share","type":"string"},"quarter_end_price":{"example":21.39,"type":"number"},"security_cusip":{"example":"874039100","type":"string"},"security_name":{"example":"TAIWAN SEMICONDUCTOR MFG LTD","type":"string"},"shares_number":{"example":1255256,"type":"integer"},"shares_type":{"example":"SH","type":"string"},"symbol":{"example":"TSM","type":"string"},"type_of_security":{"example":"SPONSORED ADR","type":"string"},"weight":{"example":0.0452,"type":"number"}},"type":"object"},"model.CompanyPriceConsensus":{"properties":{"symbol":{"example":"AAPL","type":"string"},"target_consensus":{"example":175,"type":"number"},"target_high":{"example":200,"type":"number"},"target_low":{"example":150,"type":"number"},"target_median":{"example":180,"type":"number"}},"type":"object"},"model.CompanyPriceTargetSummary":{"properties":{"all_time_avg_price_target":{"example":155,"type":"number"},"all_time_count":{"example":100,"type":"integer"},"last_month_avg_price_target":{"example":180.5,"type":"number"},"last_month_count":{"example":5,"type":"integer"},"last_quarter_avg_price_target":{"example":175.25,"type":"number"},"last_quarter_count":{"example":15,"type":"integer"},"last_year_avg_price_target":{"example":165.75,"type":"number"},"last_year_count":{"example":50,"type":"integer"},"publishers":{"example":"Goldman Sachs, Morgan Stanley","type":"string"},"symbol":{"example":"AAPL","type":"string"}},"type":"object"},"model.ContractDetails":{"properties":{"contract_type":{"type":"string"},"exercise_style":{"type":"string"},"expiration_date":{"type":"string"},"shares_per_contract":{"type":"integer"},"strike_price":{"type":"number"},"symbol":{"type":"string"}},"type":"object"},"model.CountryWeighting":{"properties":{"country":{"example":"United States","type":"string"},"updated_at":{"description":"Data update time, RFC3339","example":"2025-09-09T12:09:15Z","type":"string"},"weight_percentage":{"example":"99.56%","type":"string"}},"type":"object"},"model.CrowdfundingOffering":{"properties":{"acceptance_time":{"type":"string"},"accounts_receivable_most_recent_fiscal_year":{"type":"number"},"accounts_receivable_prior_fiscal_year":{"type":"number"},"cash_and_cash_equivalent_most_recent_fiscal_year":{"type":"number"},"cash_and_cash_equivalent_prior_fiscal_year":{"type":"number"},"cik":{"type":"string"},"company_name":{"type":"string"},"compensation_amount":{"type":"string"},"cost_goods_sold_most_recent_fiscal_year":{"type":"number"},"cost_goods_sold_prior_fiscal_year":{"type":"number"},"created_at":{"type":"string"},"current_number_of_employees":{"type":"number"},"date":{"type":"string"},"filing_date":{"type":"string"},"financial_interest":{"type":"string"},"form_signification":{"type":"string"},"form_type":{"type":"string"},"industry":{"type":"string"},"intermediary_commission_cik":{"type":"string"},"intermediary_commission_file_number":{"type":"string"},"intermediary_company_name":{"type":"string"},"issuer_city":{"type":"string"},"issuer_state_or_country":{"type":"string"},"issuer_street":{"type":"string"},"issuer_website":{"type":"string"},"issuer_zip_code":{"type":"string"},"jurisdiction_organization":{"type":"string"},"legal_status_form":{"type":"string"},"long_term_debt_most_recent_fiscal_year":{"type":"number"},"long_term_debt_prior_fiscal_year":{"type":"number"},"maximum_offering_amount":{"type":"number"},"name_of_issuer":{"type":"string"},"net_income_most_recent_fiscal_year":{"type":"number"},"net_income_prior_fiscal_year":{"type":"number"},"number_of_security_offered":{"type":"integer"},"offering_amount":{"type":"number"},"offering_deadline_date":{"type":"string"},"offering_price":{"type":"number"},"over_subscription_accepted":{"type":"string"},"over_subscription_allocation_type":{"type":"string"},"revenue_most_recent_fiscal_year":{"type":"number"},"revenue_prior_fiscal_year":{"type":"number"},"security_offered_other_description":{"type":"string"},"security_offered_type":{"type":"string"},"short_term_debt_most_recent_fiscal_year":{"type":"number"},"short_term_debt_prior_fiscal_year":{"type":"number"},"taxes_paid_most_recent_fiscal_year":{"type":"number"},"taxes_paid_prior_fiscal_year":{"type":"number"},"total_asset_most_recent_fiscal_year":{"type":"number"},"total_asset_prior_fiscal_year":{"type":"number"},"updated_at":{"type":"string"},"url":{"type":"string"}},"type":"object"},"model.CryptoExchangeFlowData":{"properties":{"date":{"description":"Formatted date (YYYY-MM-DD, UTC+0)","type":"string"},"datetime":{"description":"Unix timestamp (seconds)","type":"integer"},"exchange":{"description":"Exchange name, e.g., binance","type":"string"},"inflow_mean":{"description":"Average inflow","type":"number"},"inflow_mean_ma7":{"description":"7-hour moving average inflow","type":"number"},"inflow_top10":{"description":"Top10 address inflow","type":"number"},"inflow_total":{"description":"Inflow","type":"number"},"netflow_total":{"description":"Netflow","type":"number"},"outflow_mean":{"description":"Average outflow","type":"number"},"outflow_mean_ma7":{"description":"7-hour moving average outflow","type":"number"},"outflow_top10":{"description":"Top10 address outflow","type":"number"},"outflow_total":{"description":"Outflow","type":"number"},"symbol":{"description":"Symbol, e.g., BTC, ETH","type":"string"},"window":{"description":"Time window granularity: hour/day","type":"string"}},"type":"object"},"model.CryptoHoldingInfo":{"properties":{"company_name":{"description":"Company name","type":"string"},"country":{"description":"Country","type":"string"},"symbol":{"description":"Company stock symbol","type":"string"},"token_holdings":{"additionalProperties":{"$ref":"#/definitions/model.TokenHoldingAmount"},"description":"{ \"\u003cTOKEN\u003e\": {\"amount\": \u003cfloat\u003e} }","type":"object"},"updated_at":{"description":"Data update time, RFC3339 (max updated_at across the company's token rows)","example":"2025-09-09T12:09:15Z","type":"string"}},"type":"object"},"model.CryptoMetricScreenerData":{"properties":{"date":{"description":"Date string (YYYY-MM-DD)","example":"2024-01-15","type":"string"},"metric":{"description":"Metric type identifier","example":"MARKET_CAP","type":"string"},"snapshot_time":{"description":"Snapshot time in Unix timestamp seconds","example":1705276800,"type":"integer"},"symbol":{"description":"Token symbol","example":"BTC","type":"string"},"value":{"description":"Metric value","example":100000000,"type":"number"}},"type":"object"},"model.CryptoMetricScreenerTimeRangeData":{"properties":{"metric":{"description":"Metric type identifier","example":"MARKET_CAP","type":"string"},"snapshot_time":{"description":"Snapshot time in Unix timestamp seconds","example":1705276800,"type":"integer"},"symbol":{"description":"Token symbol","example":"BTC","type":"string"},"value":{"description":"Metric value","example":100000000,"type":"number"}},"type":"object"},"model.CryptoMetricScreenerTimeRangeDataItem":{"properties":{"date":{"description":"Date string (YYYY-MM-DD)","example":"2024-01-01","type":"string"},"items":{"description":"List of data items for this date","items":{"$ref":"#/definitions/model.CryptoMetricScreenerTimeRangeData"},"type":"array"}},"type":"object"},"model.CursorPagination":{"properties":{"cursor":{"type":"string"},"has_more":{"type":"boolean"},"indexed_through":{"type":"integer"},"limit":{"type":"integer"}},"type":"object"},"model.DXIPoint":{"properties":{"change":{"type":"number"},"change_pct":{"type":"number"},"date":{"type":"string"},"ma30":{"type":"number"},"ma60":{"type":"number"},"symbol":{"description":"always \"DXI\"","type":"string"},"value":{"type":"number"}},"type":"object"},"model.DailyData":{"properties":{"change":{"type":"number"},"change_percent":{"type":"number"},"close":{"type":"number"},"high":{"type":"number"},"last_updated":{"type":"integer"},"low":{"type":"number"},"open":{"type":"number"},"previous_close":{"type":"number"}},"type":"object"},"model.DarkpoolOHLCData":{"properties":{"close":{"description":"Closing price","type":"string"},"high":{"description":"Highest price","type":"string"},"low":{"description":"Lowest price","type":"string"},"open":{"description":"Opening price","type":"string"},"symbol":{"description":"Stock symbol","type":"string"},"timestamp":{"description":"Hour timestamp (Unix seconds)","type":"integer"},"total_value":{"description":"Total trade value","type":"string"},"trade_count":{"description":"Number of trades","type":"integer"},"volume":{"description":"Trade volume","type":"integer"},"vwap":{"description":"Volume-weighted average price","type":"string"}},"type":"object"},"model.DiscoverXFeedHandleRequest":{"properties":{"handle":{"example":"elonmusk","type":"string"}},"required":["handle"],"type":"object"},"model.ETFHolding":{"properties":{"asset":{"example":"AAPL","type":"string"},"isin":{"example":"","type":"string"},"market_value":{"example":42967423896,"type":"number"},"name":{"example":"APPLE INC","type":"string"},"security_cusip":{"example":"037833100","type":"string"},"shares_number":{"example":177105268,"type":"integer"},"symbol":{"example":"SPY","type":"string"},"updated_at":{"description":"Data update time, RFC3339","example":"2025-09-09T12:09:15Z","type":"string"},"weight_percentage":{"example":6.504,"type":"number"}},"type":"object"},"model.ETFInfo":{"properties":{"asset_class":{"example":"Equity","type":"string"},"assets_under_management":{"example":661267310000,"type":"number"},"avg_volume":{"example":73651172,"type":"integer"},"description":{"example":"The SPDR S\u0026P 500 ETF Trust seeks to provide investment results that correspond generally to the price and yield performance of the S\u0026P 500 Index.","type":"string"},"domicile":{"example":"US","type":"string"},"etf_company":{"example":"SPDR","type":"string"},"expense_ratio":{"example":0.0945,"type":"number"},"holdings_count":{"example":503,"type":"integer"},"inception_date":{"example":"1993-01-22","type":"string"},"isin":{"example":"US78462F1030","type":"string"},"logo":{"example":"https://storage.googleapis.com/arrays-public-assets/etf/logos/SPY.svg","type":"string"},"name":{"example":"SPDR S\u0026P 500 ETF Trust","type":"string"},"nav":{"example":649.08,"type":"number"},"nav_currency":{"example":"USD","type":"string"},"sectors_list":{"items":{"$ref":"#/definitions/model.ETFSector"},"type":"array"},"security_cusip":{"example":"78462F103","type":"string"},"symbol":{"example":"SPY","type":"string"},"updated_at":{"example":"2025-09-06T02:56:15.171Z","type":"string"},"website":{"example":"https://www.ssga.com/us/en/institutional/etfs/spdr-sp-500-etf-trust-spy","type":"string"}},"type":"object"},"model.ETFSector":{"properties":{"exposure":{"example":34.62,"type":"number"},"industry":{"example":"Technology","type":"string"}},"type":"object"},"model.EarningsCalendarEvent":{"properties":{"created_at":{"type":"string"},"date":{"example":"2024-01-25","type":"string"},"fiscal_date_ending":{"type":"string"},"id":{"type":"integer"},"symbol":{"type":"string"},"time":{"type":"string"},"updated_at":{"type":"string"},"updated_from_date":{"type":"string"}},"type":"object"},"model.EarningsTranscriptData":{"properties":{"date":{"description":"Earnings-call date (YYYY-MM-DD, UTC); \"\" if unknown","type":"string"},"participants":{"description":"Participants are the people who speak, once each, in order of first\nspeaking; absent for transcripts converted before they were recorded.","items":{"$ref":"#/definitions/model.TranscriptParticipant"},"type":"array"},"published_at":{"description":"PublishedAt is the transcript publication moment (storyDateTime) as an\nRFC3339 UTC timestamp, e.g. \"2024-10-31T20:54:36Z\". It carries the\ntime-of-day, so callers can tell whether the call was pre- or post-market.\nEmpty string when unknown (always present, matching the sibling `date`).","type":"string"},"quarter":{"type":"string"},"symbol":{"type":"string"},"transcript":{"items":{"$ref":"#/definitions/model.SectionEntry"},"type":"array"}},"type":"object"},"model.EconomicIndicatorObservation":{"properties":{"date":{"description":"Observation date (ISO 8601)","example":"2024-01-15","type":"string"},"observed_at":{"description":"Observation publish timestamp (Unix timestamp in seconds)","example":1714041000,"type":"integer"},"release_date":{"description":"First release date (ISO 8601)","example":"2024-04-25","type":"string"},"value":{"description":"Indicator value","example":28284.498,"type":"number"}},"type":"object"},"model.EconomicIndicatorSeries":{"properties":{"frequency":{"description":"Data frequency","example":"Quarterly","type":"string"},"name":{"description":"Series ID (e.g., \"GDP\")","example":"GDP","type":"string"},"notes":{"description":"Series notes/description","type":"string"},"seasonal_adjustment":{"description":"Seasonal adjustment type","example":"Seasonally Adjusted Annual Rate","type":"string"},"title":{"description":"Series title","example":"Gross Domestic Product","type":"string"},"units":{"description":"Data units","example":"Billions of Dollars","type":"string"}},"type":"object"},"model.EconomicIndicatorsDataV2":{"properties":{"observations":{"description":"Observation data points","items":{"$ref":"#/definitions/model.EconomicIndicatorObservation"},"type":"array"},"series":{"allOf":[{"$ref":"#/definitions/model.EconomicIndicatorSeries"}],"description":"Series metadata"}},"type":"object"},"model.EventTranscript":{"properties":{"event_date":{"description":"EventDate is the event's calendar date (YYYY-MM-DD, UTC); \"\" if unknown.","type":"string"},"event_datetime":{"description":"EventDatetime is the meeting's actual start moment, as an RFC3339 UTC\ntimestamp; \"\" if unknown.","type":"string"},"event_id":{"type":"string"},"event_type":{"type":"string"},"fiscal_quarter":{"example":"Q3","type":"string"},"fiscal_year":{"description":"FiscalYear / FiscalQuarter are non-nil ONLY for Earnings events: a\nnon-Earnings event has no fiscal-period concept at all (not merely an\nempty one), so these serialize as JSON null — deliberately no\n`omitempty` — rather than being omitted or emitted as \"\".\n\nFiscalQuarter is Q-prefixed (\"Q3\"), matching CLAUDE.md's standard\nfiscal_quarter vocabulary and GET /stocks/earnings-transcript's input,\nso the two endpoints can be correlated without converting. FactSet's\nown \"Q5\" label reaches callers unchanged\n(ingestionhandler.fiscalQuarterLabel).","type":"string"},"headline":{"type":"string"},"participants":{"description":"Participants are the people who speak, once each, in order of first\nspeaking; absent for transcripts converted before they were recorded.","items":{"$ref":"#/definitions/model.TranscriptParticipant"},"type":"array"},"published_at":{"description":"PublishedAt is the transcript publication moment (story_date_time), as\nan RFC3339 UTC timestamp; \"\" if unknown.","type":"string"},"symbol":{"type":"string"},"transcript":{"description":"Transcript and Participants are populated by the detail endpoint, and\nby the list endpoint only with include_transcript; otherwise nil so\n`omitempty` drops the keys (design doc §6.2).","items":{"$ref":"#/definitions/model.SectionEntry"},"type":"array"},"transcript_type":{"description":"TranscriptType is the FactSet type of the served version: Corrected\n(edited), Raw (complete but unedited) or NearRealTime (a partial draft\ntaken during the call). A Corrected version replaces a Raw one when it\narrives; most non-Earnings events never get one.","enum":["Corrected","Raw","NearRealTime"],"example":"Corrected","type":"string"},"updated_at":{"type":"string"}},"type":"object"},"model.ExternalID":{"properties":{"type":{"description":"Type is an OPEN enum: bioguide, sec_cik, uw_politician today.","type":"string"},"value":{"type":"string"}},"type":"object"},"model.FactsetEstimateRow":{"properties":{"down":{"description":"Number of estimates decreased","example":5,"type":"integer"},"estimate_count":{"description":"Number of estimates","example":25,"type":"integer"},"estimate_date":{"description":"Estimate adjustment date (YYYY-MM-DD)","example":"2024-01-15","type":"string"},"fiscal_end_date":{"description":"Fiscal period end date (YYYY-MM-DD)","example":"2024-12-31","type":"string"},"fiscal_period":{"description":"Fiscal period (Q1=1, Q2=2, Q3=3, Q4=4)","example":1,"type":"integer"},"fiscal_year":{"description":"Issuer fiscal year (not the calendar year of fiscal_end_date)","example":2026,"type":"integer"},"fsym_id":{"description":"FactSet symbol ID","example":"MH33D6-R","type":"string"},"high":{"description":"High estimate","example":5.5,"type":"number"},"low":{"description":"Low estimate","example":5,"type":"number"},"mean":{"description":"Mean estimate","example":5.25,"type":"number"},"median":{"description":"Median estimate","example":5.2,"type":"number"},"metric":{"description":"Metric name (e.g., EPS, SALES, EBITDA)","example":"EPS","type":"string"},"observed_at":{"description":"Point-in-time observation timestamp (Unix seconds)","example":1705363200,"type":"integer"},"periodicity":{"description":"Periodicity: ANN (annual), QTR (quarterly), SEMI (semi-annual)","example":"ANN","type":"string"},"standard_deviation":{"description":"Standard deviation","example":0.15,"type":"number"},"symbol":{"description":"Stock symbol","example":"AAPL","type":"string"},"up":{"description":"Number of estimates increased","example":10,"type":"integer"}},"type":"object"},"model.FactsetGuidanceRow":{"properties":{"fiscal_end_date":{"description":"Fiscal period end date","example":"2024-12-31","type":"string"},"fiscal_period":{"description":"Fiscal period","example":1,"type":"integer"},"fiscal_year":{"description":"Issuer fiscal year (not the calendar year of fiscal_end_date)","example":2026,"type":"integer"},"fsym_id":{"description":"FactSet symbol ID","example":"MH33D6-R","type":"string"},"guidance_date":{"description":"Guidance date (YYYY-MM-DD)","example":"2024-01-15","type":"string"},"guidance_high":{"description":"Guidance high value","example":5.5,"type":"number"},"guidance_low":{"description":"Guidance low value","example":5,"type":"number"},"guidance_midpoint":{"description":"Guidance midpoint","example":5.25,"type":"number"},"guidance_range":{"description":"Guidance range string","example":"5.00 - 5.50","type":"string"},"mean_before":{"description":"Consensus mean before guidance","example":5.15,"type":"number"},"mean_surprise_amt":{"description":"Surprise amount vs mean","example":0.1,"type":"number"},"mean_surprise_amt_ratio":{"description":"Surprise ratio vs mean (decimal, not percentage)","example":0.0194,"type":"number"},"metric":{"description":"Metric name (e.g., EPS, SALES, EBITDA)","example":"EPS","type":"string"},"observed_at":{"description":"Point-in-time observation timestamp (Unix seconds)","example":1705363200,"type":"integer"},"periodicity":{"description":"Periodicity: ANN, QTR, SEMI","example":"ANN","type":"string"},"prev_high":{"description":"Previous guidance high","example":5.3,"type":"number"},"prev_low":{"description":"Previous guidance low","example":4.9,"type":"number"},"prev_midpoint":{"description":"Previous guidance midpoint","example":5.1,"type":"number"},"symbol":{"description":"Stock symbol","example":"AAPL","type":"string"}},"type":"object"},"model.FearGreedPoint":{"properties":{"time":{"description":"Formatted time (YYYY-MM-DD hh:mm:ss, UTC+0)","type":"string"},"timestamp":{"type":"integer"},"value":{"type":"number"}},"type":"object"},"model.FiscalDateData":{"properties":{"calendar_end":{"description":"End date of the fiscal quarter or year covered by the earnings report (YYYY-MM-DD)","example":"2024-03-31","type":"string"},"fiscal_quarter":{"description":"Fiscal quarter (Q1/Q2/Q3/Q4/FY)","example":"Q1","type":"string"},"fiscal_year":{"description":"Fiscal year","example":2024,"type":"integer"},"public_date":{"description":"Date when the earnings report was publicly released (YYYY-MM-DD), empty string if not available","example":"2024-04-15","type":"string"},"symbol":{"description":"Stock symbol","example":"AAPL","type":"string"}},"type":"object"},"model.ForexData":{"properties":{"change":{"example":0.0015,"type":"number"},"change_percent":{"example":0.14,"type":"number"},"close":{"example":1.0865,"type":"number"},"date":{"example":"2024-01-01","type":"string"},"high":{"example":1.0875,"type":"number"},"low":{"example":1.084,"type":"number"},"open":{"example":1.085,"type":"number"},"symbol":{"example":"EURUSD","type":"string"},"volume":{"example":1234567,"type":"integer"},"vwap":{"example":1.0858,"type":"number"}},"type":"object"},"model.ForexSymbol":{"properties":{"from_currency":{"example":"ARS","type":"string"},"from_name":{"example":"Argentine Peso","type":"string"},"symbol":{"example":"ARSMXN","type":"string"},"to_currency":{"example":"MXN","type":"string"},"to_name":{"example":"Mexican Peso","type":"string"}},"type":"object"},"model.FundingRateData":{"properties":{"funding_rate":{"description":"资金费率","type":"number"},"symbol":{"description":"交易对符号","type":"string"},"time":{"description":"Formatted time (YYYY-MM-DD hh:mm:ss, UTC+0)","type":"string"},"timestamp":{"description":"Unix时间戳（秒）","type":"integer"}},"type":"object"},"model.FundraisingRssEvent":{"properties":{"acceptance_time":{"type":"string"},"cik":{"example":"0001949154","type":"string"},"company_name":{"example":"Avlok Capital, LP - C2","type":"string"},"date":{"example":"2022-10-05T04:00:00.000Z","type":"string"},"date_of_first_sale":{"type":"string"},"duration_of_offering_is_more_than_year":{"type":"boolean"},"entity_name":{"example":"Avlok Capital, LP - C2","type":"string"},"entity_type":{"example":"Limited Partnership","type":"string"},"federal_exemptions_exclusions":{"type":"string"},"filing_date":{"example":"2022-10-05 00:00:00","type":"string"},"finders_fees":{"type":"integer"},"form_signification":{"example":"Notice of Exempt Offering of Securities","type":"string"},"form_type":{"example":"D","type":"string"},"gross_proceeds_used":{"type":"integer"},"has_non_accredited_investors":{"type":"boolean"},"incorporated_within_five_years":{"type":"boolean"},"industry_group_type":{"type":"string"},"is_amendment":{"type":"boolean"},"is_business_combination_transaction":{"type":"boolean"},"issuer_city":{"type":"string"},"issuer_phone_number":{"type":"string"},"issuer_state_or_country":{"type":"string"},"issuer_state_or_country_description":{"type":"string"},"issuer_street":{"type":"string"},"issuer_zip_code":{"type":"string"},"jurisdiction_of_incorporation":{"type":"string"},"minimum_investment_accepted":{"type":"integer"},"related_person_city":{"type":"string"},"related_person_first_name":{"type":"string"},"related_person_last_name":{"type":"string"},"related_person_relationship":{"type":"string"},"related_person_state_or_country":{"type":"string"},"related_person_state_or_country_description":{"type":"string"},"related_person_street":{"type":"string"},"related_person_zip_code":{"type":"string"},"revenue_range":{"type":"string"},"sales_commissions":{"type":"integer"},"securities_offered_are_of_equity_type":{"type":"boolean"},"total_amount_remaining":{"type":"integer"},"total_amount_sold":{"type":"integer"},"total_number_already_invested":{"type":"integer"},"total_offering_amount":{"type":"integer"},"year_of_incorporation":{"type":"string"}},"type":"object"},"model.GetBalanceSheetByTimeIntervalResponse":{"properties":{"data":{"description":"Array of balance sheet data","items":{"$ref":"#/definitions/model.BalanceSheetData"},"type":"array"},"total_count":{"description":"Total count of records","type":"integer"}},"type":"object"},"model.GetCashFlowByTimeIntervalResponse":{"properties":{"data":{"description":"Array of cash flow statement data","items":{"$ref":"#/definitions/model.CashFlowData"},"type":"array"},"total_count":{"description":"Total count of records","type":"integer"}},"type":"object"},"model.GetIncomeStatementByTimeIntervalResponse":{"properties":{"data":{"description":"Array of income statement data","items":{"$ref":"#/definitions/model.IncomeStatementData"},"type":"array"},"total_count":{"description":"Total count of records","type":"integer"}},"type":"object"},"model.GetKlineDataResponse":{"properties":{"count":{"description":"The number of data points returned in this response","type":"integer"},"cursor":{"type":"string"},"data":{"items":{"$ref":"#/definitions/model.KlineData"},"type":"array"}},"type":"object"},"model.GetMergersAcquisitionsResponse":{"properties":{"count":{"type":"integer"},"data":{"items":{"$ref":"#/definitions/model.MergersAcquisitionsData"},"type":"array"}},"type":"object"},"model.GetOptionChainResponse":{"properties":{"cursor":{"type":"string"},"results":{"items":{"$ref":"#/definitions/model.OptionContractDetail"},"type":"array"}},"type":"object"},"model.Greeks":{"properties":{"delta":{"type":"number"},"gamma":{"type":"number"},"theta":{"type":"number"},"vega":{"type":"number"}},"type":"object"},"model.HyperliquidFundingRate":{"properties":{"funding_rate":{"type":"number"},"timestamp":{"description":"unix seconds, UTC; settlement instant","type":"integer"}},"type":"object"},"model.IncomeStatementData":{"properties":{"accepted_date":{"example":"2024-11-01 06:01:36","type":"string"},"bottom_line_net_income":{"type":"number"},"calendar_end_date":{"example":"2024-09-28","type":"string"},"cik":{"example":"0000320193","type":"string"},"cost_and_expenses":{"type":"number"},"cost_of_revenue":{"type":"number"},"created_at":{"type":"string"},"depreciation_and_amortization":{"type":"number"},"ebit":{"type":"number"},"ebitda":{"type":"number"},"eps":{"type":"number"},"eps_diluted":{"type":"number"},"filing_date":{"example":"2024-11-01","type":"string"},"fiscal_year":{"example":"2024","type":"string"},"gross_profit":{"type":"number"},"gross_profit_ratio":{"type":"number"},"id":{"example":1,"type":"integer"},"income_before_tax":{"type":"number"},"income_tax_expense":{"type":"number"},"interest_expense":{"type":"number"},"interest_income":{"type":"number"},"net_income":{"type":"number"},"net_income_deductions":{"type":"number"},"net_interest_income":{"type":"number"},"net_profit_ratio":{"type":"number"},"non_operating_income_excluding_interest":{"type":"number"},"observed_at":{"example":1730419200,"type":"integer"},"operating_expenses":{"type":"number"},"operating_income":{"type":"number"},"operating_profit_ratio":{"type":"number"},"other_adjustments_to_net_income":{"type":"number"},"other_expenses":{"type":"number"},"period":{"example":"Q4","type":"string"},"reported_currency":{"example":"USD","type":"string"},"revenue":{"type":"number"},"symbol":{"example":"AAPL","type":"string"},"total_other_income_expenses_net":{"type":"number"},"updated_at":{"type":"string"},"weighted_average_shs_out":{"type":"number"},"weighted_average_shs_out_dil":{"type":"number"}},"type":"object"},"model.IndexData":{"properties":{"change":{"example":6.25,"type":"number"},"change_percent":{"example":0.13,"type":"number"},"close":{"example":4756.5,"type":"number"},"date":{"example":"2024-01-01","type":"string"},"high":{"example":4765.89,"type":"number"},"low":{"example":4742.15,"type":"number"},"open":{"example":4750.25,"type":"number"},"symbol":{"example":"^SPX","type":"string"},"volume":{"example":1234567,"type":"integer"},"vwap":{"example":4753.45,"type":"number"}},"type":"object"},"model.IndexSymbol":{"properties":{"created_at":{"type":"string"},"currency":{"type":"string"},"exchange":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"symbol":{"type":"string"},"updated_at":{"type":"string"}},"type":"object"},"model.InflowCDDData":{"properties":{"date":{"type":"string"},"inflow_cdd":{"type":"number"},"observed_at":{"type":"integer"},"symbol":{"type":"string"}},"type":"object"},"model.InstrumentGroup":{"properties":{"instrument_type":{"type":"string"},"pairs":{"items":{"$ref":"#/definitions/model.TradingPairDetail"},"type":"array"}},"type":"object"},"model.IpoCalendarConfirmedEvent":{"properties":{"accepted_date":{"example":"2025-01-31 15:04:42","type":"string"},"cik":{"example":"0001936702","type":"string"},"effectiveness_date":{"example":"2025-01-31","type":"string"},"filing_date":{"example":"2025-01-31","type":"string"},"form":{"example":"CERT","type":"string"},"symbol":{"example":"CETUU","type":"string"},"url":{"example":"https://www.sec.gov/Archives/edgar/data/1936702/000135445723000056/8A_Cert_CETU.pdf","type":"string"}},"type":"object"},"model.IpoCalendarEvent":{"properties":{"actions":{"example":"Expected","type":"string"},"company":{"example":"Pacer Funds Trust","type":"string"},"daa":{"example":"2025-02-03T05:00:00.000Z","type":"string"},"date":{"example":"2025-02-03","type":"string"},"exchange":{"example":"NYSE","type":"string"},"market_cap":{"example":"$500M","type":"string"},"price_range":{"example":"$15.00 - $17.00","type":"string"},"shares":{"example":1000000,"type":"integer"},"symbol":{"example":"PEVC","type":"string"}},"type":"object"},"model.KlineData":{"properties":{"price_close":{"type":"number"},"price_high":{"type":"number"},"price_low":{"type":"number"},"price_open":{"type":"number"},"time_close":{"type":"integer"},"time_open":{"type":"integer"},"time_period_end":{"type":"string"},"time_period_start":{"type":"string"},"trades_count":{"type":"integer"},"volume_traded":{"type":"number"}},"type":"object"},"model.LeverageRatioData":{"properties":{"leverage_ratio":{"type":"number"},"symbol":{"type":"string"},"time":{"type":"string"},"timestamp":{"type":"integer"}},"type":"object"},"model.LinearUnlocks":{"properties":{"allocation_breakdown":{"description":"Breakdown by allocation","items":{"$ref":"#/definitions/model.AllocationBreakdown"},"type":"array"},"linear_amount":{"description":"Total linear amount","type":"number"},"linear_value":{"description":"Total linear value in USD","type":"number"},"value_to_market_cap":{"description":"Percentage of market cap","type":"number"}},"type":"object"},"model.LongShortRatioData":{"properties":{"long_account_ratio":{"description":"多单账户占比","type":"number"},"long_short_ratio":{"description":"多空比率","type":"number"},"short_account_ratio":{"description":"空单账户占比","type":"number"},"symbol":{"type":"string"},"time":{"description":"Formatted time (YYYY-MM-DD hh:mm:ss, UTC+0)","type":"string"},"timestamp":{"description":"Unix时间戳（秒）","type":"integer"}},"type":"object"},"model.MVRVRatioData":{"properties":{"mvrv_ratio":{"type":"number"},"symbol":{"type":"string"},"time":{"type":"string"},"timestamp":{"type":"integer"}},"type":"object"},"model.MarketKlineData":{"properties":{"price_close":{"type":"number"},"price_high":{"type":"number"},"price_low":{"type":"number"},"price_open":{"type":"number"},"time_close":{"type":"string"},"time_open":{"type":"string"},"volume":{"type":"number"}},"type":"object"},"model.MarketMetricValue":{"properties":{"date":{"description":"Formatted date (YYYY-MM-DD HH:mm:ss, UTC+0)","example":"2024-01-01 12:00:00","type":"string"},"metric_component":{"example":"UPPER","type":"string"},"observed_at":{"example":1672531200,"type":"integer"},"value":{"description":"Metric value (null if not available)","example":150.25,"type":"number"}},"type":"object"},"model.MarketNewsArticle":{"properties":{"authors":{"items":{"type":"string"},"type":"array"},"banner_image":{"type":"string"},"category_within_source":{"type":"string"},"id":{"type":"integer"},"overall_sentiment_label":{"type":"string"},"overall_sentiment_score":{"type":"number"},"publish_time":{"type":"integer"},"source":{"type":"string"},"source_domain":{"description":"SourceDomain is the host of the article URL, lowercased, with one leading\n\"www.\" removed and every other subdomain kept (e.g. ca.finance.yahoo.com).\nOmitted when the URL has no host. Use source for the publisher name.","type":"string"},"summary":{"type":"string"},"tickers":{"items":{"$ref":"#/definitions/model.MarketNewsTickerEntry"},"type":"array"},"time_published":{"type":"string"},"title":{"type":"string"},"topics":{"items":{"$ref":"#/definitions/model.MarketNewsTopicEntry"},"type":"array"},"updated_at":{"description":"UpdatedAt is the article content-change time in update-window responses,\nRFC3339 UTC with fractional seconds. Title, summary, source, publish_time and\nsymbol/topic membership advance it; sentiment and relevance enrichment do\nnot. Historical migrated times are baselines. Omitted when not supplied.","type":"string"},"url":{"type":"string"}},"type":"object"},"model.MarketNewsTickerEntry":{"properties":{"relevance_score":{"type":"string"},"ticker":{"type":"string"},"ticker_sentiment_label":{"type":"string"},"ticker_sentiment_score":{"type":"string"}},"type":"object"},"model.MarketNewsTopicEntry":{"properties":{"relevance_score":{"type":"string"},"topic":{"type":"string"}},"type":"object"},"model.MarketSymbolMetricData":{"properties":{"symbol":{"example":"AAPL","type":"string"},"type":{"example":"MA_20","type":"string"},"values":{"items":{"$ref":"#/definitions/model.MarketMetricValue"},"type":"array"}},"type":"object"},"model.MergersAcquisitionsData":{"properties":{"acceptance_time":{"example":"2024-10-18 16:39:48","type":"string"},"cik":{"example":"0000314489","type":"string"},"company_name":{"example":"FIRST BUSEY CORP /NV/","type":"string"},"symbol":{"example":"BUSE","type":"string"},"targeted_cik":{"example":"0001458412","type":"string"},"targeted_company_name":{"example":"CROSSFIRST BANKSHARES, INC.","type":"string"},"targeted_symbol":{"example":"CFB","type":"string"},"transaction_date":{"example":"2024-10-18","type":"string"},"url":{"example":"https://www.sec.gov/Archives/edgar/data/314489/000110465924109878/tm2423752-2_s4.htm","type":"string"}},"type":"object"},"model.MetricScreenerData":{"properties":{"date":{"description":"Date string (YYYY-MM-DD)","example":"2024-01-15","type":"string"},"metric":{"description":"Metric type","example":"PE_RATIO","type":"string"},"snapshot_time":{"description":"Snapshot time (Unix timestamp seconds, UTC)","example":1705276800,"type":"integer"},"symbol":{"description":"Stock symbol","example":"AAPL","type":"string"},"value":{"description":"Metric value","example":28.5,"type":"number"}},"type":"object"},"model.MetricScreenerTimeRangeData":{"properties":{"metric":{"description":"Metric type","example":"PE_RATIO","type":"string"},"snapshot_time":{"description":"Snapshot time (Unix timestamp seconds, UTC)","example":1705276800,"type":"integer"},"symbol":{"description":"Stock symbol","example":"AAPL","type":"string"},"value":{"description":"Metric value","example":28.5,"type":"number"}},"type":"object"},"model.MetricScreenerTimeRangeDataItem":{"properties":{"date":{"description":"Date in ISO 8601 format (YYYY-MM-DD)","example":"2024-01-01","type":"string"},"items":{"description":"All stock data for this date","items":{"$ref":"#/definitions/model.MetricScreenerTimeRangeData"},"type":"array"}},"type":"object"},"model.MinerToExchangeData":{"properties":{"date":{"type":"string"},"flow_amount":{"type":"number"},"flow_count":{"type":"integer"},"flow_mean":{"type":"number"},"observed_at":{"type":"integer"},"symbol":{"type":"string"}},"type":"object"},"model.NUPLData":{"properties":{"nul":{"type":"number"},"nup":{"type":"number"},"nupl":{"type":"number"},"symbol":{"type":"string"},"time":{"type":"string"},"timestamp":{"type":"integer"}},"type":"object"},"model.NonUSCompanyDetail":{"properties":{"address":{"type":"string"},"ceo":{"type":"string"},"cik":{"type":"string"},"city":{"type":"string"},"company_name":{"type":"string"},"country":{"type":"string"},"currency":{"type":"string"},"cusip":{"type":"string"},"description":{"type":"string"},"exchange":{"type":"string"},"exchange_full_name":{"type":"string"},"full_time_employees":{"type":"integer"},"image":{"type":"string"},"industry":{"type":"string"},"ipo_date":{"type":"string"},"isin":{"type":"string"},"phone":{"type":"string"},"sector":{"type":"string"},"state":{"type":"string"},"symbol":{"type":"string"},"website":{"type":"string"},"zip":{"type":"string"}},"type":"object"},"model.NonUSStockKlinePoint":{"properties":{"price_close":{"type":"number"},"price_high":{"type":"number"},"price_low":{"type":"number"},"price_open":{"type":"number"},"quote_currency":{"type":"string"},"time_close":{"description":"TimeClose is the exclusive end of the bar's period, in Unix seconds.\nWeekly/monthly periods end at the next exchange-local calendar boundary.","type":"integer"},"time_open":{"description":"TimeOpen is the start of the bar's period, in Unix seconds.","type":"integer"},"time_period_end":{"description":"TimePeriodEnd is TimeClose formatted as RFC3339 in UTC.","type":"string"},"time_period_start":{"description":"TimePeriodStart is TimeOpen formatted as RFC3339 in UTC.","type":"string"},"volume_traded":{"type":"number"}},"type":"object"},"model.OpenInterestData":{"properties":{"sum_open_interest_value":{"description":"总持仓价值（美元）","type":"number"},"symbol":{"description":"交易对符号","type":"string"},"time":{"description":"Formatted time (YYYY-MM-DD hh:mm:ss, UTC+0)","type":"string"},"timestamp":{"description":"Unix时间戳（秒）","type":"integer"}},"type":"object"},"model.OptionContractDetail":{"properties":{"break_even_price":{"type":"number"},"daily_data":{"$ref":"#/definitions/model.DailyData"},"details":{"$ref":"#/definitions/model.ContractDetails"},"fmv":{"type":"number"},"greeks":{"$ref":"#/definitions/model.Greeks"},"implied_volatility":{"type":"number"},"open_interest":{"type":"integer"},"underlying_asset":{"$ref":"#/definitions/model.UnderlyingAsset"}},"type":"object"},"model.OptionsContractData":{"properties":{"cfi":{"type":"string"},"contract_type":{"type":"string"},"exercise_style":{"type":"string"},"expiration_date":{"type":"string"},"is_expired":{"type":"boolean"},"options_ticker":{"type":"string"},"primary_exchange":{"type":"string"},"shares_per_contract":{"type":"integer"},"strike_price":{"type":"number"},"underlying_symbol":{"type":"string"}},"type":"object"},"model.OptionsGreeksPoint":{"properties":{"date":{"type":"string"},"delta":{"type":"number"},"dividend_yield":{"type":"number"},"dte":{"type":"integer"},"gamma":{"type":"number"},"implied_volatility":{"type":"number"},"option_close":{"type":"number"},"options_ticker":{"type":"string"},"risk_free_rate":{"type":"number"},"spot_price":{"type":"number"},"status":{"type":"string"},"theta":{"type":"number"},"time_close":{"type":"integer"},"time_open":{"description":"Regular US session bounds of the trading day, unix seconds:\ntime_open = 09:30 ET, time_close = 16:00 ET (DST-aware; half-day early\ncloses are not adjusted).","type":"integer"},"underlying_symbol":{"type":"string"},"vega":{"type":"number"}},"type":"object"},"model.OptionsKlineData":{"properties":{"options_ticker":{"type":"string"},"price_close":{"type":"number"},"price_high":{"type":"number"},"price_low":{"type":"number"},"price_open":{"type":"number"},"time_close":{"type":"integer"},"time_open":{"type":"integer"},"trades_count":{"type":"integer"},"underlying_symbol":{"type":"string"},"volume_traded":{"type":"number"},"vwap":{"type":"number"}},"type":"object"},"model.OutstandingSharesClass":{"properties":{"adr_description":{"type":"string"},"adr_ratio":{"type":"number"},"adr_total_outstanding":{"type":"number"},"description":{"type":"string"},"shares":{"type":"number"},"ticker":{"type":"string"}},"type":"object"},"model.OutstandingSharesItem":{"properties":{"calendar_end_date":{"type":"string"},"classes":{"items":{"$ref":"#/definitions/model.OutstandingSharesClass"},"type":"array"},"company_name":{"type":"string"},"date":{"type":"string"},"filing_date":{"type":"string"},"fiscal_quarter":{"type":"string"},"fiscal_year":{"type":"string"},"observed_at":{"type":"integer"},"period":{"type":"string"},"symbol":{"type":"string"},"total_outstanding":{"type":"number"},"unit":{"type":"string"}},"type":"object"},"model.PITDividendData":{"properties":{"adj_dividend":{"description":"Adjusted dividend amount","type":"number"},"date":{"description":"Ex-dividend date in YYYY-MM-DD format","type":"string"},"declaration_date":{"description":"Declaration date in YYYY-MM-DD format","type":"string"},"dividend":{"description":"Dividend amount","type":"number"},"frequency":{"description":"Dividend frequency (Monthly, Quarterly, etc.)","type":"string"},"payment_date":{"description":"Payment date in YYYY-MM-DD format","type":"string"},"record_date":{"description":"Record date in YYYY-MM-DD format","type":"string"},"symbol":{"description":"Stock symbol","type":"string"},"yield":{"description":"Dividend yield percentage","type":"number"}},"type":"object"},"model.PITStockRatingData":{"properties":{"date":{"description":"Date in YYYY-MM-DD format","type":"string"},"debt_to_equity_score":{"description":"D/E ratio score","type":"integer"},"discounted_cash_flow_score":{"description":"DCF score","type":"integer"},"overall_score":{"description":"Overall score","type":"integer"},"price_to_book_score":{"description":"P/B ratio score","type":"integer"},"price_to_earnings_score":{"description":"P/E ratio score","type":"integer"},"publish_time":{"description":"Unix timestamp (seconds, UTC)","type":"integer"},"rating":{"description":"Overall rating (e.g., \"A+\", \"B\", etc.)","type":"string"},"return_on_assets_score":{"description":"ROA score","type":"integer"},"return_on_equity_score":{"description":"ROE score","type":"integer"},"symbol":{"description":"Stock symbol","type":"string"}},"type":"object"},"model.PITStockSplitData":{"properties":{"date":{"description":"Split date in YYYY-MM-DD format","type":"string"},"denominator":{"description":"Split denominator (e.g., 1.0 for 2-for-1 split)","type":"number"},"numerator":{"description":"Split numerator (e.g., 2.0 for 2-for-1 split)","type":"number"},"observed_at":{"description":"Ingestion timestamp (created_at) in Unix seconds (UTC); 0 if unknown","type":"integer"},"symbol":{"description":"Stock symbol","type":"string"}},"type":"object"},"model.PersonChannelCommentary":{"properties":{"body":{"description":"Body is the page's text as read. It is returned only when the request sets\ninclude_body=true, and limit is then at most 50 because rows that carry a page of text\nare large. It can hold words that are not the person's, so Quote stays the sentence\nattributed to them.","type":"string"},"context":{"description":"Context holds the posts this one answers, quotes or forwards, each with its own author.\nIt is other people's words and never part of Quote or Body. An empty array, never null,\nwhen there are none.","items":{"$ref":"#/definitions/model.PersonCommentaryContext"},"type":"array"},"form":{"description":"Form is how the page holds the person's words: \"post\" for a post on a social platform,\n\"article\" for any other written page, such as a press release that quotes the person,\n\"transcript\" for spoken words written down, and only for these: the captions of a video,\nan episode of the podcast library, a page a transcript site published, or a page with a\nspeaker label for the person that the gate can read. The whole of an own post or article\nis the person's; a transcript also holds the words of others who speak in it.","enum":["post","article","transcript"],"type":"string"},"id":{"description":"ID is the row's fixed identity, derived from the person, the day and the page, so it\nstays the same when the row is rewritten. An update window is ordered by updated_at,\nthen id.","type":"string"},"item_ref":{"allOf":[{"$ref":"#/definitions/model.ChannelCommentaryItemRef"}],"description":"ItemRef names the row of another Arrays endpoint that this page is; null when the page\nis no such row."},"own":{"description":"Own is true when the page is the person's own: their post, their channel, their column.","type":"boolean"},"person":{"allOf":[{"$ref":"#/definitions/model.ChannelCommentaryPerson"}],"description":"Person is who said it."},"published_at":{"description":"PublishedAt is when the page says it was published, unix seconds; null when the page\nstates no time and only the time it was read is known.","type":"integer"},"publisher":{"description":"Publisher is the media, publication or program that published the page. Null when\nthe page is on a platform (X, YouTube, Xueqiu, Apple Podcasts and the like) that names\nno one else, and for the person's own post on a platform.","type":"string"},"quote":{"description":"Quote is the one sentence the person said, character for character as the page prints\nit. On a captions page (a YouTube video) the time marks the page puts between its\nblocks (\"[00:58]\") are taken out of it. On a YouTube row whose quote was checked against\nthe audio of the video (quote_speaker is present), it is the sentence of the audio\ntranscript, as the turns print it, and not the one in the captions.","type":"string"},"quote_offset_sec":{"description":"QuoteOffsetSec is where in the video the turn that holds the first word of the quote\nstarts, in seconds from the start of the video. There is no time for a word, so the\nquote is somewhere between this and the end of that turn. Present exactly when\nquote_speaker is: 0 is a start time too.","type":"number"},"quote_speaker":{"description":"QuoteSpeaker is the label of the voice that said the quote, the voice of one entry of\nturns and a key of resolved_speakers. It is there only on a YouTube row whose quote was\nchecked against the audio of its video, and the voice is the person's. Left out\notherwise.","type":"string"},"resolved_speakers":{"additionalProperties":{"$ref":"#/definitions/model.ChannelCommentarySpeaker"},"description":"ResolvedSpeakers says who each voice of the video is, by the voice label of the turns.\nIt is the same list as resolved_speakers of /api/v1/other/podcast/transcripts, with the\nsame fields (without presence): join on person_id, which is the person registry's id as\n/api/v1/persons answers with it. A voice that was given no name is not in it, nor is one\nnamed with a confidence below 0.4, as in that endpoint, and shows only in turns. It is\nthere with every row whose quote was checked against the audio, with or without\ninclude_body, and left out otherwise.","type":"object"},"said_at":{"description":"SaidAt is when the person said it, unix seconds; null when that is not known.","type":"integer"},"state":{"description":"State is \"served\", \"duplicate\", \"pending\" or \"refused\".","enum":["served","duplicate","pending","refused"],"type":"string"},"title":{"description":"Title is the page's title; null when the page has none, as a post has none.","type":"string"},"turns":{"description":"Turns is the whole video, in order, as the audio of the video was transcribed: who spoke\n(speaker, a name when the voice has one, and voice) and when (start_sec, end_sec) for\neach stretch of speech. It is returned only when the request sets include_body=true, as\nbody is, and only on a YouTube row whose quote was checked against the audio. It holds\nthe words of everyone who speaks in the video: the turns whose voice is the person's\n(the key of the resolved_speakers entry with the person's id, or quote_speaker) are\ntheirs, except a turn that entry lists in unknown_turn_indexes, and the rest are not.","items":{"$ref":"#/definitions/model.ChannelCommentaryTurn"},"type":"array"},"updated_at":{"description":"UpdatedAt is when this row last changed, as RFC3339 UTC with fractional seconds. A\nchange of state is a change: updated_after and updated_before on\n/api/v1/persons/channel-commentary filter on it.","type":"string"},"url":{"description":"URL is the address of the page, after the fetcher resolved it.","type":"string"}},"type":"object"},"model.PersonCommentaryContext":{"properties":{"author_handle":{"type":"string"},"author_id":{"description":"AuthorID, AuthorHandle and AuthorName are what the platform gave for the\npost's author, each left out when it gave none.","type":"string"},"author_name":{"type":"string"},"depth":{"description":"Depth is 1 for the post the row answers directly, then 2 and 3 for the\nposts above it.","type":"integer"},"published_at":{"description":"PublishedAt is unix seconds, 0 when the platform gave no time.","type":"integer"},"relation":{"description":"Relation is \"reply_to\", \"quoted\", \"forwarded\", \"reshared\" or \"thread_root\".","type":"string"},"status":{"description":"Status is \"ok\", \"deleted\" or \"unavailable\". Anything but \"ok\" means the\npost could not be read in full, and the row's ReplyStatus says so.","type":"string"},"text":{"description":"Text is the post's text as the platform gave it.","type":"string"},"url":{"description":"URL is the address of this post.","type":"string"}},"type":"object"},"model.PersonPosition":{"properties":{"affiliation":{"type":"string"},"position":{"type":"string"}},"type":"object"},"model.PersonShow":{"properties":{"confirmed":{"description":"Confirmed means there is hard evidence: the curated roster names this\nperson as a host, or they introduced themselves on at least one episode.\nOnly confirmed relationships are returned by the person registry API.","type":"boolean"},"platform":{"description":"Platform is an OPEN enum, podcast being the only value today. Ignore\nvalues you do not recognize rather than failing, or adding a platform\nbecomes a breaking change. It is emitted even while constant so callers\nbranch on it from the start.","type":"string"},"role":{"description":"Role is an OPEN enum: host or guest. It reports the capacity we have seen\nthis person appear in on this show, not their official title.","type":"string"},"show":{"description":"Show is the name. On platform podcast it is usable as podcast_show_name on\n/api/v1/other/podcast/transcripts.","type":"string"}},"type":"object"},"model.PodcastPerson":{"properties":{"aliases":{"description":"Aliases are other spellings, searchable through the name filter.","items":{"type":"string"},"type":"array"},"avatar_url":{"description":"AvatarURL comes from the curated roster; people speaker resolution\ncreated have none.","type":"string"},"bio":{"description":"Bio is reviewed display copy. Generation candidates are not exposed here.","type":"string"},"created_at":{"description":"CreatedAt and UpdatedAt are RFC3339 instants in UTC, e.g.\n\"2026-09-02T07:48:55Z\" — the same shape the transcripts endpoint's\ncreated_at uses, and the same shape the updated_since filter on this\nendpoint already takes as input. Empty when unset.","type":"string"},"display_name":{"type":"string"},"external_ids":{"description":"ExternalIDs are authoritative institutional identifiers — bioguide for a\nmember of Congress, sec_cik for an insider filer. Social accounts are in\nSocials, not here.","items":{"$ref":"#/definitions/model.ExternalID"},"type":"array"},"first_seen_url":{"description":"FirstSeenURL is where this person was first seen: their profile page for a\ncurated import, the episode they first spoke on for one speaker resolution\ncreated. It is one citation, not a list of every source they appear in.","type":"string"},"person_id":{"description":"PersonID is the canonical UUID, and the value a transcript's\nresolved_speakers carries. It is opaque: do not parse it. To tell curated\npeople from ones speaker resolution created, use created_by_pipeline.","type":"string"},"positions":{"description":"Positions is every job this person is known to hold. There is no\ntop-level \"primary job\" field: a person holds several at once and each\nsource sees a different one, so naming one primary would take a rule that\ndoes not exist. Pick from the list.\n\nEach entry's institution half is still called affiliation, and that is\nwhat the affiliation filter matches.","items":{"$ref":"#/definitions/model.PersonPosition"},"type":"array"},"shows":{"description":"Shows is every show this person has been seen on, hosting or as a guest;\nrole says which. Platform says where the show lives, so this list can\nhold more than podcasts later without changing shape again.","items":{"$ref":"#/definitions/model.PersonShow"},"type":"array"},"socials":{"description":"Socials is every known account. Always emitted — an empty array, never\nabsent or null — so callers can iterate without branching. Several\naccounts on one platform are allowed, and within a platform the first\nentry is the one to show.","items":{"$ref":"#/definitions/model.SocialAccount"},"type":"array"},"sources":{"description":"Sources are where this person is known from: podcast, congress, insider,\nearnings, x. This is the field that answers \"is this a member of Congress\"\n— do not infer it from the position text.\n\nThe first four are live pipelines. `x` is not: it marks people admitted by\nreviewed X imports, not a continuously growing X projector. So an x.com\nfirst_seen_url does not imply `x` here — a podcast sighting whose first\nsighting happened to be someone's X profile is `podcast` only.","items":{"type":"string"},"type":"array"},"updated_at":{"type":"string"}},"type":"object"},"model.PodcastShow":{"properties":{"episode_count":{"description":"EpisodeCount is what has been discovered within the ingestion window (a\nyear by default), not the show's lifetime output.","type":"integer"},"feed_url":{"type":"string"},"language":{"type":"string"},"last_scanned_at":{"description":"LastScannedAt is when the feed was last read, empty if never.","type":"string"},"latest_episode_date":{"description":"LatestEpisodeDate is YYYY-MM-DD, empty when nothing has been discovered.","type":"string"},"name":{"description":"Name is what the transcripts endpoint accepts as `podcast_show_name`.","type":"string"},"podcast_show_id":{"description":"PodcastShowID is the show's stable identifier, and cannot be rewritten in\ntransit the way a title can. Prefer it when asking the transcripts\nendpoint for episodes.","type":"integer"},"publisher":{"type":"string"},"transcript_count":{"description":"TranscriptCount is how many of those have text.","type":"integer"}},"type":"object"},"model.PodcastSourceSegment":{"properties":{"end_sec":{"type":"number"},"source_speaker":{"type":"string"},"start_sec":{"type":"number"},"text":{"type":"string"}},"type":"object"},"model.PodcastTranscript":{"properties":{"created_at":{"type":"string"},"date":{"description":"Date is the publication day, YYYY-MM-DD.","type":"string"},"episode_id":{"description":"EpisodeID identifies the episode, not the show. The publisher's RSS guid,\nor a key derived from the feed entry when none was given.","type":"string"},"guests":{"items":{"type":"string"},"type":"array"},"has_timestamps":{"description":"HasTimestamps says whether the turns carry \"@ seconds\".","type":"boolean"},"hosts":{"description":"Hosts and Guests restate ResolvedSpeakers by role, as person ids for\njoining against /persons. Only terminal registry UUIDs are returned;\nunresolved references are omitted. Each id appears once.","items":{"type":"string"},"type":"array"},"id":{"description":"ID identifies the Arrays record, unlike the publisher's EpisodeID.","type":"integer"},"listen_url":{"description":"ListenURL opens the Apple episode when exactly matched, otherwise the RSS\naudio enclosure. It is absent when neither is available.","type":"string"},"podcast_show_id":{"description":"PodcastShowID identifies the show, not the episode. Pass it back as\npodcast_show_id to page or filter without resolving the name again.","type":"integer"},"podcast_show_name":{"description":"PodcastShowName is the show's name, as the podcast_show_name filter\nmatches it.","type":"string"},"published_at":{"description":"PublishedAt is the publication instant, RFC3339 UTC, from the feed's\npubDate; empty when unknown. An episode imported from a manifest has only\na day, so its instant is that day's 00:00:00Z.","type":"string"},"raw_transcript":{"description":"RawTranscript is the publisher's file as served, shaped by TranscriptType.\nOnly when include_raw=true.","type":"string"},"resolved_speakers":{"additionalProperties":{"$ref":"#/definitions/model.ResolvedSpeaker"},"description":"ResolvedSpeakers is who each numbered voice turned out to be. Keys are\nspeaker numbers; join on PersonID, not the key. Entries below 0.4\nconfidence are dropped server-side.","type":"object"},"source_segments":{"description":"SourceSegments retain source-provided text, speaker labels and timing.\nOlder episodes may not have them until they are reprocessed.","items":{"$ref":"#/definitions/model.PodcastSourceSegment"},"type":"array"},"speaker_recognition_status":{"type":"string"},"speaker_recognition_version":{"type":"string"},"speaker_review_reason":{"type":"string"},"speaker_review_required":{"type":"boolean"},"transcript":{"description":"Transcript is the normalized body: one turn per line, e.g.\n\"[spk 0 @ 12.5] ...\", or, with speaker_labels=names,\n\"Jay Rughani (host) @ 0:00:12.50: ...\".","type":"string"},"transcript_source":{"description":"TranscriptSource is official or asr. Not the file format; that is\nTranscriptType.","type":"string"},"transcript_type":{"description":"TranscriptType is the source file's format: vtt, srt, html, plain, json, or\ndeepgram-json.","type":"string"},"transcript_url":{"description":"TranscriptURL is where the document was fetched from. Absent on episodes we\ntranscribed ourselves.","type":"string"},"updated_at":{"description":"UpdatedAt tracks episode metadata, transcript and attribution changes.\nIt is not a content version. Show/person metadata has its own lifecycle.","type":"string"}},"type":"object"},"model.PriceTargetNews":{"properties":{"adj_price_target":{"example":180.25,"type":"number"},"analyst_company":{"example":"Goldman Sachs","type":"string"},"analyst_name":{"description":"Optional","example":"John Smith","type":"string"},"id":{"description":"ID identifies the Arrays row; it is stable across FMP revisions of the\nsame article, unlike observed_at.","example":12345,"type":"integer"},"news_base_url":{"example":"streetinsider.com","type":"string"},"news_publisher":{"example":"StreetInsider","type":"string"},"news_title":{"example":"Analyst Updates Price Target for AAPL","type":"string"},"news_url":{"example":"https://example.com/news/123","type":"string"},"observed_at":{"description":"Unix timestamp (seconds)","example":1733411280,"type":"integer"},"price_target":{"example":185.5,"type":"number"},"price_when_posted":{"example":175,"type":"number"},"publish_time":{"description":"Formatted time (YYYY-MM-DD HH:mm:ss, America/New_York)","example":"2024-12-05 07:34:56","type":"string"},"symbol":{"example":"AAPL","type":"string"},"updated_at":{"description":"UpdatedAt is when Arrays last stored a changed value for this row, not\nwhen the article was published. Poll on this, not on observed_at.","example":"2026-09-09T03:00:00.123456Z","type":"string"}},"type":"object"},"model.PuellMultipleData":{"properties":{"date":{"type":"string"},"observed_at":{"type":"integer"},"puell_multiple":{"type":"number"},"symbol":{"type":"string"}},"type":"object"},"model.RealTimeData":{"properties":{"date":{"description":"Date is an RFC3339 UTC timestamp (same convention as the kline time_period_start fields); empty string when no quote is available. See the handler docs for the stored-close fallback case.","example":"2026-08-04T13:26:49Z","type":"string"},"price":{"example":4756.5,"type":"number"},"symbol":{"example":"^SPX","type":"string"}},"type":"object"},"model.RealizedPriceData":{"properties":{"realized_price":{"type":"number"},"symbol":{"type":"string"},"time":{"type":"string"},"timestamp":{"type":"integer"}},"type":"object"},"model.ResearchReport":{"properties":{"analysts":{"items":{"type":"string"},"type":"array"},"doc_id":{"example":"92e1b8986fde4a73","type":"string"},"entities":{"items":{"type":"string"},"type":"array"},"file_url":{"type":"string"},"key_points":{"items":{"type":"string"},"type":"array"},"page_count":{"example":9,"type":"integer"},"published_at":{"example":"2026-03-19T00:44:00Z","type":"string"},"publisher":{"example":"Goldman Sachs","type":"string"},"region":{"example":"us","type":"string"},"scope":{"example":"company","type":"string"},"sector":{"example":"semiconductors","type":"string"},"summary":{"type":"string"},"symbols":{"items":{"type":"string"},"type":"array"},"title":{"example":"Micron Technology (MU): Very strong quarter","type":"string"},"units":{"description":"Units is populated only by the detail endpoint (/research/report); the\nlist endpoint leaves it nil so omitempty drops the key entirely.","items":{"$ref":"#/definitions/model.ResearchUnit"},"type":"array"}},"type":"object"},"model.ResearchUnit":{"properties":{"doc_id":{"example":"92e1b8986fde4a73","type":"string"},"file_url":{"example":"https://storage.googleapis.com/arrays-public-assets/equity-research/0b0ac4fa.pdf#page=11","type":"string"},"heading":{"example":"Sizing the Consumer Agent Opportunity","type":"string"},"idx":{"example":3,"type":"integer"},"kind":{"example":"section","type":"string"},"page_from":{"example":11,"type":"integer"},"page_to":{"example":13,"type":"integer"},"published_at":{"example":"2026-05-06T00:33:00Z","type":"string"},"publisher":{"example":"Goldman Sachs","type":"string"},"region":{"example":"us","type":"string"},"scope":{"example":"industry","type":"string"},"score":{"example":14.2,"type":"number"},"sector":{"example":"semiconductors","type":"string"},"summary":{"type":"string"},"symbols":{"items":{"type":"string"},"type":"array"},"title":{"example":"Decoding the Agentic Economy","type":"string"}},"type":"object"},"model.ResolvedSpeaker":{"properties":{"attribution_source":{"description":"AttributionSource is how the name was reached: intro_selfstated,\nintro_introduced, signoff, title, websearch, or adjudicated. Per speaker,\nsince one episode mixes them.","type":"string"},"confidence":{"description":"Confidence runs 0..1. Below 0.4 is already dropped; at or above 0.7 use it,\nbetween the two show it as uncertain. A few rows predate the field and\nreport 0.","type":"number"},"name":{"description":"Name is the spelling found on a source, not the one in the transcript: a\ntranscriber hears Lisa Abramowicz as \"Lisa Bromwitz\".","type":"string"},"person_id":{"description":"PersonID is the terminal person-registry UUID, absent when nothing could\nbe linked. Legacy identifiers and merged UUIDs are resolved before return.","type":"string"},"presence":{"description":"Presence restates Role for callers written against the field that\npreceded it: archival where Role is clip, evidenced otherwise. Derived,\nnever stored, so it cannot disagree with Role. Empty when Role is, since\nevidenced would claim the slot took part.","enum":["evidenced","archival"],"example":"archival","type":"string"},"role":{"description":"Role is host, guest, or clip.","enum":["host","guest","clip"],"example":"clip","type":"string"},"unknown_turn_indexes":{"description":"Zero-based compatibility-transcript lines that cannot be attributed to this person.","items":{"type":"integer"},"type":"array"}},"type":"object"},"model.SECEarningsReleaseData":{"properties":{"quarter":{"example":"202401","type":"string"},"release_date":{"example":"2024-04-24","type":"string"},"symbol":{"example":"IBM","type":"string"},"url":{"example":"https://www.sec.gov/...","type":"string"}},"type":"object"},"model.SECFiling":{"properties":{"acceptance_time":{"description":"AcceptanceTime is the EDGAR acceptance instant, unix seconds (UTC).","example":1785492062,"type":"integer"},"accession_number":{"example":"0000320193-26-000073","type":"string"},"cik":{"example":"0000320193","type":"string"},"file_url":{"example":"https://www.sec.gov/Archives/edgar/data/320193/000032019326000073/aapl-20260627.htm","type":"string"},"filing_date":{"description":"FilingDate is the EDGAR filing date; ReportDate is the fiscal period-end\nthe filing covers.","example":"2026-08-01","type":"string"},"fiscal_quarter":{"example":"Q3","type":"string"},"fiscal_year":{"description":"Fiscal labels resolved from the period end. Both omitted while a freshly\ndiscovered filing's label is still unresolved (it self-heals within a\nsweep cycle). FiscalQuarter is Q1-Q4 for a 10-Q, FY for a 10-K.","example":2026,"type":"integer"},"form_type":{"example":"10-Q","type":"string"},"report_date":{"example":"2026-06-27","type":"string"},"symbol":{"example":"AAPL","type":"string"}},"type":"object"},"model.SOPRData":{"properties":{"date":{"type":"string"},"observed_at":{"type":"integer"},"sopr":{"type":"number"},"symbol":{"type":"string"}},"type":"object"},"model.SSRData":{"properties":{"ssr":{"type":"number"},"symbol":{"type":"string"},"time":{"type":"string"},"timestamp":{"type":"integer"}},"type":"object"},"model.SectionEntry":{"properties":{"content":{"items":{"$ref":"#/definitions/model.TranscriptEntry"},"type":"array"},"section":{"type":"string"}},"type":"object"},"model.SectorWeighting":{"properties":{"sector":{"example":"Technology","type":"string"},"symbol":{"example":"SPY","type":"string"},"updated_at":{"description":"Data update time, RFC3339","example":"2025-09-09T12:09:15Z","type":"string"},"weight_percentage":{"example":34.62,"type":"number"}},"type":"object"},"model.SemiconductorPriceData":{"properties":{"avg":{"type":"number"},"date":{"type":"string"},"high":{"type":"number"},"low":{"type":"number"},"symbol":{"type":"string"}},"type":"object"},"model.SharesFloat":{"properties":{"date":{"example":"2025-09-09 03:18:20","type":"string"},"float_shares":{"example":"14824921462","type":"string"},"free_float":{"example":99.89570086161085,"type":"number"},"outstanding_shares":{"example":"14840399872","type":"string"},"source":{"example":"https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/aapl-20240928.htm","type":"string"},"symbol":{"example":"AAPL","type":"string"}},"type":"object"},"model.ShortInterestPoint":{"properties":{"average_daily_volume":{"type":"integer"},"change_in_short_interest":{"type":"integer"},"change_in_short_interest_percentage":{"type":"number"},"company_name":{"type":"string"},"days_to_cover":{"type":"number"},"last_short_interest":{"type":"integer"},"settlement_date":{"type":"string"},"short_interest":{"type":"integer"},"short_interest_pct_float":{"description":"SI as % of float / outstanding (0-100, may exceed 100). Only populated for\nthe latest settlement date; null for older rows (computed from current\nshares, which are only valid for the most recent period).","type":"number"},"short_interest_pct_outstanding":{"type":"number"},"symbol":{"type":"string"},"updated_at":{"description":"UpdatedAt is our ingestion/upsert time (unix seconds).","type":"integer"}},"type":"object"},"model.SocialAccount":{"properties":{"followers_count":{"description":"FollowersCount is the cached X count; omitted for unknown profiles and other platforms.","type":"integer"},"handle":{"description":"Handle is the display name on that platform. It changes over time, and is\nempty for an account known only by its numeric ID.","type":"string"},"id":{"description":"ID is the platform's own immutable identifier. Absent on platforms that\npublish none (linkedin, substack), so never assume it is there.","type":"string"},"platform":{"description":"Platform is an OPEN enum: x, linkedin, youtube, substack today, and more\nlater. Ignore values you do not recognize rather than failing, or adding a\nplatform becomes a breaking change. X was emitted as \"twitter\" until\n2026-09; the url on the same entry has always been an x.com one.","type":"string"},"url":{"description":"URL is always present: an account is a reachable page by definition.","type":"string"}},"type":"object"},"model.StockKlineData":{"properties":{"price_close":{"type":"number"},"price_high":{"type":"number"},"price_low":{"type":"number"},"price_open":{"type":"number"},"time_close":{"type":"integer"},"time_open":{"type":"integer"},"time_period_end":{"type":"string"},"time_period_start":{"type":"string"},"trades_count":{"type":"integer"},"volume_traded":{"type":"number"}},"type":"object"},"model.StockKpiValue":{"properties":{"calendar_end_date":{"description":"Report date (YYYY-MM-DD)","type":"string"},"calendar_quarter":{"description":"Calendar quarter (Q1, Q2, Q3, Q4)","type":"string"},"calendar_year":{"description":"Calendar year","type":"integer"},"created_at":{"description":"Ingestion time — when we first stored this record (RFC3339)","example":"2024-01-15T10:00:00Z","type":"string"},"fiscal_quarter":{"description":"Fiscal quarter (Q1, Q2, Q3, Q4)","type":"string"},"fiscal_year":{"description":"Fiscal year","type":"integer"},"metrics":{"description":"KPI metrics as an array of name-value pairs","items":{"type":"object"},"type":"array"},"period_id":{"description":"Unique period identifier","type":"string"},"period_type":{"description":"Period type (annual, quarterly)","type":"string"},"symbol":{"description":"Stock symbol","type":"string"},"updated_at":{"description":"Last update time of this record (RFC3339)","example":"2024-01-15T10:00:00Z","type":"string"}},"type":"object"},"model.StockScreenerItem":{"properties":{"symbol":{"description":"Stock symbol (e.g., AAPL)","type":"string"},"type":{"description":"Screener filter type: sector, industry, country, exchange","type":"string"},"value":{"description":"Filter value matching the query parameter","type":"string"}},"type":"object"},"model.SymbolMetricData":{"properties":{"metric":{"description":"Metric type identifier","example":"REVENUE_TTM","type":"string"},"symbol":{"description":"Stock symbol","example":"AAPL","type":"string"},"values":{"description":"Time series data points","items":{"$ref":"#/definitions/model.TimeSeriesValue"},"type":"array"}},"type":"object"},"model.SymbolTradingPairsResponse":{"properties":{"alias":{"items":{"type":"string"},"type":"array"},"symbol":{"type":"string"},"trading_pairs":{"items":{"$ref":"#/definitions/model.InstrumentGroup"},"type":"array"}},"type":"object"},"model.TVNewsArticle":{"properties":{"content":{"type":"string"},"industries":{"items":{"type":"string"},"type":"array"},"provider":{"type":"string"},"published_at":{"type":"integer"},"story_id":{"type":"string"},"story_url":{"description":"StoryURL is the public TradingView permalink for this story. The page\nthere may gate the body behind TradingView's free trial — the full text\nis already in Content. Empty only when the stored path is empty.","example":"https://www.tradingview.com/news/DJN_DN20260727010758:0-asian-equities-slide/","type":"string"},"symbols":{"items":{"type":"string"},"type":"array"},"title":{"type":"string"},"updated_at":{"description":"UpdatedAt is the row's data update time, RFC3339 UTC with fractional\nseconds. Only update-window reads carry it (docs/api/update-polling.md).","example":"2026-09-09T03:00:00.123456Z","type":"string"}},"type":"object"},"model.TakerBuySellVolumeData":{"properties":{"buy_sell_ratio":{"description":"买卖比率","type":"number"},"buy_vol":{"description":"买入成交量","type":"number"},"sell_vol":{"description":"卖出成交量","type":"number"},"timestamp":{"description":"Unix时间戳（秒）","type":"integer"}},"type":"object"},"model.TimeSeriesValue":{"properties":{"fiscal_year":{"description":"Fiscal year","example":"2024","type":"string"},"observed_at":{"description":"Observation timestamp (Unix timestamp seconds, UTC) - maps from gRPC's publish_time","example":1672531200,"type":"integer"},"period":{"description":"Fiscal period (Q1/Q2/Q3/Q4/FY)","example":"Q4","type":"string"},"value":{"description":"Metric value (null if NaN/Inf)","example":385000000000.12,"type":"number"}},"type":"object"},"model.TokenContract":{"properties":{"address":{"type":"string"},"chain":{"type":"string"}},"type":"object"},"model.TokenHoldingAmount":{"properties":{"amount":{"type":"number"}},"type":"object"},"model.TokenMarketCapItem":{"properties":{"market_cap":{"type":"number"},"name":{"type":"string"},"symbol":{"type":"string"},"time":{"description":"Formatted time (YYYY-MM-DD hh:mm:ss, UTC+0)","type":"string"},"timestamp":{"type":"integer"}},"type":"object"},"model.TokenProfile":{"properties":{"category":{"type":"string"},"contracts":{"items":{"$ref":"#/definitions/model.TokenContract"},"type":"array"},"description":{"type":"string"},"logo":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"urls":{"$ref":"#/definitions/model.TokenURLs"}},"type":"object"},"model.TokenSupplyItem":{"properties":{"circulating_supply":{"type":"number"},"name":{"type":"string"},"symbol":{"type":"string"},"time":{"description":"Formatted time (YYYY-MM-DD hh:mm:ss, UTC+0)","type":"string"},"timestamp":{"type":"integer"},"total_supply":{"type":"number"}},"type":"object"},"model.TokenURLs":{"properties":{"explorer":{"items":{"type":"string"},"type":"array"},"reddit":{"items":{"type":"string"},"type":"array"},"technical_doc":{"items":{"type":"string"},"type":"array"},"twitter":{"items":{"type":"string"},"type":"array"},"website":{"items":{"type":"string"},"type":"array"}},"type":"object"},"model.TradingPairDetail":{"properties":{"alias":{"items":{"type":"string"},"type":"array"},"contract_type":{"description":"Option-specific fields (present only for instrument_type == \"option\").","type":"string"},"description":{"type":"string"},"exercise_style":{"type":"string"},"expiration_date":{"type":"string"},"fee_rate":{"type":"number"},"market":{"type":"string"},"quote":{"type":"string"},"shares_per_contract":{"type":"integer"},"strike_price":{"type":"number"},"symbol_icon_url":{"type":"string"},"trading_pair":{"type":"string"},"type":{"type":"string"},"underlying_type":{"type":"string"}},"type":"object"},"model.TranscriptEntry":{"properties":{"content":{"type":"string"},"participant_id":{"description":"ParticipantID is the speaker's TranscriptParticipant ID; absent when the\ntranscript's participant list does not name the speaker.","example":"1","type":"string"},"speaker":{"type":"string"},"title":{"type":"string"}},"type":"object"},"model.TranscriptParticipant":{"properties":{"affiliation":{"description":"Affiliation is the participant's organization: the company of a company\nrepresentative, the firm of an analyst. Present only for transcripts\nthat state it as an organization (Corrected ones).","example":"Cardinal Health, Inc.","type":"string"},"factset_entity_id":{"description":"FactSetEntityID is FactSet's entity ID for the person, when known.","example":"05XTJS-E","type":"string"},"id":{"description":"ID is the participant's ID within this transcript; entries name it.","example":"1","type":"string"},"name":{"example":"Aaron E. Alt","type":"string"},"role":{"description":"Role is company (an executive or investor relations of the company\nholding the call), analyst, operator or unknown.","enum":["company","analyst","operator","unknown"],"example":"company","type":"string"},"title":{"example":"Chief Financial Officer","type":"string"}},"type":"object"},"model.TreasuryRate":{"properties":{"date":{"description":"Date in YYYY-MM-DD format","type":"string"},"month1":{"description":"1 Month rate","type":"number"},"month2":{"description":"2 Month rate","type":"number"},"month3":{"description":"3 Month rate","type":"number"},"month6":{"description":"6 Month rate","type":"number"},"year1":{"description":"1 Year rate","type":"number"},"year10":{"description":"10 Year rate","type":"number"},"year2":{"description":"2 Year rate","type":"number"},"year20":{"description":"20 Year rate","type":"number"},"year3":{"description":"3 Year rate","type":"number"},"year30":{"description":"30 Year rate","type":"number"},"year5":{"description":"5 Year rate","type":"number"},"year7":{"description":"7 Year rate","type":"number"}},"type":"object"},"model.TweetReference":{"properties":{"author_display_name":{"example":"Elon Musk","type":"string"},"author_external_id":{"description":"AuthorExternalID is the twitter_id of the referenced tweet's author,\ncaptured at ingestion time from X API's includes.tweets[]. Empty when\nunknown (legacy rows pre-backfill). The handler uses it to enable a\nPK-prefix fast path inside hydrateSources.","example":"44196397","type":"string"},"author_handle":{"example":"elonmusk","type":"string"},"id":{"example":"1799000000001","type":"string"},"published_at":{"example":"2025-04-25T12:34:56Z","type":"string"},"text":{"type":"string"},"text_status":{"description":"TextStatus says why Text is empty. /search path only, like Text:\n  ok          the referenced tweet was indexed when this version was\n              written; Text is its full text\n  pending     the reply-parent fetch was queued and not done when this\n              version was written; a newer version (new updated_at) with\n              the text comes only if this tweet is fetched again after\n              the parent lands\n  not_found   the fetch ran and X has no live copy (deleted, protected or\n              suspended)\n  not_fetched Arrays does not fetch this tweet (replies from accounts on\n              the reply-parent blocklist, parents more than one hop up,\n              quoted/retweeted tweets not returned inline)\nAbsent on documents indexed before the field existed.","enum":["ok","pending","not_found","not_fetched"],"example":"ok","type":"string"},"type":{"description":"\"retweeted\" | \"quoted\" | \"replied_to\"","example":"quoted","type":"string"}},"type":"object"},"model.UWCongressTradeData":{"properties":{"amounts":{"type":"string"},"filing_date":{"type":"string"},"is_active":{"type":"boolean"},"issuer":{"type":"string"},"member_type":{"type":"string"},"name":{"type":"string"},"notes":{"type":"string"},"observed_at":{"type":"integer"},"official_name":{"type":"string"},"party":{"type":"string"},"politician_id":{"type":"string"},"reporter":{"type":"string"},"state":{"type":"string"},"symbol":{"type":"string"},"transaction_date":{"type":"string"},"transaction_type":{"type":"string"}},"type":"object"},"model.UWETFInOutflowData":{"properties":{"close":{"type":"string"},"date":{"type":"string"},"expiration_cycle":{"type":"string"},"is_fomc":{"type":"boolean"},"net_flow":{"type":"string"},"net_flow_in_shares":{"type":"integer"},"symbol":{"type":"string"},"volume":{"type":"integer"}},"type":"object"},"model.UWInsiderTransactionData":{"properties":{"amount":{"type":"string"},"filing_date":{"type":"string"},"form_type":{"type":"string"},"is_10b51":{"type":"boolean"},"is_director":{"type":"boolean"},"is_officer":{"type":"boolean"},"is_sp500":{"type":"boolean"},"is_ten_percent_owner":{"type":"boolean"},"observed_at":{"type":"integer"},"officer_title":{"type":"string"},"owner_name":{"type":"string"},"price":{"type":"string"},"security_ad_code":{"type":"string"},"security_title":{"type":"string"},"shares_owned_after":{"type":"string"},"shares_owned_before":{"type":"string"},"symbol":{"type":"string"},"transaction_code":{"type":"string"},"transaction_date":{"type":"string"},"transactions":{"type":"integer"},"tx_id":{"type":"string"}},"type":"object"},"model.UnderlyingAsset":{"properties":{"change_to_break_even":{"type":"number"},"last_updated":{"type":"integer"},"price":{"type":"number"},"symbol":{"type":"string"},"timeframe":{"type":"string"}},"type":"object"},"model.UnlockEvent":{"properties":{"cliff_unlocks":{"allOf":[{"$ref":"#/definitions/model.CliffUnlocks"}],"description":"Cliff unlock data (can be null)"},"data_source":{"description":"e.g., \"Whitepaper\"","type":"string"},"latest_update_date":{"description":"When data was last updated","type":"string"},"linear_unlocks":{"allOf":[{"$ref":"#/definitions/model.LinearUnlocks"}],"description":"Linear unlock data (can be null)"},"listed_method":{"description":"e.g., \"INTERNAL\"","type":"string"},"token_name":{"description":"e.g., \"Arbitrum\"","type":"string"},"token_symbol":{"description":"e.g., \"ARB\"","type":"string"},"unlock_date":{"description":"ISO 8601 date string","type":"string"}},"type":"object"},"model.WhaleRatioData":{"properties":{"date":{"type":"string"},"observed_at":{"type":"integer"},"symbol":{"type":"string"},"whale_ratio":{"type":"number"}},"type":"object"},"model.XFeedEntityMentions":{"properties":{"people":{"items":{"$ref":"#/definitions/model.XFeedPersonMention"},"type":"array"},"tickers":{"items":{"$ref":"#/definitions/model.XFeedTickerMention"},"type":"array"},"topics":{"items":{"$ref":"#/definitions/model.XFeedTopicMention"},"type":"array"}},"type":"object"},"model.XFeedHandle":{"properties":{"account_created_at":{"example":"2010-01-01T00:00:00Z","type":"string"},"description":{"example":"Founder \u0026 CEO of ARK Invest","type":"string"},"earliest_backfilled_at":{"description":"EarliestBackfilledAt: earliest published_at among fetch_kind='backfill'\nobservations for this handle. Empty string when backfill has not yet\nprogressed past the initial page. Hourly refresh by aggregator.","example":"2010-08-15T10:00:00Z","type":"string"},"followers_count":{"example":1500000,"type":"integer"},"following_count":{"example":300,"type":"integer"},"last_synced_at":{"description":"LastSyncedAt: when this handle's own timeline was last refreshed\n(twitter_subscriptions.last_synced_at). Attempt-time — advances on each\nsuccessful refresh tick even if the handle posted nothing in the window.\nNOT derived from observation timestamps, so it is immune to inflation from\nwrapper hydration (this handle's old tweets being pulled in when others\nretweet/quote them). Empty string when the handle has no subscription or\nhas never been refreshed.","example":"2026-06-22T09:20:00Z","type":"string"},"profile_banner_url":{"example":"https://pbs.twimg.com/profile_banners/...","type":"string"},"profile_image_url":{"example":"https://pbs.twimg.com/profile_images/...","type":"string"},"tags":{"allOf":[{"$ref":"#/definitions/model.XFeedHandleTags"}],"description":"Tags: offline-curated tag bundle. Absent when no tag data exists for this handle."},"twitter_display_name":{"example":"Cathie Wood","type":"string"},"twitter_handle":{"example":"CathieDWood","type":"string"},"twitter_id":{"example":"1234567890","type":"string"},"verified":{"example":true,"type":"boolean"},"verified_type":{"example":"blue","type":"string"}},"type":"object"},"model.XFeedHandleTags":{"properties":{"account_kind":{"example":"personal","type":"string"},"behavior":{"items":{"type":"string"},"type":"array"},"institution_type":{"example":"government","type":"string"},"language":{"items":{"type":"string"},"type":"array"},"occupation":{"items":{"type":"string"},"type":"array"},"topics":{"items":{"type":"string"},"type":"array"}},"type":"object"},"model.XFeedMedia":{"properties":{"alt_text":{"type":"string"},"duration_ms":{"example":15000,"type":"integer"},"height":{"example":800,"type":"integer"},"media_key":{"example":"3_1234","type":"string"},"preview_image_url":{"type":"string"},"type":{"example":"photo","type":"string"},"url":{"example":"https://pbs.twimg.com/media/foo.jpg","type":"string"},"variants":{"items":{"$ref":"#/definitions/model.XFeedMediaVariant"},"type":"array"},"width":{"example":1200,"type":"integer"}},"type":"object"},"model.XFeedMediaVariant":{"properties":{"bit_rate":{"type":"integer"},"content_type":{"example":"video/mp4","type":"string"},"url":{"type":"string"}},"type":"object"},"model.XFeedPersonMention":{"properties":{"confidence":{"type":"number"},"mention_method":{"type":"string"},"person_id":{"type":"integer"}},"type":"object"},"model.XFeedTickerMention":{"properties":{"confidence":{"type":"number"},"mention_method":{"type":"string"},"ticker":{"type":"string"}},"type":"object"},"model.XFeedTopicMention":{"properties":{"matched_keywords":{"items":{"type":"string"},"type":"array"},"topic_id":{"type":"string"}},"type":"object"},"model.XFeedTweet":{"properties":{"bookmark_count":{"example":34,"type":"integer"},"content_type":{"example":"original","type":"string"},"conversation_id":{"example":"1799123456789","type":"string"},"display_name":{"example":"Cathie Wood","type":"string"},"entity_mentions":{"allOf":[{"$ref":"#/definitions/model.XFeedEntityMentions"}],"description":"EntityMentions：MVP 永远为空对象 / 空数组（PRD D7-13）；保留字段供 V2 填充。"},"first_observed_at":{"example":"2025-04-25T12:00:00Z","type":"string"},"full_text":{"example":"Disruptive innovation will continue.","type":"string"},"hashtags":{"example":["AI","ETF"],"items":{"type":"string"},"type":"array"},"in_reply_to_user_id":{"example":"44196397","type":"string"},"last_edited_at":{"example":"2025-04-25T12:40:00Z","type":"string"},"last_observed_at":{"example":"2025-04-25T12:40:00Z","type":"string"},"like_count":{"example":1234,"type":"integer"},"media":{"items":{"$ref":"#/definitions/model.XFeedMedia"},"type":"array"},"media_json":{"type":"string"},"mentions":{"example":["elonmusk"],"items":{"type":"string"},"type":"array"},"meta_json":{"description":"MetaJSON / MediaJSON 透传 JSONB；客户端按需自行解析。\nMedia 是 MediaJSON 解析后的结构化版本，便于直接消费。","type":"string"},"platform_id":{"example":"1799123456789","type":"string"},"profile_image_url":{"description":"ProfileImageURL is the AUTHOR's avatar, joined from the account profile\nat read time (tweets carry no avatar of their own). Only the internal\n/v1/alva/news-x path populates it; the public /social-feeds/x endpoints\nleave it empty — get the avatar from /social-feeds/x/entities/handle/{h}\nthere. Also empty when the author has no stored profile.","example":"https://pbs.twimg.com/profile_images/1234/avatar_normal.jpg","type":"string"},"published_at":{"example":"2025-04-25T12:34:56Z","type":"string"},"quote_count":{"description":"Extended engagement + threading fields (Task 7).\nPointer types parallel to the four counters above — nil means missing /\nunknown, \u00260 is a real zero. With value-type int64 + omitempty, the JSON\nencoder silently dropped genuine 0 values.","example":12,"type":"integer"},"referenced_tweet_id":{"description":"Deprecated: use ReferencedTweets instead. Equals ReferencedTweets[0].ID /\nReferencedTweets[0].Type for backward compat with arrays-skills v1.1.0 and\nearlier. Multi-ref tweets only expose the first ref here (X API ordering);\nuse ReferencedTweets[] for the full picture. Will be removed in PR-b\n(~1 week after PR-a stabilizes, once arrays-skills v1.2+ no longer\nreferences these fields).","example":"1799000000001","type":"string"},"referenced_tweet_type":{"example":"quoted","type":"string"},"referenced_tweets":{"description":"ReferencedTweets replaces the legacy referenced_tweet_id/type pair.\nX API v2 allows a single tweet to reference multiple others.","items":{"$ref":"#/definitions/model.TweetReference"},"type":"array"},"reply_count":{"example":78,"type":"integer"},"retweet_count":{"example":56,"type":"integer"},"source":{"allOf":[{"$ref":"#/definitions/model.XFeedTweet"}],"description":"Source is the nested source tweet for retweet/quote/reply. Always nil\nfor content_type=\"original\". Handler-hydrated via batch lookup in\nhydrateSources (see Task 14). Source.Source is naturally nil — the\ngRPC server doesn't populate it and we don't recurse hydration."},"twitter_handle":{"example":"CathieDWood","type":"string"},"updated_at":{"description":"UpdatedAt is the projection time for the first index or a change to an\nengagement count, text, deleted flag, has_media, normalized media content,\nor a referenced_tweets[] entry's id, text or text_status.\nIdentical observations and retries retain it; LastObservedAt is independent.\nEmpty on documents indexed before the field existed and on the /by-handle\nand /by-url paths, which read ClickHouse.","example":"2025-04-25T12:40:00.123456Z","type":"string"},"url":{"example":"https://x.com/CathieDWood/status/1799123456789","type":"string"},"view_count":{"example":90000,"type":"integer"}},"type":"object"},"model.YouTubeContent":{"properties":{"channel_id":{"type":"string"},"channel_name":{"type":"string"},"channel_url":{"type":"string"},"cover_object":{"type":"string"},"description":{"type":"string"},"duration_ms":{"type":"integer"},"events":{"items":{"$ref":"#/definitions/model.YouTubeProcessingEvent"},"type":"array"},"failure_reason":{"type":"string"},"id":{"type":"string"},"media_job_id":{"type":"string"},"media_status":{"type":"string"},"published_at":{"type":"string"},"screenshots":{"items":{"$ref":"#/definitions/model.YouTubeScreenshot"},"type":"array"},"speakers":{"items":{"$ref":"#/definitions/model.YouTubeSpeakerMatch"},"type":"array"},"status":{"type":"string"},"title":{"type":"string"},"transcript":{"items":{"$ref":"#/definitions/model.YouTubeTranscriptSegment"},"type":"array"},"updated_at":{"type":"string"},"video_url":{"type":"string"}},"type":"object"},"model.YouTubeProcessingEvent":{"properties":{"at":{"type":"string"},"details":{"additionalProperties":{"type":"string"},"type":"object"},"message":{"type":"string"},"status":{"type":"string"},"step":{"type":"string"}},"type":"object"},"model.YouTubeScreenshot":{"properties":{"id":{"type":"string"},"is_cover":{"type":"boolean"},"object":{"type":"string"},"reason":{"type":"string"},"timestamp_ms":{"type":"integer"}},"type":"object"},"model.YouTubeSpeakerMatch":{"properties":{"attribution_source":{"description":"AttributionSource says how the name was reached, for example intro_selfstated.","type":"string"},"confidence":{"description":"Confidence is how sure the identification is of the name (segments use the name from 0.4 up); absent, not 0, when it gave none.","type":"number"},"evidence":{"type":"string"},"label":{"type":"string"},"name":{"type":"string"},"person_id":{"type":"string"},"role":{"description":"Role is host, guest or clip (a recording played in the video, not a person who took part).","type":"string"},"status":{"type":"string"}},"type":"object"},"model.YouTubeTranscriptSegment":{"properties":{"end_ms":{"type":"integer"},"screenshot_ids":{"items":{"type":"string"},"type":"array"},"speaker":{"type":"string"},"start_ms":{"type":"integer"},"text":{"type":"string"}},"type":"object"},"tradingpairrepo.TradingPair":{"properties":{"base":{"type":"string"},"created_at":{"type":"string"},"exchange":{"type":"string"},"id":{"type":"integer"},"instrument_type":{"type":"integer"},"is_valid":{"type":"boolean"},"quote":{"type":"string"},"symbol":{"type":"string"},"updated_at":{"type":"string"}},"type":"object"}},"host":"x402-data-tools.prd.arrays.org","info":{"contact":{},"description":"Welcome to Arrays!\n\nArrays is a unified financial data layer for both financial institutions and retail users, delivering comprehensive market data across crypto and equity markets. Our datasets cover fundamentals, ETFs, options, crypto, and more.\n\nVisit [arrays.org](https://arrays.org) to request an API key and start your free trial. You can explore our full API offerings in the documentation below.\n\nFor any questions regarding APIs or pricing, please contact support@arrays.org.","title":"Arrays API","version":"1.0"},"paths":{"/v1/crypto/analytics/query":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_analytics_query_get.json)\nThin passthrough to the crypto on-chain analytics provider.\nSupply `path` (e.g. `/btc/exchange-flows/inflow`) and `params`,\na URL-encoded query string of the parameters to forward (e.g.\n`exchange=binance\u0026window=day`). Call `path=/discovery/endpoints`\nto list available endpoints. `data` is the passed-through\n`result.data` array (free-form objects).","parameters":[{"description":"Analytics path, e.g. /btc/exchange-flows/inflow","in":"query","name":"path","required":true,"type":"string"},{"description":"URL-encoded query string, e.g. exchange=binance\u0026window=day","in":"query","name":"params","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.AnalyticsRow"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Bad Gateway","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Service Unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"504":{"description":"Gateway Timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Crypto analytics passthrough","tags":["Crypto"]}},"/v1/crypto/binance/perp/usdt/kline":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_binance_perp_usdt_kline_get.json)\nRetrieve K-line (candlestick) chart data for a Binance perpetual USDT futures pair (no cursor).","parameters":[{"description":"Crypto token symbol, ex: BTC, ETH, SOL","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds, must be \u003e 0)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds, must be \u003e start_time)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time interval for K-line data","enum":["1min","2min","3min","5min","10min","15min","30min","45min","1h","2h","4h","6h","8h","12h","1d","3d","1w","1m","3m","6m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Maximum number of data points to return (default 500, max 10000)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved K-line data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MarketKlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Binance perpetual USDT Kline data","tags":["Crypto"]}},"/v1/crypto/binance/spot/usdt/kline":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_binance_spot_usdt_kline_get.json)\nRetrieve K-line (candlestick) chart data for a Binance spot USDT trading pair (no cursor).","parameters":[{"description":"Crypto token symbol, ex: BTC, ETH, SOL","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds, must be \u003e 0)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds, must be \u003e start_time)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time interval for K-line data","enum":["1min","2min","3min","5min","10min","15min","30min","45min","1h","2h","4h","6h","8h","12h","1d","3d","1w","1m","3m","6m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Maximum number of data points to return (default 500, max 10000)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved K-line data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MarketKlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Binance spot USDT Kline data","tags":["Crypto"]}},"/v1/crypto/detail":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_crypto_detail_get.json)\nGet metadata profile for a specific token by its symbol, including name, category, description, logo, contract addresses, and official URLs.\n\n**Response Data Description**\n\n| Field | Type | Description | Example |\n|-------|------|-------------|---------|\n| symbol | string | Token symbol | \"BTC\" |\n| name | string | Full token name | \"Bitcoin\" |\n| category | string | Token category | \"coin\" |\n| description | string | Token description | \"Bitcoin is...\" |\n| logo | string | Token logo URL | \"https://...\" |\n| contracts | array | Contract addresses per chain | [{chain:\"ETH\", address:\"0x...\"}] |\n| urls | object | Official URLs (website, twitter, reddit, explorer, etc.) | |\n\n**Usage Examples**\n\n1. **Get BTC metadata**: `?symbol=BTC`\n2. **Get ETH metadata**: `?symbol=ETH`\n\n**Important Notes**\n\n- Symbol parameter is required (cannot be empty)","parameters":[{"description":"Token symbol","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Success","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.TokenProfile"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Token Metadata Profile by Symbol","tags":["Crypto"]}},"/v1/crypto/exchange-flows":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_exchange-flows_get.json)\nGet crypto exchange inflow/outflow data for BTC and ETH from Binance.\nReturns hourly aggregated data of token inflow and outflow on exchange.\nSymbol parameter is case-insensitive (e.g., BTC, btc, Btc are all valid).","parameters":[{"description":"Token symbol (case-insensitive, e.g., BTC, btc, ETH, eth)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Maximum number of records (default: 50, max: 1000)","format":"int32","in":"query","name":"limit","type":"integer"},{"description":"Time window granularity (hour/day). Default: hour","enum":["hour","day"],"in":"query","name":"window","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns crypto exchange flows data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CryptoExchangeFlowData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error - gRPC service failure","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Crypto Exchange Flows","tags":["Crypto"]}},"/v1/crypto/fear-greed-index":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_fear-greed-index_get.json)\nGet the Crypto Fear \u0026 Greed Index time series within the given range.\n\n**Overview**\nThe Fear \u0026 Greed Index measures market sentiment on a 0-100 scale:\n- 0-25: Extreme Fear (may indicate buying opportunities)\n- 25-50: Fear\n- 50-75: Greed\n- 75-100: Extreme Greed (may indicate overheated market)\n\n**Response Fields**\n- timestamp: Unix timestamp in seconds (UTC)\n- value: Index value (0-100)\n- time: Human-readable datetime string (YYYY-MM-DD HH:MM:SS, UTC)\n\n**Usage Examples**\n- Last 30 days: `?start_time=\u003cnow-30d\u003e\u0026end_time=\u003cnow\u003e`\n- Specific range: `?start_time=1704067200\u0026end_time=1706745600`","parameters":[{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds). Must be greater than start_time","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns fear \u0026 greed data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.FearGreedPoint"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Fear \u0026 Greed Index","tags":["Crypto"]}},"/v1/crypto/funding-rate":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_funding-rate_get.json)\n**Feature Overview**\nGet funding rate data for a specific trading pair with required time range filtering.\n\n**Main Use Cases**\n- **Perpetual Futures Trading**: Monitor funding rates for perpetual futures contracts\n- **Trading Strategy**: Use funding rates as a market sentiment indicator\n- **Risk Management**: Monitor funding costs for positions\n- **Technical Analysis**: Analyze funding rate trends over time\n\n**Query Parameters \u0026 Logic**\n\n**Required Parameters:**\n- `symbol`: Trading pair symbol (e.g., BTCUSDT)\n- `exchange`: Exchange name (currently only supports `binance`)\n- `start_time`: Start timestamp (Unix seconds) - required\n- `end_time`: End timestamp (Unix seconds) - required, must be after start_time\n- `limit`: Maximum number of results to return (1-1000, required)\n\n**Validation Rules:**\n- Symbol is required and must be a valid trading pair\n- Exchange must be `binance`\n- start_time must be before end_time\n- Limit range: 1-1000, required\n\n**Response Data Structure**\n\n- `data` ([]FundingRateData): Array of funding rate data points\n- `count` (int32): Actual number of data points returned\n- `latest_time` (string): Timestamp of the most recent data point (Unix seconds as string)\n\n**FundingRateData fields:**\n- `symbol` (string): Trading pair symbol (e.g., \"BTCUSDT\")\n- `funding_rate` (string): Funding rate in string format\n- `timestamp` (string): Unix timestamp in seconds as string (e.g., \"1763978100\")\n\n**Usage Examples**\n\n1. **Get funding rate data for specific time range**: `?symbol=BTCUSDT\u0026exchange=binance\u0026start_time=1761502255\u0026end_time=1764094255\u0026limit=100`\n2. **Get maximum data points**: `?symbol=ETHUSDT\u0026exchange=binance\u0026start_time=1761502255\u0026end_time=1764094255\u0026limit=1000`\n\n**Important Notes**\n\n- All parameters are required\n- Results are ordered by timestamp in descending order (latest first)\n- Funding rate represents the periodic payment between long and short positions\n- Funding rates are settled by the exchange at fixed intervals (every 8 hours for Binance)\n- No interval parameter needed as settlement times are predetermined by the exchange","parameters":[{"description":"Crypto token symbol (e.g., BTC, ETH, SOL)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"default":30,"description":"Maximum number of results (1-1000, default: 30)","format":"int32","in":"query","name":"limit","type":"integer"},{"default":"binance","description":"Exchange name (only binance supported, default: binance)","enum":["binance"],"in":"query","name":"exchange","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns funding rate data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.FundingRateData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error - gRPC service failure","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Service unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Funding Rate Data","tags":["Crypto"]}},"/v1/crypto/futures/ohlcv":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_futures_ohlcv_get.json)\nRetrieve K-line (candlestick) chart data for a specified crypto token futures using a non-cursor gRPC endpoint to reduce latency.","parameters":[{"description":"Crypto token symbol, ex: BTC, ETH, SOL","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds, must be \u003e 0)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds, must be \u003e start_time)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time interval for K-line data","enum":["1min","2min","3min","5min","10min","15min","30min","45min","1h","2h","4h","6h","8h","12h","1d","3d","1w","1m","3m","6m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Maximum number of data points to return (default 500, max 10000)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved K-line data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.KlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Crypto Token Future Kline data (no cursor pagination)","tags":["Crypto"]}},"/v1/crypto/holdings":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_holdings_get.json)\n**Feature Overview**\nRetrieve company crypto holdings filtered by token symbol.\n\n**Supported Tokens:** BTC, ETH, SOL, BNB\n\n**Filters (optional):**\n- `crypto_nav_to_market_cap_ratio_min` / `crypto_nav_to_market_cap_ratio_max`: range [0, 2]\n- `limit`: 1-100, default unlimited (server caps at 100)\n\n**Implementation:** Served from an in-memory snapshot refreshed every\n10 minutes. The underlying CoinGecko sync runs daily, so the cache\nis always within one refresh window of the freshest available data.","parameters":[{"description":"Token symbol (BTC, ETH, SOL, or BNB)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Minimum NAV/market cap ratio (0-2)","format":"float64","in":"query","name":"crypto_nav_to_market_cap_ratio_min","type":"number"},{"description":"Maximum NAV/market cap ratio (0-2)","format":"float64","in":"query","name":"crypto_nav_to_market_cap_ratio_max","type":"number"},{"description":"Result limit (1-100)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Company crypto holdings","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CryptoHoldingInfo"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"additionalProperties":true,"type":"object"}},"503":{"description":"Cache not yet warmed up","schema":{"additionalProperties":true,"type":"object"}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Company Crypto Holdings","tags":["Crypto"]}},"/v1/crypto/hyperliquid/perp/funding-rate":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_hyperliquid_perp_funding-rate_get.json)\nHourly funding rate history for a Hyperliquid PERP pair (core or HIP-3).","parameters":[{"description":"Canonical base symbol (e.g., BTC, ETH, NVDA)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Maximum results (1-1000, default 100)","format":"int32","in":"query","name":"limit","type":"integer"},{"description":"asc or desc (default desc)","enum":["asc","desc"],"in":"query","name":"sort_order","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.HyperliquidFundingRate"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Hyperliquid Funding Rate","tags":["Crypto"]}},"/v1/crypto/hyperliquid/perp/usdc/kline":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_hyperliquid_perp_usdc_kline_get.json)\nReturns OHLCV candles for a Hyperliquid perpetual trading pair\n(standard or HIP-3). symbol is the canonical base token (e.g. BTC, AAPL); the quote currency is USDC (in the URL path).\nIncomplete (in-progress) candles are excluded.","parameters":[{"description":"Canonical base token, e.g. BTC","in":"query","name":"symbol","required":true,"type":"string"},{"description":"One of: 1min, 5min, 15min, 30min, 1h, 4h, 1d, 1w, 1m","in":"query","name":"interval","required":true,"type":"string"},{"description":"Unix seconds","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"Unix seconds, \u003e start_time","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"1..10000, default 500","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MarketKlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Hyperliquid perp kline (candles)","tags":["Crypto"]}},"/v1/crypto/hyperliquid/spot/usdc/kline":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_hyperliquid_spot_usdc_kline_get.json)\nReturns OHLCV candles for a Hyperliquid spot trading pair.\nsymbol is the canonical base token (e.g. BTC, AAPL); the quote currency is USDC (in the URL path).\nIncomplete (in-progress) candles are excluded.","parameters":[{"description":"Canonical base token, e.g. BTC","in":"query","name":"symbol","required":true,"type":"string"},{"description":"One of: 1min, 5min, 15min, 30min, 1h, 4h, 1d, 1w, 1m","in":"query","name":"interval","required":true,"type":"string"},{"description":"Unix seconds","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"Unix seconds, \u003e start_time","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"1..10000, default 500","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MarketKlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Hyperliquid spot kline (candles)","tags":["Crypto"]}},"/v1/crypto/kline":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n\n[OpenAPI JSON Spec](/docs/output/v1_crypto_kline_get.json)\nRetrieve K-line (candlestick) chart data for a specified trading pair\n\n**Performance Optimization Features**\n\nThis API uses a multi-layer optimization architecture to ensure high performance:\n\n**1. TimescaleDB Materialized Views**\n- **Continuous Aggregation**: Automatically pre-compute aggregated data, improving query speed by 10-100x\n- **Auto Refresh**: Materialized views are automatically updated to ensure data timeliness\n\n**2. Intelligent Data Source Selection**\n- The system automatically selects the optimal data source based on the query time range\n- Short-term queries use the raw table, long-term queries use materialized views\n- Balances data accuracy and query performance\n\n**Supported Time Intervals**\n\n| Interval | Description | Use Case | Data Source |\n|----------|-------------|----------|------------|\n| `1min`   | 1-minute K-line | Short-term trading, real-time monitoring | Raw table + real-time calculation |\n| `5min`   | 5-minute K-line | Short-term analysis, intraday trading | Materialized view |\n| `15min`  | 15-minute K-line | Medium-short-term analysis | Materialized view |\n| `1h`     | 1-hour K-line | Intraday swing analysis | Materialized view |\n| `1d`     | Daily K-line | Long-term trend, fundamental analysis | Materialized view |\n\n**Parameter Configuration Details**\n\n**Required Parameters:**\n- `symbol`: binance supported token symbol, ex: BTC, ETH, SOL.\n- `start_time`: Start timestamp (seconds), must be \u003e 0\n- `end_time`: End timestamp (seconds), must be \u003e start_time\n- `interval`: Time interval, must be one of the supported values\n\n**Time Range Calculation**\n\n```bash\n# Get last 24 hours of 1-hour K-line\nend_time=$(date +%s)\nstart_time=$((end_time - 24*3600))\n\n# Get last 7 days of daily K-line\nend_time=$(date +%s)\nstart_time=$((end_time - 7*24*3600))\n```\n\n**Response Data Structure**\n\n| Field        | Type    | Description                  | Example                  |\n|-------------|---------|------------------------------|--------------------------|\n| count        | integer | Number of K-lines returned   | 24                       |\n| symbol      | string | token symbol        | \"BTC\"                        |\n| interval     | string  | Time interval                | \"1h\"                     |\n| start_time   | integer | Actual start timestamp       | 1752112043               |\n| end_time     | integer | Actual end timestamp         | 1752742043               |\n| data         | array   | Array of K-line data         | [KlineData, ...]         |\n\n**Each K-line data item includes:**\n- `time`: K-line timestamp\n- `open_price`: Opening price\n- `high_price`: Highest price\n- `low_price`: Lowest price\n- `close_price`: Closing price\n- `volume`: Trading volume\n- `quote_volume`: Quote currency trading volume\n- `trades`: Number of trades\n- `buy_base_volume`: Active buy trading volume\n- `buy_quote_volume`: Active buy quote currency volume\n\n**Common Query Examples**\n\n1. **Real-time 1-hour chart** (last 24 hours):\n`?symbol=BTC\u0026start_time=1752112043\u0026end_time=1752742043\u0026interval=1h\u0026limit=24`\n\n2. **Daily K-line chart** (last 30 days):\n`?symbol=BTC\u0026start_time=1752112043\u0026end_time=1643587200\u0026interval=1d\u0026limit=30`\n\n3. **Short-term 5-minute chart** (last 4 hours):\n`?symbol=BTC\u0026start_time=1641067200\u0026end_time=1752742043\u0026interval=5min\u0026limit=48`\n\n4. **High-frequency 1-minute data** (last 1 hour):\n`?symbol=BTC\u0026start_time=1641078000\u0026end_time=1752742043\u0026interval=1min\u0026limit=60`\n\n**Mobile Optimization Suggestions**\n\n- Use a smaller limit value (100-300) to reduce data transfer\n- Prefer intervals of 5min or above to reduce data volume\n- Implement paginated loading to fetch historical data as needed\n- Use WebSocket for real-time updates instead of frequent polling\n\n**Important Notes**\n\n- **Timestamp Format**: Use Unix timestamp (seconds), not milliseconds\n- **Price Precision**: Price data is returned as string for precision, convert to numeric type when using\n- **Rate Limiting**: Please control request frequency to avoid excessive queries","parameters":[{"description":"Crypto token symbol, ex: BTC, ETH, SOL","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds, must be \u003e 0)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds, must be \u003e start_time)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time interval for K-line data","enum":["1min","2min","3min","5min","10min","15min","30min","45min","1h","2h","4h","6h","8h","12h","1d","3d","1w","1m","3m","6m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Cursor for pagination","in":"query","name":"cursor","type":"string"},{"description":"Maximum number of data points to return (default 500, max 10000)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved K-line data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.GetKlineDataResponse"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Crypto Token Kline data from Binance, all price quote is in USDT","tags":["Crypto"]}},"/v1/crypto/long-short-ratio":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_crypto_long-short-ratio_get.json)\nGet long short ratio data for a specific trading pair symbol with time range filtering.\n\n**Main Use Cases**\n- **Market Sentiment Analysis**: Track the ratio of long to short positions over time\n- **Trading Strategy**: Use long/short ratio as a contrarian or confirmation indicator\n- **Risk Management**: Monitor extreme positioning in the market\n- **Technical Analysis**: Combine with price action for comprehensive analysis\n\n**Query Parameters \u0026 Logic**\n\n**Required Parameters:**\n- `symbol`: Trading pair symbol (e.g., BTCUSDT)\n- `start_time`: Start timestamp (Unix seconds)\n- `end_time`: End timestamp (Unix seconds)\n\n**Optional Parameters:**\n- `limit`: Maximum number of results to return (1-1000, default: 30)\n- `exchange`: Exchange name (only \"binance\" supported, default: binance)\n- `interval`: Time interval (only \"1d\" supported, default: 1d)\n\n**Supported Intervals:**\n- `1d`: 1-day intervals (default)\n\n**Validation Rules:**\n- Symbol is required and must be a valid trading pair\n- start_time must be before end_time\n- Limit defaults to 30 if not provided, max 1000\n- Exchange defaults to \"binance\" if not provided\n- Interval defaults to \"1d\" if not provided\n\n**Response Data Structure**\n\n- `data` ([]LongShortRatioData): Array of long short ratio data points (latest first, reverse chronological order)\n- `count` (int32): Actual number of data points returned (0-1000)\n- `latest_time` (string): Timestamp of the most recent data point (Unix seconds as string)\n\n**LongShortRatioData fields:**\n- `symbol` (string): Trading pair symbol (e.g., \"BTCUSDT\")\n- `long_short_ratio` (string): Long/Short ratio in string format (e.g., \"2.2798\" means 2.28:1 long:short)\n- `long_account_ratio` (number): Long account proportion (e.g., 0.65 means 65% of accounts are long; 0 when source data is missing)\n- `short_account_ratio` (number): Short account proportion (e.g., 0.35 means 35% of accounts are short; 0 when source data is missing)\n- `timestamp` (string): Unix timestamp in seconds as string (e.g., \"1763978100\")\n\n**Data Interpretation:**\n- longShortRatio \u003e 1.0: More accounts are long (bullish sentiment)\n- longShortRatio = 1.0: Equal long and short positions (neutral)\n- longShortRatio \u003c 1.0: More accounts are short (bearish sentiment)\n\n**Usage Examples**\n\n1. **Minimal request (uses defaults)**: `?symbol=BTCUSDT\u0026start_time=1733270400\u0026end_time=1733356800`\n2. **With custom limit**: `?symbol=BTCUSDT\u0026start_time=1733270400\u0026end_time=1733356800\u0026limit=100`\n3. **Full parameters**: `?symbol=BTCUSDT\u0026start_time=1733270400\u0026end_time=1733356800\u0026limit=100\u0026interval=5min\u0026exchange=binance`\n\n**Important Notes**\n\n- All required parameters must be provided\n- Results are ordered by timestamp in descending order (latest first)\n- Higher long/short ratio indicates more bullish sentiment\n- Data is provided in 1-day intervals (1d)","parameters":[{"description":"Crypto token symbol (e.g., BTC, ETH, SOL)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"default":30,"description":"Maximum number of results (1-1000, default: 30)","format":"int32","in":"query","name":"limit","type":"integer"},{"default":"binance","description":"Exchange name (only binance supported, default: binance)","enum":["binance"],"in":"query","name":"exchange","type":"string"},{"default":"1d","description":"Time interval (only 1d supported, default: 1d)","enum":["1d"],"in":"query","name":"interval","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns long short ratio data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.LongShortRatioData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error - gRPC service failure","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Long Short Ratio Data","tags":["Crypto"]}},"/v1/crypto/market-cap":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_market-cap_get.json)\n**Feature Overview**\n\nGet historical market capitalization data for a specific cryptocurrency token.\nThis endpoint returns time series data showing how the token's market cap has changed over time.\n\n**Query Parameters**\n\n| Parameter   | Type   | Required | Description                                          |\n|-------------|--------|----------|------------------------------------------------------|\n| symbol      | string | Yes      | Token symbol (e.g., BTC, ETH)                       |\n| start_time  | int64  | Yes      | Start timestamp (Unix seconds), must be \u003e 0         |\n| end_time    | int64  | Yes      | End timestamp (Unix seconds), must be \u003e 0           |\n| interval    | string | No       | Data interval - day-level or above only (e.g., 1d, 2d, 7d, 14d, 30d, 60d, 90d, 365d) |\n\n**Important Notes**\n\n- The `interval` parameter only supports **day-level or above** aggregation\n- Supported intervals: 1d, 2d, 3d, 7d, 14d, 15d, 30d, 60d, 90d, 365d, etc.\n- Hour-level intervals (e.g., 1h, 2h, 12h) are **NOT supported**\n\n**Response Data**\n\nReturns an array of market cap data points, each containing:\n- symbol: Token symbol\n- name: Token name\n- timestamp: Unix timestamp (seconds)\n- date: Human-readable date (YYYY-MM-DD HH:mm:ss, UTC+0)\n- marketCap: Market capitalization in USD\n","parameters":[{"description":"Token symbol (e.g., BTC, ETH)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds), must be greater than 0","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds), must be greater than 0","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Data interval - day-level or above only (e.g., 1d, 7d, 30d)","in":"query","name":"interval","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved market cap history","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.TokenMarketCapItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Token Market Cap History","tags":["Crypto"]}},"/v1/crypto/market-metrics":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_market-metrics_get.json)\nRetrieve time series data for various crypto market indicators, including technical and fundamental metrics.\n\n**Overview**\nThis endpoint provides market indicators for cryptocurrencies across different time intervals (1d, 1w, 1m).\nIndicators include technical analysis tools (MA, EMA, RSI, etc.) and crypto fundamentals (Market Cap, FDV, etc.).\n\n**Supported Indicators**\n- **MARKET_CAP**: Market capitalization\n- **FDV**: Fully Diluted Valuation\n- **PRICE_CHANGE**: `PRICE_CHANGE_1d`, `PRICE_CHANGE_1w`, `PRICE_CHANGE_1M`, `PRICE_CHANGE_3M`, `PRICE_CHANGE_6M`, `PRICE_CHANGE_ytd`, `PRICE_CHANGE_1y`, `PRICE_CHANGE_3y`, `PRICE_CHANGE_5y`\n- **MA**: `MA_5`, `MA_10`, `MA_20`, `MA_60`, `MA_120`, `MA_200`\n- **EMA**: `EMA_5`, `EMA_10`, `EMA_20`, `EMA_60`, `EMA_120`, `EMA_200`\n- **RSI**: `RSI_14`\n- **MACD single components**: `MACD_DIF`, `MACD_DEA`, `MACD_HIST`\n- **MACD legacy multi-component**: `MACD_12,26,9` (returns DIF, DEA, and HIST series)\n- **BOLLINGER single components**: `BOLLINGER_UPPER`, `BOLLINGER_MID`, `BOLLINGER_LOWER`\n- **BOLLINGER legacy multi-component**: `BOLLINGER_20,2` (returns UPPER, MID, and LOWER series)\n- **BETA**: `BETA` (default period is `BTC_365`; interval must be `1d`)\n- **VOLATILITY**: `VOLATILITY_20`, `VOLATILITY_60`, `VOLATILITY_90`\n\n**Validation Rules**\n- **Required Parameters**: interval, indicator, start_time, end_time.\n- **Interval**: Must be one of `1d`, `1w`, `1m`.\n- **Time Range**: `start_time` must be less than `end_time`.\n- **All-symbols queries** (`symbol` omitted): the window may span at most 100 interval periods — 100 days for `1d`, 100 weeks for `1w`, 100 months for `1m`. A wider window returns 400 `INVALID_PARAMETER`; pass a `symbol`, or walk the range one window at a time.\n","parameters":[{"description":"Time interval","enum":["1d","1w","1m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Indicator type (e.g., MA_20, PRICE_CHANGE_1d, MARKET_CAP, FDV)","in":"query","name":"indicator","required":true,"type":"string"},{"description":"Token symbol (optional, e.g., BTC, ETH, SOL). Omit it to get every token, which caps the window at 100 interval periods.","in":"query","name":"symbol","type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved crypto market metrics data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MarketSymbolMetricData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Crypto Market Metrics Time Series Data","tags":["Crypto"]}},"/v1/crypto/metrics/inflow-cdd":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_inflow-cdd_get.json)\nRetrieve Exchange Inflow CDD metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"default":"DATE","description":"Time type","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.InflowCDDData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Exchange Inflow CDD","tags":["Crypto"]}},"/v1/crypto/metrics/leverage-ratio":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_leverage-ratio_get.json)\nRetrieve Estimated Leverage Ratio metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time field to filter on","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.LeverageRatioData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Est. Leverage Ratio","tags":["Crypto"]}},"/v1/crypto/metrics/miner-to-exchange":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_miner-to-exchange_get.json)\nRetrieve Miner to Exchange flow metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"default":"DATE","description":"Time type","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MinerToExchangeData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Miner to Exchange (total)","tags":["Crypto"]}},"/v1/crypto/metrics/mvrv":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_mvrv_get.json)\nRetrieve MVRV Ratio metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time field to filter on","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MVRVRatioData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request Timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Service Unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get MVRV Ratio","tags":["Crypto"]}},"/v1/crypto/metrics/nupl":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_nupl_get.json)\nRetrieve NUPL (Net Unrealized Profit/Loss) metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time field to filter on","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.NUPLData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get NUPL","tags":["Crypto"]}},"/v1/crypto/metrics/puell-multiple":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_puell-multiple_get.json)\nRetrieve Puell Multiple metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"default":"DATE","description":"Time type","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PuellMultipleData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Puell Multiple","tags":["Crypto"]}},"/v1/crypto/metrics/realized-price":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_realized-price_get.json)\nRetrieve Realized Price metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time field to filter on","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.RealizedPriceData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Realized Price","tags":["Crypto"]}},"/v1/crypto/metrics/sopr":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_sopr_get.json)\nRetrieve SOPR (Spent Output Profit Ratio) metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"default":"DATE","description":"Time type","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SOPRData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get SOPR","tags":["Crypto"]}},"/v1/crypto/metrics/ssr":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_ssr_get.json)\nRetrieve Stablecoin Supply Ratio (SSR) metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time field to filter on","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SSRData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Stablecoin Supply Ratio","tags":["Crypto"]}},"/v1/crypto/metrics/whale-ratio":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_metrics_whale-ratio_get.json)\nRetrieve Exchange Whale Ratio metric data for a cryptocurrency","parameters":[{"default":"BTC","description":"Token symbol (only BTC supported)","in":"query","name":"symbol","required":true,"type":"string"},{"default":"DATE","description":"Time type","enum":["DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Limit number of results (min=1, max=1000, if not set, return all matched data)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.WhaleRatioData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Exchange Whale Ratio","tags":["Crypto"]}},"/v1/crypto/ohlcv":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_ohlcv_get.json)\nRetrieve K-line (candlestick) chart data for a specified crypto token using a non-cursor gRPC endpoint to reduce latency.","parameters":[{"description":"Crypto token symbol, ex: BTC, ETH, SOL","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds, must be \u003e 0)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds, must be \u003e start_time)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time interval for K-line data","enum":["1min","2min","3min","5min","10min","15min","30min","45min","1h","2h","4h","6h","8h","12h","1d","3d","1w","1m","3m","6m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Maximum number of data points to return (default 500, max 10000)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved K-line data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.KlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Crypto Token Kline data (no cursor pagination)","tags":["Crypto"]}},"/v1/crypto/open-interest":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_open-interest_get.json)\nGet open interest statistics data for a given trading pair","parameters":[{"description":"Crypto token symbol (e.g., BTC, ETH, SOL)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"default":30,"description":"Maximum number of results (1-1000, default: 30)","format":"int32","in":"query","name":"limit","type":"integer"},{"default":"1d","description":"Time interval (only 1d supported, default: 1d)","enum":["1d"],"in":"query","name":"interval","type":"string"},{"default":"binance","description":"Exchange name (only binance supported, default: binance)","enum":["binance"],"in":"query","name":"exchange","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns open interest data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.OpenInterestData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error - gRPC service failure","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Open Interest Data","tags":["Crypto"]}},"/v1/crypto/screener/metrics":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_screener_metrics_get.json)\nRetrieve tokens filtered by metrics at a specific snapshot time. Returns tokens matching the specified metric type and value range.\n\n**Overview:**\nThis endpoint filters tokens based on various metrics. The snapshot parameter is a Unix timestamp (seconds) that will be used directly for querying data.\n\n**Valuation Metrics (2 metrics):**\n- `MARKET_CAP`: Market Capitalization\n- `FDV`: Fully Diluted Valuation\n\n**Volume Metrics (1 metric):**\n- `SHARES_VOLUME`: Trading volume (shares)\n\n**Price Change Metrics (9 metrics):**\n- `PRICE_CHANGE_1D`: Price change over 1 day (percentage)\n- `PRICE_CHANGE_1W`: Price change over 1 week (percentage)\n- `PRICE_CHANGE_1M`: Price change over 1 month (percentage)\n- `PRICE_CHANGE_3M`: Price change over 3 months (percentage)\n- `PRICE_CHANGE_6M`: Price change over 6 months (percentage)\n- `PRICE_CHANGE_YTD`: Price change year-to-date (percentage)\n- `PRICE_CHANGE_1Y`: Price change over 1 year (percentage)\n- `PRICE_CHANGE_3Y`: Price change over 3 years (percentage)\n- `PRICE_CHANGE_5Y`: Price change over 5 years (percentage)\n\n**Moving Averages - Simple Moving Average (MA) (6 metrics):**\n- `MA_5`: 5-day Simple Moving Average\n- `MA_10`: 10-day Simple Moving Average\n- `MA_20`: 20-day Simple Moving Average\n- `MA_60`: 60-day Simple Moving Average\n- `MA_120`: 120-day Simple Moving Average\n- `MA_200`: 200-day Simple Moving Average\n\n**Moving Averages - Exponential Moving Average (EMA) (6 metrics):**\n- `EMA_5`: 5-day Exponential Moving Average\n- `EMA_10`: 10-day Exponential Moving Average\n- `EMA_20`: 20-day Exponential Moving Average\n- `EMA_60`: 60-day Exponential Moving Average\n- `EMA_120`: 120-day Exponential Moving Average\n- `EMA_200`: 200-day Exponential Moving Average\n\n**Momentum Indicators (1 metric):**\n- `RSI_14`: Relative Strength Index (14-period) - Momentum oscillator that measures speed and magnitude of price changes (typically ranges from 0 to 100)\n\n**MACD (Moving Average Convergence Divergence) Components (3 metrics):**\n- `MACD_DIF`: MACD Line (DIF) - Difference between 12-day EMA and 26-day EMA\n- `MACD_DEA`: Signal Line (DEA) - 9-day EMA of the MACD line\n- `MACD_HIST`: MACD Histogram - Difference between MACD line and signal line\n\n**Bollinger Bands Components (3 metrics):**\n- `BOLLINGER_UPPER`: Upper Bollinger Band - Upper band of Bollinger Bands (20-day MA + 2 standard deviations)\n- `BOLLINGER_MID`: Middle Bollinger Band - 20-day Simple Moving Average\n- `BOLLINGER_LOWER`: Lower Bollinger Band - Lower band of Bollinger Bands (20-day MA - 2 standard deviations)\n\n**Other Indicators (4 metrics):**\n- `BETA`: Beta - Measure of token's volatility relative to the crypto market. Beta of 1 means token moves with market\n- `VOLATILITY_20`: Volatility (20-period) - Standard deviation of returns over 20 periods (annualized)\n- `VOLATILITY_60`: Volatility (60-period) - Standard deviation of returns over 60 periods (annualized)\n- `VOLATILITY_90`: Volatility (90-period) - Standard deviation of returns over 90 periods (annualized)\n\n**Filtering:**\n- Use `range_min` to filter for tokens where the metric value is greater than or equal to the minimum\n- Use `range_max` to filter for tokens where the metric value is less than or equal to the maximum\n- Both filters can be used together to create a range\n- If neither filter is provided, all tokens matching the metric type will be returned\n\n**Response Format:**\nReturns an array of tokens with their symbol, snapshot time (ISO 8601 format), metric type, and metric value.","parameters":[{"description":"Snapshot time (Unix timestamp in seconds)","in":"query","name":"snapshot","required":true,"type":"integer"},{"description":"Metric type. See description for valid values.","in":"query","name":"metric_type","required":true,"type":"string"},{"description":"Minimum value filter","format":"float64","in":"query","name":"range_min","type":"number"},{"description":"Maximum value filter","format":"float64","in":"query","name":"range_max","type":"number"},{"description":"Sort order. Valid values: ASC, DESC. Defaults to DESC","in":"query","name":"order_by","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved crypto metrics screener data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CryptoMetricScreenerData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Crypto Metrics Screener","tags":["Crypto"]}},"/v1/crypto/screener/metrics/timerange":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_screener_metrics_timerange_get.json)\nRetrieve tokens filtered by metrics over a time range. Returns tokens matching the specified metric type and value range, grouped by date.\n\n**Overview:**\nThis endpoint filters tokens based on various metrics over a specified time range. Results are grouped by date (YYYY-MM-DD format).\n\n**Valuation Metrics (2 metrics):**\n- `MARKET_CAP`: Market Capitalization\n- `FDV`: Fully Diluted Valuation\n\n**Volume Metrics (1 metric):**\n- `SHARES_VOLUME`: Trading volume (shares)\n\n**Price Change Metrics (9 metrics):**\n- `PRICE_CHANGE_1D`: Price change over 1 day (percentage)\n- `PRICE_CHANGE_1W`: Price change over 1 week (percentage)\n- `PRICE_CHANGE_1M`: Price change over 1 month (percentage)\n- `PRICE_CHANGE_3M`: Price change over 3 months (percentage)\n- `PRICE_CHANGE_6M`: Price change over 6 months (percentage)\n- `PRICE_CHANGE_YTD`: Price change year-to-date (percentage)\n- `PRICE_CHANGE_1Y`: Price change over 1 year (percentage)\n- `PRICE_CHANGE_3Y`: Price change over 3 years (percentage)\n- `PRICE_CHANGE_5Y`: Price change over 5 years (percentage)\n\n**Moving Averages - Simple Moving Average (MA) (6 metrics):**\n- `MA_5`: 5-day Simple Moving Average\n- `MA_10`: 10-day Simple Moving Average\n- `MA_20`: 20-day Simple Moving Average\n- `MA_60`: 60-day Simple Moving Average\n- `MA_120`: 120-day Simple Moving Average\n- `MA_200`: 200-day Simple Moving Average\n\n**Moving Averages - Exponential Moving Average (EMA) (6 metrics):**\n- `EMA_5`: 5-day Exponential Moving Average\n- `EMA_10`: 10-day Exponential Moving Average\n- `EMA_20`: 20-day Exponential Moving Average\n- `EMA_60`: 60-day Exponential Moving Average\n- `EMA_120`: 120-day Exponential Moving Average\n- `EMA_200`: 200-day Exponential Moving Average\n\n**Momentum Indicators (1 metric):**\n- `RSI_14`: Relative Strength Index (14-period) - Momentum oscillator that measures speed and magnitude of price changes (typically ranges from 0 to 100)\n\n**MACD (Moving Average Convergence Divergence) Components (3 metrics):**\n- `MACD_DIF`: MACD Line (DIF) - Difference between 12-day EMA and 26-day EMA\n- `MACD_DEA`: Signal Line (DEA) - 9-day EMA of the MACD line\n- `MACD_HIST`: MACD Histogram - Difference between MACD line and signal line\n\n**Bollinger Bands Components (3 metrics):**\n- `BOLLINGER_UPPER`: Upper Bollinger Band - Upper band of Bollinger Bands (20-day MA + 2 standard deviations)\n- `BOLLINGER_MID`: Middle Bollinger Band - 20-day Simple Moving Average\n- `BOLLINGER_LOWER`: Lower Bollinger Band - Lower band of Bollinger Bands (20-day MA - 2 standard deviations)\n\n**Other Indicators (4 metrics):**\n- `BETA`: Beta - Measure of token's volatility relative to the crypto market. Beta of 1 means token moves with market\n- `VOLATILITY_20`: Volatility (20-period) - Standard deviation of returns over 20 periods (annualized)\n- `VOLATILITY_60`: Volatility (60-period) - Standard deviation of returns over 60 periods (annualized)\n- `VOLATILITY_90`: Volatility (90-period) - Standard deviation of returns over 90 periods (annualized)\n\n**Filtering:**\n- Use `range_min` to filter for tokens where the metric value is greater than or equal to the minimum\n- Use `range_max` to filter for tokens where the metric value is less than or equal to the maximum\n- Both filters can be used together to create a range\n- If neither filter is provided, all tokens matching the metric type will be returned\n\n**Limit Parameter:**\n- Use `limit` to further limit the maximum number of results returned per day (optional, defaults to no limit)\n- This is useful for pagination or when you only need the top N results per day\n\n**Response Format:**\nReturns an array of date-grouped data items. Each item contains a date (YYYY-MM-DD format) and an array of tokens with their symbol, snapshot time (ISO 8601 format), metric type, and metric value for that date.","parameters":[{"description":"Start time (Unix timestamp in seconds, UTC)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds, UTC)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Metric type. See description for valid values.","in":"query","name":"metric_type","required":true,"type":"string"},{"description":"Minimum value filter (optional). Returns only tokens where metric value \u003e= range_min","format":"float64","in":"query","name":"range_min","type":"number"},{"description":"Maximum value filter (optional). Returns only tokens where metric value \u003c= range_max","format":"float64","in":"query","name":"range_max","type":"number"},{"description":"Sort order (optional). Valid values: ASC (ascending), DESC (descending). Defaults to DESC","in":"query","name":"order_by","type":"string"},{"description":"Maximum number of results per day (optional, defaults to no limit)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved crypto metrics screener time range data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CryptoMetricScreenerTimeRangeDataItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters (missing start_time/end_time, invalid metric_type, start_time \u003e= end_time, etc.)","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Crypto Metrics Screener Time Range","tags":["Crypto"]}},"/v1/crypto/supply":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_supply_get.json)\n**Feature Overview**\n\nGet historical supply data (circulating and total supply) for a specific cryptocurrency token.\nThis endpoint returns time series data showing how the token's supply has changed over time.\n\n**Query Parameters**\n\n| Parameter   | Type   | Required | Description                                          |\n|-------------|--------|----------|------------------------------------------------------|\n| symbol      | string | Yes      | Token symbol (e.g., BTC, ETH)                       |\n| start_time  | int64  | Yes      | Start timestamp (Unix seconds), must be \u003e 0         |\n| end_time    | int64  | Yes      | End timestamp (Unix seconds), must be \u003e 0           |\n| interval    | string | No       | Data interval - day-level or above only (e.g., 1d, 2d, 7d, 14d, 30d, 60d, 90d, 365d) |\n\n**Important Notes**\n\n- The `interval` parameter only supports **day-level or above** aggregation\n- Supported intervals: 1d, 2d, 3d, 7d, 14d, 15d, 30d, 60d, 90d, 365d, etc.\n- Hour-level intervals (e.g., 1h, 2h, 12h) are **NOT supported**\n\n**Response Data**\n\nReturns an array of supply data points, each containing:\n- symbol: Token symbol\n- name: Token name\n- timestamp: Unix timestamp (seconds)\n- date: Human-readable date (YYYY-MM-DD HH:mm:ss, UTC+0)\n- circulatingSupply: Current circulating supply\n- totalSupply: Total supply\n","parameters":[{"description":"Token symbol (e.g., BTC, ETH)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds), must be greater than 0","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds), must be greater than 0","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Data interval - day-level or above only (e.g., 1d, 7d, 30d)","in":"query","name":"interval","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved supply history","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.TokenSupplyItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Token Supply History","tags":["Crypto"]}},"/v1/crypto/taker-buy-sell-volume":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_crypto_taker-buy-sell-volume_get.json)\nGet taker buy sell volume data for a specific trading pair symbol with optional time range filtering.\n\n**Main Use Cases**\n- **Market Sentiment Analysis**: Track the ratio of taker buy to sell volume over time\n- **Trading Strategy**: Use buy/sell volume ratio as a market sentiment indicator\n- **Risk Management**: Monitor extreme buying or selling pressure in the market\n- **Technical Analysis**: Combine with price action for comprehensive analysis\n\n**Query Parameters \u0026 Logic**\n\n**Required Parameters:**\n- `symbol`: Trading pair symbol (e.g., BTCUSDT)\n- `period`: Data period (currently only supports `1d`)\n\n**Optional Parameters:**\n- `start_time`: Start timestamp (Unix seconds) - if not provided, returns recent data\n- `end_time`: End timestamp (Unix seconds) - if not provided, returns up to current time\n- `limit`: Maximum number of results to return (1-500, default: 30)\n\n**Supported Periods:**\n- `1d`: 1-day intervals\n\n**Validation Rules:**\n- Symbol is required and must be a valid trading pair\n- If both start_time and end_time are provided, start_time must be before end_time\n- Period must be `1d`\n- Limit range: 1-500, default is 30\n\n**Response Data Structure**\n\n- `data` ([]TakerBuySellVolumeData): Array of taker buy sell volume data points (latest first, reverse chronological order)\n- `count` (int32): Actual number of data points returned (0-1000)\n\n**TakerBuySellVolumeData fields:**\n- `buy_vol` (string): Taker buy volume in string format\n- `sell_vol` (string): Taker sell volume in string format\n- `buy_sell_ratio` (string): Buy/Sell ratio in string format (e.g., \"1.5\" means buy volume is 1.5x sell volume)\n- `timestamp` (string): Unix timestamp in seconds as string (e.g., \"1763978100\")\n\n**Data Interpretation:**\n- buySellRatio \u003e 1.0: More buying pressure (bullish sentiment)\n- buySellRatio = 1.0: Equal buy and sell volume (neutral)\n- buySellRatio \u003c 1.0: More selling pressure (bearish sentiment)\n\n**Usage Examples**\n\n1. **Get latest 5 data points**: `?symbol=BTCUSDT\u0026period=1d\u0026limit=5`\n2. **Get latest 100 data points**: `?symbol=BTCUSDT\u0026period=1d\u0026limit=100`\n3. **Get data for specific time range**: `?symbol=BTCUSDT\u0026start_time=1733270400\u0026end_time=1733356800\u0026period=1d\u0026limit=200`\n4. **Get maximum data points**: `?symbol=ETHUSDT\u0026period=1d\u0026limit=500`\n\n**Important Notes**\n\n- If start_time and end_time are not provided, returns the most recent data\n- Results are ordered by timestamp in descending order (latest first)\n- Higher buy/sell ratio indicates more bullish sentiment\n- Data is provided in 1-day intervals","parameters":[{"description":"Crypto token symbol (e.g., BTC, ETH, SOL)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"default":30,"description":"Maximum number of results (1-1000, default: 30)","format":"int32","in":"query","name":"limit","type":"integer"},{"default":"1d","description":"Time interval (only 1d supported, default: 1d)","enum":["1d"],"in":"query","name":"interval","type":"string"},{"default":"binance","description":"Exchange name (only binance supported, default: binance)","enum":["binance"],"in":"query","name":"exchange","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns taker buy sell volume data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.TakerBuySellVolumeData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error - gRPC service failure","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Taker Buy Sell Volume Data","tags":["Crypto"]}},"/v1/crypto/trading-pair":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_crypto_trading-pair_get.json)\nGet detailed info for a specified trading pair (configuration, exchange info, validity).\n\n**Parameter Description**\n\n| Parameter | Description | Example | Notes |\n|----------|-------------|---------|-------|\n| base     | Base currency symbol | BTC, ETH, BNB | Case-insensitive, but uppercase is recommended |\n| quote    | Quote currency symbol | USDT, BUSD, BTC | Common quote currencies include USDT, BUSD, etc. |\n\n**Response Data Explanation**\n\n| Field         | Type     | Description                | Example                  |\n|--------------|----------|----------------------------|--------------------------|\n| id           | integer  | Unique identifier of pair  | 1                        |\n| symbol       | string   | Trading pair symbol        | \"BTCUSDT\"                |\n| base         | string   | Base currency              | \"BTC\"                    |\n| quote        | string   | Quote currency             | \"USDT\"                   |\n| exchange     | string   | Exchange name              | \"binance\"                |\n| isValid      | boolean  | Whether the pair is valid  | true                     |\n**Common Trading Pair Examples**\n1. **Mainstream pairs to USD**: `?base=BTC\u0026quote=USDT`\n2. **Ethereum to USD**: `?base=ETH\u0026quote=USDT`\n3. **Altcoin to Bitcoin**: `?base=ADA\u0026quote=BTC`\n4. **Stablecoin pairs**: `?base=USDT\u0026quote=BUSD`\n5. **DeFi token pairs**: `?base=UNI\u0026quote=ETH`\n\n**Notes**\n\n- Both `base` and `quote` parameters are required\n- Some pairs may be suspended (`isValid=false` during periods)","parameters":[{"description":"Base currency (e.g., BTC)","in":"query","name":"base","required":true,"type":"string"},{"description":"Quote currency (e.g., USDT)","in":"query","name":"quote","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved trading pair","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/tradingpairrepo.TradingPair"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Trading Pair Information","tags":["Crypto"]}},"/v1/crypto/unlock-events":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_crypto_unlock-events_get.json)\nRetrieve token unlock events for a specific token\n\n**Feature Overview**\nGet token unlock schedule and events including cliff unlocks and linear unlocks.\n\n**Main Use Cases**\n- **Token Analysis**: Understand token unlock schedules for investment decisions\n- **Market Impact**: Analyze potential market impact from upcoming unlocks\n- **Portfolio Management**: Track unlock events for tokens in your portfolio\n- **Research**: Research tokenomics and vesting schedules\n\n**Response Data Structure**\n\nEach unlock event includes:\n- **unlock_date**: ISO 8601 date string of the unlock event\n- **token_name**: Full name of the token (e.g., \"Arbitrum\")\n- **token_symbol**: Token symbol (e.g., \"ARB\")\n- **listed_method**: Method of listing (e.g., \"INTERNAL\")\n- **data_source**: Source of the data (e.g., \"Whitepaper\")\n- **linear_unlocks**: Linear unlock data (can be null)\n- **cliff_unlocks**: Cliff unlock data (can be null)\n- **latest_update_date**: When the data was last updated\n\n**Unlock Types**\n\n- **Cliff Unlocks**: One-time unlock of tokens at a specific date\n- **Linear Unlocks**: Gradual unlock of tokens over a period\n\n**Allocation Breakdown**\n\nEach unlock type includes allocation breakdown with:\n- **allocation_name**: Name of the allocation (e.g., \"Investors\")\n- **standard_allocation_name**: Standardized name (e.g., \"Private Investors\")\n- **cliff_amount**: Amount of tokens\n- **cliff_value**: Value in USD\n- **reference_price**: Reference price used for calculation\n- **unlock_precision**: Precision of unlock (e.g., \"month\", \"day\")\n\n**Usage Examples**\n\n1. **Get all unlock events for Arbitrum**:\n`?token_id=arbitrum`\n\n2. **Get unlock events for a specific date range**:\n`?token_id=arbitrum\u0026start=2024-01-01\u0026end=2024-12-31`\n\n3. **Get unlock events for Optimism**:\n`?token_id=optimism`\n\n**Important Notes**\n\n- token_id is required\n- start and end dates are optional (format: YYYY-MM-DD)\n- linear_unlocks and cliff_unlocks can be null if not applicable","parameters":[{"description":"Token identifier (e.g., arbitrum, optimism, sui)","in":"query","name":"token_id","required":true,"type":"string"},{"description":"Start date (YYYY-MM-DD format)","in":"query","name":"start","type":"string"},{"description":"End date (YYYY-MM-DD format)","in":"query","name":"end","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved unlock events","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.UnlockEvent"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Token Unlock Events","tags":["Crypto"]}},"/v1/etf/country-weightings":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_etf_country-weightings_get.json)\nRetrieve country allocation information for a specified ETF symbol. This endpoint provides detailed breakdown of the ETF's geographic exposure by country and their respective weight percentages.\n\n**Main Use Cases**\n- **Geographic Analysis**: Analyze ETF's country diversification and concentration\n- **Risk Assessment**: Evaluate country-specific risk exposure\n- **Portfolio Construction**: Use country weightings for geographic asset allocation\n- **Investment Research**: Understand ETF's geographic distribution\n- **Compliance Monitoring**: Track country exposure limits and regulations\n\n**Response Data Structure**\n\n- `weightings` ([]CountryWeighting): Array of country weighting items\n\n**CountryWeighting fields:**\n- `country` (string): Country name\n- `weight_percentage` (string): Percentage weight as string (e.g., \"99.56%\")\n- `updated_at` (string): Data update time (RFC3339), the last refresh time of this data","parameters":[{"description":"ETF symbol (uppercase, e.g., SPY, QQQ, IWM)","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved ETF country weightings","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CountryWeighting"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get ETF Country Weightings","tags":["ETF"]}},"/v1/etf/flow":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_etf_flow_get.json)\nRetrieve ETF in/outflow data for a given ETF symbol.\nThe data includes daily close, net flow in shares, volume, net flow, expiration cycle, and FOMC day indicator.","parameters":[{"description":"ETF symbol (e.g., SPY)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved ETF in/outflow data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.UWETFInOutflowData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get ETF In/Outflow Data","tags":["ETF"]}},"/v1/etf/holdings":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_etf_holdings_get.json)\nRetrieve detailed holdings information for a specified ETF symbol. This endpoint provides comprehensive data about the underlying assets held by the ETF, including weights, values, and portfolio composition.\n\n**Main Use Cases**\n- **Investment Analysis**: Analyze ETF portfolio composition and diversification\n- **Risk Assessment**: Evaluate concentration risk and sector allocation\n- **Performance Attribution**: Understand performance drivers through holdings analysis\n- **Portfolio Construction**: Use ETF holdings for asset allocation decisions\n- **Research Tools**: Academic and professional research on ETF structures\n\n**Response Data Structure**\n\n- `count` (int): Number of holdings returned\n- `data` ([]ETFHolding): Array of ETF holding items\n\n**ETFHolding fields:**\n- `symbol` (string): Holding stock symbol\n- `name` (string): Company or asset name\n- `shares` (int64): Number of shares held\n- `market_value` (float64): Total market value of holding\n- `weight` (float64): Percentage weight in portfolio\n- `sector` (string): Sector classification\n- `industry` (string): Industry classification\n- `country` (string): Country of incorporation\n- `asset_type` (string): Type of asset (Common Stock, Bond, etc.)\n- `price_per_share` (float64): Current price per share\n- `last_updated` (string): Last update date","parameters":[{"description":"ETF symbol (uppercase, e.g., SPY, QQQ, IWM)","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved ETF holdings data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ETFHolding"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get ETF Holdings Data","tags":["ETF"]}},"/v1/etf/info":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_etf_info_get.json)\nRetrieve comprehensive information about a specified ETF, including basic details, performance metrics, expense ratios, and fund characteristics.\n\n**Main Use Cases**\n- **Investment Research**: Get detailed ETF information for investment decisions\n- **Fund Comparison**: Compare different ETFs based on metrics and characteristics\n- **Performance Analysis**: Analyze historical returns and risk metrics\n- **Cost Analysis**: Evaluate expense ratios and fee structures\n- **Portfolio Planning**: Use ETF information for asset allocation strategies\n\n**Response Data Structure**\n\n`data` is an array of ETFInfo objects containing:\n- `symbol` (String): Ticker Symbol. The unique identifier for the ETF listed on an exchange (e.g., \"SPY\")\n- `name` (String): ETF Name. The official full name of the fund (e.g., \"SPDR S\u0026P 500 ETF Trust\")\n- `etf_company` (String): Issuer. The fund family or company managing the ETF (e.g., \"SPDR\")\n- `description` (String): Fund Description. A summary of the ETF's investment objective, tracked index, and key features\n- `website` (String): Official Website. The URL link to the product's official detail page\n- `updated_at` (Timestamp): Last Updated. The timestamp indicating when this data entry was last refreshed\n- `asset_class` (String): Asset Class. The primary category of assets the ETF invests in (e.g., \"Equity\" for stocks)\n- `assets_under_management` (Number): AUM. The total market value of the financial assets managed by the fund\n- `nav` (Number): Net Asset Value. The value per share of the ETF\n- `nav_currency` (String): Currency. The currency in which the NAV is denominated (e.g., \"USD\")\n- `avg_volume` (Number): Average Volume. The average number of shares traded daily over a specific period\n- `expense_ratio` (Number): Expense Ratio. The annual fee charged to investors to manage the fund (e.g., 0.0945 means 0.0945%)\n- `inception_date` (Date): Inception Date. The date when the fund was launched and began trading\n- `domicile` (String): Domicile. The country or jurisdiction where the fund is legally registered (e.g., \"US\")\n- `holdings_count` (Number): Holdings Count. The total number of individual securities held in the ETF portfolio\n- `isin` (String): ISIN. International Securities Identification Number; a unique code for identifying securities globally\n- `security_cusip` (String): CUSIP. A unique alphanumeric code used to identify securities, primarily in North America\n- `sectors_list` (Array): Sector Breakdown. A list showing how the fund's assets are distributed across different industries\n↳ `industry` (String): Industry Name. The specific sector category (e.g., \"Technology\", \"Financial Services\")\n↳ `exposure` (Number): Exposure (%). The percentage weight of this sector in the total portfolio. Note: For equity ETFs like SPY, this is typically Market-Cap Weighted, meaning sectors with larger capitalized companies have a higher percentage","parameters":[{"description":"ETF symbol (uppercase, e.g., SPY, QQQ, IWM)","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved ETF information","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ETFInfo"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get ETF Information","tags":["ETF"]}},"/v1/etf/sector-weightings":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_etf_sector-weightings_get.json)\nRetrieve sector allocation information for a specified ETF symbol. This endpoint provides detailed breakdown of the ETF's sector exposure and their respective weight percentages.\n\n**Main Use Cases**\n- **Sector Analysis**: Analyze ETF's sector diversification and concentration\n- **Risk Assessment**: Evaluate sector-specific risk exposure\n- **Portfolio Construction**: Use sector weightings for sector allocation\n- **Investment Research**: Understand ETF's sector distribution\n- **Performance Attribution**: Analyze performance by sector exposure\n\n**Response Data Structure**\n\n- `weightings` ([]SectorWeighting): Array of sector weighting items\n\n**SectorWeighting fields:**\n- `symbol` (string): ETF symbol\n- `sector` (string): Sector name (e.g., \"Technology\", \"Financial Services\")\n- `weight_percentage` (float64): Percentage weight as number (e.g., 34.62)\n- `updated_at` (string): Data update time (RFC3339), the last refresh time of this data","parameters":[{"description":"ETF symbol (uppercase, e.g., SPY, QQQ, IWM)","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved ETF sector weightings","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SectorWeighting"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get ETF Sector Weightings","tags":["ETF"]}},"/v1/macro/commodity/historical":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_commodity_historical_get.json)\nRetrieve historical data for a specified commodity symbol. Returns time series data including open, high, low, close prices and volume.\n\nBars are returned newest-first (date descending) by default. Pass `sort_order=asc` for chronological (oldest-first) order, which most time-series/technical-analysis consumers expect.","parameters":[{"description":"Commodity symbol (eg., GCUSD, ZLUSX, SILUSD)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Sort order by date: desc (default, newest first) or asc (oldest first)","enum":["asc","desc"],"in":"query","name":"sort_order","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved commodity historical data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CommodityData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Commodity Historical Data","tags":["Macro"]}},"/v1/macro/commodity/real-time":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_commodity_real-time_get.json)\nRetrieve real-time data for a specified commodity symbol. Returns simplified data with symbol, date, and price (close price).\n\n**Response Data Structure**\n\n- `data` (RealTimeData): Real-time commodity data\n\n**RealTimeData fields:**\n- `symbol` (string): Commodity symbol (e.g., \"GCUSD\", \"ZLUSX\", \"SILUSD\")\n- `date` (string): Quote time as an RFC3339 UTC timestamp, e.g. \"2026-08-04T13:26:49Z\" — the same convention as `time_period_start` on the kline endpoints. When FMP has no live quote and the prior session's stored close is served instead, the date is that session's day at \"2026-08-03T00:00:00Z\" — a 00:00:00 time identifies the session, it is not the moment the market closed.\n- `price` (float): Latest quoted price\n\n**Note:** The price is the latest available quote. When the market is closed it is the last quote of the prior session; some feeds are delayed at source (see the quote time). When FMP has no quote for the symbol, the API returns an empty data structure with default values: `{\"symbol\": \"\", \"date\": \"\", \"price\": 0}`.","parameters":[{"description":"Commodity symbol (eg., GCUSD, ZLUSX, SILUSD)","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved commodity real-time data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.RealTimeData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Commodity Real-Time Data","tags":["Macro"]}},"/v1/macro/commodity/symbols":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_commodity_symbols_get.json)\nRetrieve list of all available commodity symbols with their details including unit, exchange, and description.","produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved commodity symbol list","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CommoditySymbol"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Commodity Symbol List","tags":["Macro"]}},"/v1/macro/economic-indicators":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_economic-indicators_get.json)\nRetrieve economic indicator time series data with series metadata and observations\n\n**Overview**\nThis endpoint provides economic indicator data from FRED (Federal Reserve Economic Data), including series metadata (seasonal adjustment, frequency, units) and time series observations (date, value, release date).\n\n**Key Features**\n- **Series Metadata**: Returns complete series information including seasonal adjustment type, frequency, and units\n- **Release Dates**: Each observation includes its first release date (when the data was initially published)\n- **Flexible Time Filtering**: Choose to filter by observed_at (publish timestamp) or calendar date\n- **Point-in-Time Data**: Tracks when data was released, supporting historical analysis\n\n**Indicator Types**\nCurrently supported 34 indicators:\n- **GDP**: Gross Domestic Product\n- **REAL_GDP**: Real Gross Domestic Product (GDPC1)\n- **REAL_GDP_PER_CAPITA**: Real GDP Per Capita (A939RX0Q048SBEA)\n- **INITIAL_CLAIMS**: Initial Jobless Claims (ICSA)\n- **UNEMPLOYMENT_RATE**: Unemployment Rate (UNRATE)\n- **TOTAL_NONFARM_PAYROLL**: Total Nonfarm Payroll (PAYEMS)\n- **FEDERAL_FUNDS**: Federal Funds Effective Rate (FEDFUNDS)\n- **CPI**: Consumer Price Index (CPIAUCSL)\n- **INFLATION_RATE_YOY**: Inflation Rate YoY (FPCPITOTLZGUSA)\n- **CORE_PPI**: Core PPI - Final Demand Less Foods and Energy (PPIFES)\n- **PPI_FINAL_DEMAND**: PPI Final Demand (PPIFIS)\n- **CONSUMER_SENTIMENT**: Consumer Sentiment Index (UMCSENT)\n- **CONSUMER_INFLATION_EXPECTATIONS**: Consumer Inflation Expectations (MICH)\n- **RETAIL_SALES**: Retail Sales (RSXFS)\n- **DURABLE_GOODS**: Durable Goods Orders (DGORDER)\n- **INDUSTRIAL_PRODUCTION**: Industrial Production Index (INDPRO)\n- **SMOOTHED_RECESSION_PROBABILITIES**: Smoothed Recession Probabilities (RECPROUSM156N)\n- **CORE_CPI**: Core CPI - All Items Less Food and Energy (CPILFESL)\n- **TIPS_5_YEAR**: 5-Year Treasury Inflation-Indexed Security (DFII5)\n- **TIPS_10_YEAR**: 10-Year Treasury Inflation-Indexed Security (DFII10)\n- **TIPS_20_YEAR**: 20-Year Treasury Inflation-Indexed Security (DFII20)\n- **TIPS_30_YEAR**: 30-Year Treasury Inflation-Indexed Security (DFII30)\n- **VIX**: CBOE Volatility Index (VIXCLS)\n- **TREASURY_YIELD_1_MONTH**: 1-Month Treasury Constant Maturity Rate (DGS1MO)\n- **TREASURY_YIELD_3_MONTH**: 3-Month Treasury Constant Maturity Rate (DGS3MO)\n- **TREASURY_YIELD_6_MONTH**: 6-Month Treasury Constant Maturity Rate (DGS6MO)\n- **TREASURY_YIELD_2_YEAR**: 2-Year Treasury Constant Maturity Rate (DGS2)\n- **TREASURY_YIELD_5_YEAR**: 5-Year Treasury Constant Maturity Rate (DGS5)\n- **TREASURY_YIELD_10_YEAR**: 10-Year Treasury Constant Maturity Rate (DGS10)\n- **TREASURY_YIELD_20_YEAR**: 20-Year Treasury Constant Maturity Rate (DGS20)\n- **TREASURY_YIELD_30_YEAR**: 30-Year Treasury Constant Maturity Rate (DGS30)\n- **GOLD_VIX**: CBOE Gold ETF Volatility Index (GVZCLS)\n- **CRUDE_OIL_VIX**: CBOE Crude Oil ETF Volatility Index (OVXCLS)\n- **RUSSELL_2000_VIX**: CBOE Russell 2000 Volatility Index (RVXCLS)\n\n**Time Filter Types**\n- **OBSERVED_AT**: Filter by observation publish timestamp (when data was released to FRED)\n- **CALENDAR_START_DATE**: Filter by the calendar date that the observation represents (e.g., 2024-01-01 for Q1 2024)\n- **RELEASE_DATE**: Filter by release/vintage date (when the data revision was published by FRED)\n\n**Response Structure**\nThe response contains two parts:\n- **series**: Metadata about the indicator (name, title, seasonal adjustment (e.g., \"Seasonally Adjusted Annual Rate\", \"Seasonally Adjusted\", \"Not Seasonally Adjusted\"), frequency, units, notes)\n- **observations**: Array of data points, each containing:\n- **date**: Calendar date of the observation (ISO 8601 format, e.g., \"2024-01-01\")\n- **value**: Indicator value (double precision)\n- **releaseDate**: First release date in ISO 8601 format (e.g., \"2024-04-25\")\n- **observedAt**: Observation publish timestamp (Unix timestamp in seconds, e.g., 1714041000)\n\n**Usage Examples**\n\n1. **Get GDP data by observed_at (publish time)**:\n`?indicator_type=GDP\u0026time_type=OBSERVED_AT\u0026start_time=1704067200\u0026end_time=1735689600`\n\n2. **Get GDP data by calendar date**:\n`?indicator_type=GDP\u0026time_type=CALENDAR_START_DATE\u0026start_time=1704067200\u0026end_time=1735689600`\n\n**Important Notes**\n\n- All parameters are required (indicator_type, time_type, start_time, end_time)\n- Timestamps are Unix timestamps in seconds (UTC)\n- CALENDAR_START_DATE filter is recommended for most use cases\n- OBSERVED_AT filter is useful for tracking when data was published/updated\n- Release dates indicate when data first appeared (initial release, not revisions)\n- Seasonal adjustment info helps interpret the data correctly","parameters":[{"description":"Indicator type (enum, required)","enum":["GDP","REAL_GDP","REAL_GDP_PER_CAPITA","INITIAL_CLAIMS","UNEMPLOYMENT_RATE","TOTAL_NONFARM_PAYROLL","FEDERAL_FUNDS","CPI","INFLATION_RATE_YOY","CORE_PPI","PPI_FINAL_DEMAND","CONSUMER_SENTIMENT","CONSUMER_INFLATION_EXPECTATIONS","RETAIL_SALES","DURABLE_GOODS","INDUSTRIAL_PRODUCTION","SMOOTHED_RECESSION_PROBABILITIES","CORE_CPI","TIPS_5_YEAR","TIPS_10_YEAR","TIPS_20_YEAR","TIPS_30_YEAR","VIX","TREASURY_YIELD_1_MONTH","TREASURY_YIELD_3_MONTH","TREASURY_YIELD_6_MONTH","TREASURY_YIELD_2_YEAR","TREASURY_YIELD_5_YEAR","TREASURY_YIELD_10_YEAR","TREASURY_YIELD_20_YEAR","TREASURY_YIELD_30_YEAR","GOLD_VIX","CRUDE_OIL_VIX","RUSSELL_2000_VIX"],"in":"query","name":"indicator_type","required":true,"type":"string"},{"description":"Time filter type (enum, required)","enum":["OBSERVED_AT","CALENDAR_START_DATE","RELEASE_DATE"],"in":"query","name":"time_type","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved economic indicators","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.EconomicIndicatorsDataV2"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Economic Indicators","tags":["Macro"]}},"/v1/macro/forex/historical":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_forex_historical_get.json)\nRetrieve historical data for a specified forex currency pair. Returns time series data including open, high, low, close prices and volume.\n\nBars are returned newest-first (date descending) by default. Pass `sort_order=asc` for chronological (oldest-first) order, which most time-series/technical-analysis consumers expect.","parameters":[{"description":"Forex symbol (e.g., EURUSD, GBPJPY)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Sort order by date: desc (default, newest first) or asc (oldest first)","enum":["asc","desc"],"in":"query","name":"sort_order","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved forex historical data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ForexData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Forex Historical Data","tags":["Macro"]}},"/v1/macro/forex/real-time":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_forex_real-time_get.json)\nRetrieve real-time data for a specified forex currency pair. Returns simplified data with symbol, date, and price (close price).\n\n**Response Data Structure**\n\n- `data` (RealTimeData): Real-time forex data\n\n**RealTimeData fields:**\n- `symbol` (string): Forex symbol (e.g., \"EURUSD\", \"GBPJPY\")\n- `date` (string): Quote time as an RFC3339 UTC timestamp, e.g. \"2026-08-04T13:26:49Z\" — the same convention as `time_period_start` on the kline endpoints. When FMP has no live quote and the prior session's stored close is served instead, the date is that session's day at \"2026-08-03T00:00:00Z\" — a 00:00:00 time identifies the session, it is not the moment the market closed.\n- `price` (float): Latest quoted price\n\n**Note:** The price is the latest available quote. When the market is closed it is the last quote of the prior session; some feeds are delayed at source (see the quote time). When FMP has no quote for the symbol, the API returns an empty data structure with default values: `{\"symbol\": \"\", \"date\": \"\", \"price\": 0}`.","parameters":[{"description":"Forex symbol (e.g., EURUSD, GBPJPY)","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved forex real-time data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.RealTimeData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Forex Real-Time Data","tags":["Macro"]}},"/v1/macro/forex/symbols":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_forex_symbols_get.json)\nRetrieve list of all available forex currency pairs with their details including base and quote currencies.","produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved forex symbol list","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ForexSymbol"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Forex Symbol List","tags":["Macro"]}},"/v1/macro/index/historical":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_index_historical_get.json)\nRetrieve historical data for a specified stock index symbol. Returns time series data including open, high, low, close prices and volume.\n\n**Response Data Structure**\n\n- `data` ([]IndexData): Array of historical index data\n\n**IndexData fields:**\n- `symbol` (string): Index symbol (e.g., \"^SPX\", \"^DJI\")\n- `date` (string): Date in YYYY-MM-DD format\n- `open` (float): Opening price\n- `high` (float): Highest price\n- `low` (float): Lowest price\n- `close` (float): Closing price\n- `volume` (int): Trading volume\n\nBars are returned newest-first (date descending) by default. Pass `sort_order=asc` for chronological (oldest-first) order, which most time-series/technical-analysis consumers expect.","parameters":[{"description":"Index symbol. Accepts the roster form (^SPX, DX-Y.NYB), the bare form (SPX), or a common alias (DXY, GSPC, 10Y). See /v1/macro/index/symbols for the full list.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Sort order by date: desc (default, newest first) or asc (oldest first)","enum":["asc","desc"],"in":"query","name":"sort_order","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved index historical data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.IndexData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Index Historical Data","tags":["Macro"]}},"/v1/macro/index/real-time":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_index_real-time_get.json)\nRetrieve real-time data for a specified stock index symbol. Returns simplified data with symbol, date, and price (close price).\n\n**Response Data Structure**\n\n- `data` (RealTimeData): Real-time index data\n\n**RealTimeData fields:**\n- `symbol` (string): Index symbol (e.g., \"^SPX\", \"^DJI\")\n- `date` (string): Quote time as an RFC3339 UTC timestamp, e.g. \"2026-08-04T13:26:49Z\" — the same convention as `time_period_start` on the kline endpoints. When FMP has no live quote and the prior session's stored close is served instead, the date is that session's day at \"2026-08-03T00:00:00Z\" — a 00:00:00 time identifies the session, it is not the moment the market closed.\n- `price` (float): Latest quoted price\n\n**Note:** The price is the latest available quote. When the market is closed it is the last quote of the prior session; some feeds are delayed at source (see the quote time). When FMP has no quote for the symbol, the API returns an empty data structure with default values: `{\"symbol\": \"\", \"date\": \"\", \"price\": 0}`.","parameters":[{"description":"Index symbol. Accepts the roster form (^SPX, DX-Y.NYB), the bare form (SPX), or a common alias (DXY, GSPC, 10Y). See /v1/macro/index/symbols for the full list.","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved index real-time data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.RealTimeData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Index Real-Time Data","tags":["Macro"]}},"/v1/macro/index/symbols":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_index_symbols_get.json)\nRetrieve list of all available index symbols with their details.","produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved index symbol list","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.IndexSymbol"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Index Symbol List","tags":["Macro"]}},"/v1/macro/treasury-rates":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_macro_treasury-rates_get.json)\nRetrieve US Treasury rates data for different maturities over time\n\n**Feature Overview**\nGet historical treasury rates including 1M, 2M, 3M, 6M, 1Y, 2Y, 3Y, 5Y, 7Y, 10Y, 20Y, and 30Y rates.\n\n**Main Use Cases**\n- **Interest Rate Analysis**: Track treasury rate changes over time\n- **Investment Research**: Analyze yield curve movements and trends\n- **Economic Analysis**: Monitor economic indicators through treasury rates\n- **Portfolio Management**: Use rates for bond portfolio strategy\n- **Risk Assessment**: Evaluate interest rate risk across different maturities\n\n**Response Data Structure**\n\nEach rate record includes:\n- **date**: Rate date (YYYY-MM-DD format)\n- **month1**: 1 Month treasury rate\n- **month2**: 2 Month treasury rate\n- **month3**: 3 Month treasury rate\n- **month6**: 6 Month treasury rate\n- **year1**: 1 Year treasury rate\n- **year2**: 2 Year treasury rate\n- **year3**: 3 Year treasury rate\n- **year5**: 5 Year treasury rate\n- **year7**: 7 Year treasury rate\n- **year10**: 10 Year treasury rate\n- **year20**: 20 Year treasury rate\n- **year30**: 30 Year treasury rate\n\n**Usage Examples**\n\n1. **Get latest treasury rates**:\nNo parameters needed\n\n2. **Get rates from specific date**:\n`?start_time=1745971200`\n\n3. **Get rates for date range**:\n`?start_time=1745971200\u0026end_time=1748563200`","parameters":[{"description":"Start time (Unix timestamp in seconds)","example":1745971200,"format":"int64","in":"query","name":"start_time","type":"integer"},{"description":"End time (Unix timestamp in seconds)","example":1748563200,"format":"int64","in":"query","name":"end_time","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.TreasuryRate"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/model.APIResponse"}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/model.APIResponse"}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Treasury Rates","tags":["Macro"]}},"/v1/market/kline":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_market_kline_get.json)\nReturns standardized OHLCV kline data for any supported asset type.\nThe `trading_pair` uses the format `\u003cMarket\u003e_\u003cInstrumentType\u003e_\u003cSymbol\u003e_\u003cCurrency\u003e`.\n\n**Supported combinations:**\n| Scenario | trading_pair example | Interval |\n|---|---|---|\n| Crypto spot | `BINANCE_SPOT_BTC_USDT` | All |\n| Crypto perp | `BINANCE_PERP_ETH_USDT` | All |\n| Hyperliquid spot | `HYPERLIQUID_SPOT_BTC_USDC` | All |\n| Hyperliquid perp | `HYPERLIQUID_PERP_AAPL_USDC` | All |\n| Stock spot | `US_SPOT_AAPL_USD` | All |\n| Stock option | `US_OPTION_AAPL250620C00200000_USD` | All |\n| ETF spot | `US_SPOT_SPY_USD` | All |\n| ETF option | `US_OPTION_SPY260402C00400000_USD` | All |\n| Index spot | `US_SPOT_SPX_USD` | 1d only |\n| Index option | `US_OPTION_SPX260402C04000000_USD` | All |\n| Commodity future | `CME_FUTURE_GCUSD_USD` | 1d only |\n| FX spot | `FX_SPOT_EURUSD_USD` | 1d only |\n| Non-US stock spot | `HK_SPOT_0700_HKD` (market = exchange suffix, symbol without suffix) | All |","parameters":[{"description":"Trading pair (e.g. BINANCE_SPOT_BTC_USDT, US_SPOT_AAPL_USD)","in":"query","name":"trading_pair","required":true,"type":"string"},{"description":"Start time in ISO 8601 / RFC3339 format (e.g. 2025-01-01T00:00:00Z)","in":"query","name":"start_time","required":true,"type":"string"},{"description":"End time in ISO 8601 / RFC3339 format (e.g. 2025-01-02T00:00:00Z)","in":"query","name":"end_time","required":true,"type":"string"},{"description":"Kline interval","enum":["1min","5min","15min","30min","1h","4h","1d","1w","1m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Max number of bars (default 500, max 10000)","in":"query","name":"limit","type":"integer"},{"description":"Trading session: RTH or ETH (default ETH, stock/option only)","in":"query","name":"session","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MarketKlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/model.APIResponse"}}},"summary":"Get unified market kline (OHLCV)","tags":["Market"]}},"/v1/market/trading-pairs":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_market_trading-pairs_get.json)\nReturns all available trading pairs for a given symbol, grouped by instrument type\nNon-US stocks are accepted with or without their exchange suffix: `0700.HK` returns only the Hong Kong listing (`HK_SPOT_0700_HKD`), while bare `0700` or `7203` returns every active listing sharing that ticker across exchanges (e.g. `T_SPOT_7203_JPY` and `SR_SPOT_7203_SAR`, which are different companies).","parameters":[{"description":"Canonical symbol (e.g. BTC, NVDA, VOO, 0700.HK), or a non-US ticker without suffix (e.g. 0700)","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SymbolTradingPairsResponse"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/model.APIResponse"}}},"summary":"Get trading pairs for a symbol","tags":["Market"]}},"/v1/options/chain":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_options_chain_get.json)\nRetrieve option chain data including pricing, Greeks, implied volatility, and underlying asset info. Supports filtering by stock ticker, option ticker, expiration date range, contract type, and strike price range.\n\n**Supported Filter Parameters**\n\n| Parameter | Type | Description | Example |\n|-----------|------|-------------|---------|\n| symbol | string | Stock ticker symbol (required) | \"AAPL\" |\n| option_ticker | string | Option ticker symbol (optional) | \"AAPL240315C00150000\" |\n| start_expiration_date | int64 | Start expiration date (Unix timestamp) | 1704067200 |\n| end_expiration_date | int64 | End expiration date (Unix timestamp) | 1706745600 |\n| contract_type | string | Contract type filter | \"call\" or \"put\" |\n| min_strike_price | float64 | Minimum strike price | 100.0 |\n| max_strike_price | float64 | Maximum strike price | 200.0 |\n| cursor | string | Pagination cursor | \"eyJleHBpcmF0aW9uX2RhdGUiOiI...\" |\n| limit | int64 | Maximum number of results (1-1000) | 50 |\n\n**Response Data Structure**\n\nEach option contract includes:\n- **Contract Details**: ticker, contract type, exercise style, expiration date, shares per contract, strike price\n- **Pricing Data**: break even price, fair market value (FMV), implied volatility\n- **Greeks**: delta, gamma, theta, vega\n- **Market Data**: open interest, daily price changes\n- **Underlying Asset**: current price, change to break even, last updated\n\n**Common Query Examples**\n\n1. **All AAPL options**:\n`?symbol=AAPL\u0026limit=50`\n\n2. **AAPL call options expiring in March 2024**:\n`?symbol=AAPL\u0026contract_type=call\u0026start_expiration_date=1704067200\u0026end_expiration_date=1706745600\u0026limit=100`\n\n3. **AAPL options with strike price between $150-$200**:\n`?symbol=AAPL\u0026min_strike_price=150\u0026max_strike_price=200\u0026limit=50`\n\n4. **Specific option contract**:\n`?symbol=AAPL\u0026option_ticker=AAPL240315C00150000\u0026limit=1`\n\n**Pagination**\n\nThe API supports cursor-based pagination:\n- Use the `cursor` field from the response to get the next page\n- Set `limit` to control the number of results per page\n- When no more results are available, the `cursor` field will be empty\n\n**Important Notes**\n\n- **Expired options are not included** in the response. If the specified expiration window is entirely in the past, the response will be an empty list\n- All filter parameters are optional; if not provided, no filter is applied\n- Date parameters use Unix timestamp in seconds\n- Strike prices are in the same currency as the underlying stock\n- Greeks and implied volatility are calculated using standard options pricing models\n- Data is real-time or near real-time depending on market conditions\n- min_strike_price must be \u003c= max_strike_price when both are provided","parameters":[{"description":"Stock ticker symbol (uppercase)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Option ticker symbol (uppercase)","in":"query","name":"option_ticker","type":"string"},{"description":"Start expiration date (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_expiration_date","type":"integer"},{"description":"End expiration date (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_expiration_date","type":"integer"},{"description":"Contract type filter","enum":["put","call"],"in":"query","name":"contract_type","type":"string"},{"description":"Minimum strike price","format":"float64","in":"query","name":"min_strike_price","type":"number"},{"description":"Maximum strike price","format":"float64","in":"query","name":"max_strike_price","type":"number"},{"description":"Pagination cursor","in":"query","name":"cursor","type":"string"},{"description":"Maximum number of results (1-1000)","format":"int64","in":"query","name":"limit","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved option chain","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.GetOptionChainResponse"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Option Chain","tags":["Options"]}},"/v1/options/contracts":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_options_contracts_get.json)\nQuery options contracts by underlying symbol with optional filters.\nReturns contract metadata (no Greeks/pricing). Supports cursor pagination.\n\n**Filters:**\n- `is_expired`: `false` (default shows active), `true` (expired only), or `all`\n- `options_ticker`: exact match for a specific contract\n- `contract_type`: `call` or `put`\n- `expiration_date_min`/`max`: YYYY-MM-DD format\n- `strike_price_min`/`max`: numeric\n- `exercise_style`: `american` or `european`\n\n**Response fields:**\n- `options_ticker`: OCC-format ticker (e.g. O:SPY260620C00570000)\n- `underlying_symbol`, `contract_type`, `exercise_style`\n- `expiration_date` (YYYY-MM-DD), `strike_price`, `shares_per_contract`\n- `primary_exchange`, `cfi`, `is_expired`","parameters":[{"description":"Underlying symbol (e.g. SPY, AAPL)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Exact options contract ticker","in":"query","name":"options_ticker","type":"string"},{"description":"Expired filter: false (default), true, or all","enum":["true","false","all"],"in":"query","name":"is_expired","type":"string"},{"description":"Contract type","enum":["call","put"],"in":"query","name":"contract_type","type":"string"},{"description":"Min expiration date (YYYY-MM-DD)","in":"query","name":"expiration_date_min","type":"string"},{"description":"Max expiration date (YYYY-MM-DD)","in":"query","name":"expiration_date_max","type":"string"},{"description":"Min strike price","in":"query","name":"strike_price_min","type":"number"},{"description":"Max strike price","in":"query","name":"strike_price_max","type":"number"},{"description":"Exercise style","enum":["american","european"],"in":"query","name":"exercise_style","type":"string"},{"description":"Sort field","enum":["expiration_date","strike_price","options_ticker"],"in":"query","name":"sort_by","type":"string"},{"description":"Sort direction","enum":["asc","desc"],"in":"query","name":"sort_order","type":"string"},{"description":"Pagination cursor from previous response","in":"query","name":"cursor","type":"string"},{"description":"Results per page (default 100, max 1000)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Contract list","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.OptionsContractData"},"type":"array"},"pagination":{"$ref":"#/definitions/model.CursorPagination"}},"type":"object"}]}},"400":{"description":"Bad request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Service unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"List Options Contracts","tags":["Options"]}},"/v1/options/greeks":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_options_greeks_get.json)\n\nReturns the in-house-computed Greeks (delta, gamma, theta, vega,\nimplied volatility) time series for one option contract over\n[start_date, end_date] inclusive, ordered by date. Daily\nhistorical data, not real-time.","parameters":[{"description":"OCC contract symbol, e.g. O:AAPL260418C00260000","in":"query","name":"options_ticker","required":true,"type":"string"},{"description":"Start date, YYYY-MM-DD","in":"query","name":"start_date","required":true,"type":"string"},{"description":"End date, YYYY-MM-DD","in":"query","name":"end_date","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.OptionsGreeksPoint"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get historical Greeks for a single option contract","tags":["Options"]}},"/v1/options/kline":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_options_kline_get.json)\nRetrieve options OHLCV + VWAP candlestick data for a specific contract.\n\n**Options ticker format (OCC):** `O:{UNDERLYING}{YYMMDD}{C/P}{STRIKE}` e.g. `O:SPY260620C00570000`\n\n**Data source:** Polygon.io flat files (historical, T+1) + REST API (today, on-demand backfill). VWAP computed from trades data (historical) or Polygon aggregates (today).\n\n**Completeness:** a range whose recent days are not yet synced triggers an on-demand Polygon backfill. If that backfill cannot finish, the endpoint returns `503 UNAVAILABLE` rather than a `200` missing those days — a partial series is indistinguishable from a complete one, so it is never served silently. Retry after a short delay; in-flight fetches keep running and land server-side. A range needing more than 60 days of backfill returns `400 INVALID_PARAMETER`; narrow the window or request it in chunks.\n\n**Interval routing:**\n- `1min`: Raw 1-minute bars\n- `2min`–`10min`: Aggregated from 1-minute data\n- `15min`: Raw 15-minute bars\n- `30min`–`4h`: Aggregated from 15-minute data\n- `1d`: Raw daily bars\n- `1w`, `1m`: Aggregated from daily data\n\n**Response fields:**\n- `options_ticker`: OCC-format options ticker\n- `underlying_symbol`: Underlying stock symbol\n- `time_open`: Period start (Unix timestamp seconds)\n- `time_close`: Period end (Unix timestamp seconds)\n- `price_open`, `price_high`, `price_low`, `price_close`: OHLC prices\n- `volume_traded`: Trading volume\n- `trades_count`: Number of trades\n- `vwap`: Volume-weighted average price","parameters":[{"description":"Underlying symbol (e.g. SPY, AAPL)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"OCC-format options ticker (e.g. O:SPY260620C00570000)","in":"query","name":"options_ticker","required":true,"type":"string"},{"description":"Interval","enum":["1min","2min","3min","5min","10min","15min","30min","45min","1h","2h","4h","1d","1w","1m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Start time (Unix seconds)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix seconds)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Limit (default 500, max 10000)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Options kline data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.OptionsKlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Service unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Options K-line (OHLCV) data","tags":["Options"]}},"/v1/other/podcast/shows":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_other_podcast_shows_get.json)\nThe curated shows we follow, with how much of each one is held.\n`podcast_show_id` is the stable identifier; pass it, or `name`, to\n`/other/podcast/transcripts`.\n`episode_count` is what has been discovered within the ingestion window\n(a year by default); `transcript_count` is how many of those have text.\nEvery filter is optional — a few hundred rows.","parameters":[{"description":"Show name, case-insensitive exact match","in":"query","name":"name","type":"string"},{"description":"Show identifier; beats name when both given","in":"query","name":"podcast_show_id","type":"integer"},{"description":"Max rows, 1-200 (default 10)","in":"query","name":"limit","type":"integer"},{"description":"Rows to skip (default 0)","in":"query","name":"offset","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Shows","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PodcastShow"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"List podcast shows","tags":["Other"]}},"/v1/other/podcast/transcripts":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_other_podcast_transcripts_get.json)\nRetrieve stored official podcast transcripts, newest first.\nFilter by `podcast_show_id`, `podcast_show_name` or `speaker` — at least\none is required unless both `updated_after` and `updated_before` are supplied.\nUpdate polling selects episode rows within [updated_after, updated_before),\nordered by updated_at ASC, id ASC. Times are Unix seconds; all shows may be\nqueried with a bounded window. Existing filters intersect that window.\nUpdates include episode metadata, transcript and attribution changes, not lease/retry bookkeeping.\nShow/person metadata has a separate lifecycle. Each item returns the stable\nArrays record `id`, the publisher `episode_id`, and RFC3339 `updated_at`.\nFor update polling, pass pagination.cursor unchanged with the same window,\nand filters. Limit and include_raw may change on retry without restarting.\nAn omitted cursor with has_more=false means the window is\ndrained. Start each new window without the old cursor. Offset is not allowed.\nThis is current-state polling, not a snapshot or deletion/history feed:\noverlap windows and reconcile delayed writes; intermediate versions may coalesce.\n`podcast_show_id` comes from `/other/podcast/shows`. `podcast_show_name`\ntakes the name instead and resolves it server-side. The response reports\nthe show name as `podcast_show_name`.\n`speaker` matches a person in the returned `resolved_speakers`, including\nhost, guest and clip attributions. Registry names and aliases match linked\nidentities; stored resolved names also match directly. Publisher-only labels\nand attributions excluded from the response do not match. Clips are not guests.\n`resolved_speakers[*].person_id`, `hosts` and `guests` contain only terminal\nperson-registry UUIDs, matching `/persons`. Historical IDs and merged UUIDs\nare resolved on read. Unlinked speakers keep their name but omit `person_id`;\nunresolved references are omitted from `hosts` and `guests`.\n`source_segments` contains text plus only speaker labels and times supplied\nby the original document or ASR provider. `transcript` remains the legacy\nnormalized rendering. Set `include_source_segments=true` to receive it;\nolder episodes may omit `source_segments` until replayed.\n`listen_url` opens the matched Apple episode when available;\notherwise it is the original RSS audio link. A show-only Apple\nmatch does not replace the episode audio link.\n`speaker_labels=names` rewrites `transcript` so every turn opens with who\nsaid it, e.g. `Jay Rughani (host) @ 0:00:00.72: ...`, in the shape an earnings\ncall has. Names come from `resolved_speakers`. A voice with no name and the\nlines in `unknown_turn_indexes` read `Unidentified speaker N`, with N the stored\nvoice number. Each turn uses its exact `resolved_speakers[spk N]` entry,\nfor both single-voice and multi-voice transcripts. A name on another slot is\nnever used as a fallback. Timestamps are kept.\nThis formats existing attribution; it does not detect unmarked speaker changes\nwithin a line. An `unknown_turn_indexes` entry leaves the whole line unidentified.\nThe default `ids` leaves `transcript` as stored.\n`resolved_speakers[slot].unknown_turn_indexes` lists zero-based `transcript`\nlines that v3 could not safely attribute to that person, despite sharing a slot.","parameters":[{"description":"Show identifier from /other/podcast/shows","in":"query","name":"podcast_show_id","type":"integer"},{"description":"Show name, resolved to podcast_show_id. A name matching several shows or none is an error naming them, not an empty page; so is one that disagrees with podcast_show_id","in":"query","name":"podcast_show_name","type":"string"},{"description":"Exact resolved speaker name or registry alias (case-insensitive), including clip","in":"query","name":"speaker","type":"string"},{"description":"Publication day YYYY-MM-DD; same value the response reports as date","in":"query","name":"date","type":"string"},{"description":"Also attach the original file (default false)","in":"query","name":"include_raw","type":"boolean"},{"description":"Attach source text and source-provided speaker/time annotations (default false)","in":"query","name":"include_source_segments","type":"boolean"},{"description":"How transcript names who is speaking: ids (default, the stored [spk N @ t]) or names (each turn opens with the speaker's name)","enum":["ids","names"],"in":"query","name":"speaker_labels","type":"string"},{"description":"Max rows, 1-50 (default 10)","in":"query","name":"limit","type":"integer"},{"description":"Rows to skip (default 0)","in":"query","name":"offset","type":"integer"},{"description":"Inclusive episode update bound (Unix seconds); requires updated_before","format":"int64","in":"query","name":"updated_after","type":"integer"},{"description":"Exclusive episode update bound (Unix seconds); must exceed updated_after","format":"int64","in":"query","name":"updated_before","type":"integer"},{"description":"Opaque update-window continuation; incompatible with offset","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Transcripts","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PodcastTranscript"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Podcast Transcripts","tags":["Other"]}},"/v1/other/semiconductor/dram-contract-price":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_other_semiconductor_dram-contract-price_get.json)\nRetrieve DRAM contract (monthly) price data, filtered by item and date range.","parameters":[{"description":"DRAM contract item","enum":["DDR2 1Gb 64Mx16","DDR2 512Mb 32Mx16","DDR3 1Gb 64Mx16","DDR3 2Gb 128Mx16","DDR3 4Gb 256Mx16","DDR4 16GB SO-DIMM","DDR4 16GB U-DIMM","DDR4 16Gb 1Gx16","DDR4 16Gb 2Gx8","DDR4 4Gb 256Mx16","DDR4 8GB SO-DIMM","DDR4 8GB U-DIMM","DDR4 8Gb 1Gx8","DDR4 8Gb 512Mx16","DDR5 16GB SO-DIMM","DDR5 16GB U-DIMM","DDR5 16Gb 2Gx8","DDR5 8GB SO-DIMM","DDR5 8GB U-DIMM"],"in":"query","name":"item","required":true,"type":"string"},{"description":"Start time (Unix seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SemiconductorPriceData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get DRAM Contract Price Data","tags":["Semiconductor"]}},"/v1/other/semiconductor/dram-spot-price":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_other_semiconductor_dram-spot-price_get.json)\nRetrieve DRAM spot price data, filtered by item and date range.","parameters":[{"description":"DRAM item","enum":["DDR3 2Gb 128Mx16 1600/1866","DDR3 2Gb 256Mx8 1600/1866","DDR3 4Gb 256Mx16 1600/1866","DDR3 4Gb 512Mx8 1600/1866","DDR3 4Gb 512Mx8 eTT","DDR4 16Gb (1Gx16) 3200","DDR4 16Gb (2Gx8) 2666","DDR4 16Gb (2Gx8) 3200","DDR4 16Gb (2Gx8) eTT","DDR4 4Gb (256Mx16) 2400/2666","DDR4 4Gb (512Mx8) 2400/2666","DDR4 4Gb 512Mx8 eTT","DDR4 8Gb (1Gx8) 2666","DDR4 8Gb (1Gx8) 3200","DDR4 8Gb (1Gx8) eTT","DDR4 8Gb (512Mx16) 2666","DDR4 8Gb (512Mx16) 3200","DDR5 16Gb (2Gx8) 4800/5600","DDR5 16Gb (2Gx8) eTT"],"in":"query","name":"item","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SemiconductorPriceData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get DRAM Spot Price Data","tags":["Semiconductor"]}},"/v1/other/semiconductor/dxi-index":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_other_semiconductor_dxi-index_get.json)\nRetrieve the TrendForce DRAMeXchange (DXI) daily index series.","parameters":[{"description":"Start time (Unix seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.DXIPoint"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get DXI Index Data","tags":["Semiconductor"]}},"/v1/other/semiconductor/memory-card-price":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_other_semiconductor_memory-card-price_get.json)\nRetrieve Memory Card price data, filtered by item and date range.","parameters":[{"description":"Memory Card item","enum":["MicroSD 128GB","MicroSD 16GB","MicroSD 256GB","MicroSD 32GB","MicroSD 64GB","MicroSD 8GB"],"in":"query","name":"item","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SemiconductorPriceData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Memory Card Price Data","tags":["Semiconductor"]}},"/v1/other/semiconductor/nand-flash-contract-price":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_other_semiconductor_nand-flash-contract-price_get.json)\nRetrieve NAND Flash contract (monthly) price data, filtered by item and date range.","parameters":[{"description":"NAND Flash contract item","enum":["NAND 128Gb 16Gx8 MLC","NAND 16Gb 2Gx8 SLC","NAND 1Gb 128Mx8 SLC","NAND 2Gb 256Mx8 SLC","NAND 32Gb 4Gx8 MLC","NAND 32Gb 4Gx8 SLC","NAND 4Gb 512Mx8 SLC","NAND 64Gb 8Gx8 MLC","NAND 8Gb 1024Mx8 SLC"],"in":"query","name":"item","required":true,"type":"string"},{"description":"Start time (Unix seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SemiconductorPriceData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get NAND Flash Contract Price Data","tags":["Semiconductor"]}},"/v1/other/semiconductor/nand-flash-spot-price":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_other_semiconductor_nand-flash-spot-price_get.json)\nRetrieve NAND Flash spot price data, filtered by item and date range.","parameters":[{"description":"NAND Flash item","enum":["MLC 128Gb 16GBx8","MLC 256Gb 32GBx8","MLC 32Gb 4GBx8","MLC 64Gb 8GBx8","SLC 16Gb 2GBx8","SLC 1Gb 128MBx8","SLC 2Gb 256MBx8","SLC 4Gb 512MBx8","SLC 8Gb 1GBx8"],"in":"query","name":"item","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SemiconductorPriceData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get NAND Flash Spot Price Data","tags":["Semiconductor"]}},"/v1/other/youtube/videos":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_other_youtube_videos_get.json)\nLists current YouTube video extraction results for configured channels. The update window is [updated_after, updated_before), ordered by updated_at then id; continue with pagination.cursor.\nWith include_content, a transcript segment's speaker is the voice that talks most during it: its name when the audio speaker identification is at least 0.4 sure of it, otherwise \"spk N\". speakers has one entry per voice the identification listed, labeled as the segments are, with name, role, confidence and attribution_source; a name below 0.4 stays there. A video not yet identified keeps the captions' own name labels. If no voice is named with confidence 0.4 or more, the captions' own name labels are kept when they have any, and the segments show \"spk N\" when they have none.","parameters":[{"description":"Configured YouTube channel id","in":"query","name":"channel_id","type":"string"},{"description":"Inclusive update bound, Unix seconds","format":"int64","in":"query","name":"updated_after","required":true,"type":"integer"},{"description":"Exclusive update bound, Unix seconds","format":"int64","in":"query","name":"updated_before","required":true,"type":"integer"},{"description":"Page size, 1-500 (max 50 with include_content)","format":"int32","in":"query","name":"limit","type":"integer"},{"description":"Opaque update-window continuation","in":"query","name":"cursor","type":"string"},{"description":"Include transcript, speaker matches, description and screenshots","in":"query","name":"include_content","type":"boolean"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.YouTubeContent"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Service Unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"List YouTube video content","tags":["Other"]}},"/v1/other/youtube/videos/{video_id}":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_other_youtube_videos_video-id_get.json)\nReturns the current extraction result for one YouTube video. Set include_content=true for the transcript, speaker matches and screenshots.\nA transcript segment's speaker is the voice that talks most during it: its name when the audio speaker identification is at least 0.4 sure of it, otherwise \"spk N\". speakers has one entry per voice the identification listed, labeled as the segments are, with name, role, confidence and attribution_source; a name below 0.4 stays there. A video not yet identified keeps the captions' own name labels. If no voice is named with confidence 0.4 or more, the captions' own name labels are kept when they have any, and the segments show \"spk N\" when they have none.","parameters":[{"description":"YouTube video id","in":"path","name":"video_id","required":true,"type":"string"},{"description":"Include transcript, speaker matches, description and screenshots","in":"query","name":"include_content","type":"boolean"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.YouTubeContent"},"type":"array"}},"type":"object"}]}},"404":{"description":"Not Found","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get YouTube video content","tags":["Other"]}},"/v1/persons":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_persons_get.json)\nThe person registry that `/other/podcast/transcripts` links speakers\nto. `person_id` is the value a transcript's `resolved_speakers` carries;\ntreat it as opaque and do not parse it — use `created_by_pipeline` to\ntell curated people from ones speaker resolution created. `name`\nsearches aliases too.\n`socials` lists every known account and is always present (`[]` when\nnone). Several accounts on one platform are allowed, and within a\nplatform the first entry is the one to show. `platform` is an OPEN\nenum — ignore values you do not recognize. `url` is always set;\n`handle` and `id` may be absent (LinkedIn and Substack publish no\nstable id).\n`shows` lists confirmed show relationships, hosting or as a\nguest — `role` says which, and the same show can appear under both.\n`platform` is an OPEN enum, `podcast` today. Only `confirmed: true`\nrelationships are returned; inferred, unconfirmed roles are omitted.\n`first_seen_url` is where the person was first seen, not a list of all\ntheir sources.\n`positions` is every job the person is known to hold. There is no\nprimary one: a person holds several at once and each lane sees a\ndifferent one. Each entry splits the title (`position`) from the\ninstitution (`affiliation`), and the `affiliation` filter matches the\nlatter. Party, chamber and district are not here — use\n`/v1/alva/congress-politicians`; `sources` containing `congress` is\nwhat says someone is a member.\nEvery filter is optional.","parameters":[{"description":"Name, case-insensitive, matches display name or an alias","in":"query","name":"name","type":"string"},{"description":"Exact person id, as it appears in resolved_speakers","in":"query","name":"person_id","type":"string"},{"description":"Only people speaker resolution created (pc_ prefix)","in":"query","name":"created_by_pipeline","type":"boolean"},{"description":"Substring search across display names and aliases","in":"query","name":"q","type":"string"},{"description":"Institution substring, case-insensitive; matches any entry of positions","in":"query","name":"affiliation","type":"string"},{"description":"RFC3339 lower bound on person update time","in":"query","name":"updated_since","type":"string"},{"description":"Max rows, 1-200 (default 10)","in":"query","name":"limit","type":"integer"},{"description":"Rows to skip (default 0)","in":"query","name":"offset","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Persons","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PodcastPerson"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"List persons","tags":["Persons"]}},"/v1/persons/channel-commentary":{"get":{"consumes":["application/json"],"description":"Same rows as /v1/persons/{person_id}/channel-commentary without fixing the person. Browse by said_on day with start_time and end_time, which returns the rows that are served now. Or poll changes with updated_after and updated_before (unix seconds, [after, before), ordered by updated_at then id, paged by pagination.cursor; see docs/api/update-polling.md and docs/api/person-channel-commentary-updates.md). An update window returns every row whose latest change falls in it, and state says which kind it is. A row whose state is served has every field. A row whose state is duplicate (the page reports a remark another page holds in full), pending (a report still being traced back to where it was said, or a YouTube video whose speakers are not known yet) or refused has only id, updated_at, state and person.id: it is not output, and a consumer that holds its id drops it. A duplicate or pending row can come back as served later. Poll by updated_at, never by said_on: rows arrive with old said_on days. person_id is an optional filter. No row for a person and day does not mean they said nothing: a remark is stored only when its page can be read and the sentence checked against it.","parameters":[{"description":"Person registry id (uuid) to narrow to one person","in":"query","name":"person_id","type":"string"},{"description":"Browse range start, unix seconds; required unless updated_after is given","in":"query","name":"start_time","type":"integer"},{"description":"Browse range end, unix seconds; required unless updated_after is given","in":"query","name":"end_time","type":"integer"},{"description":"Update window start, unix seconds, inclusive","in":"query","name":"updated_after","type":"integer"},{"description":"Update window end, unix seconds, exclusive","in":"query","name":"updated_before","type":"integer"},{"description":"Opaque continuation of an update window","in":"query","name":"cursor","type":"string"},{"description":"default 100, or 50 with include_body; 1 to 500, at most 50 with include_body","in":"query","name":"limit","type":"integer"},{"description":"Rows to skip; browse only","in":"query","name":"offset","type":"integer"},{"description":"Return each row's full body","in":"query","name":"include_body","type":"boolean"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PersonChannelCommentary"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/model.APIResponse"}},"503":{"description":"Service Unavailable","schema":{"$ref":"#/definitions/model.APIResponse"}}},"summary":"List channel commentary across people","tags":["Persons"]}},"/v1/persons/{person_id}":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_persons_person-id_get.json)","parameters":[{"description":"Canonical UUID, legacy ID, or redirected UUID","in":"path","name":"person_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PodcastPerson"},"type":"array"}},"type":"object"}]}},"404":{"description":"Not Found","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get person","tags":["Persons"]}},"/v1/persons/{person_id}/channel-commentary":{"get":{"consumes":["application/json"],"description":"What a person said in public, collected by polling news sites, video channels, podcast libraries and the person's own accounts. One row is one page with one sentence the person said on it: who said it (person.id and person.name, the name /v1/persons answers with), the sentence (quote), when they said it (said_at), the page (url, title, published_at, own, publisher, body with include_body, context), and, when Arrays serves the page itself, the endpoint and key of that row (item_ref). A value that is not known is null. For a YouTube video whose audio was transcribed, a row also says which voice said the quote and where (quote_speaker, quote_offset_sec, and quote is then the sentence of the audio transcript), who each voice is (resolved_speakers, the list /v1/other/podcast/transcripts has), and with include_body the whole video turn by turn (turns: each turn's speaker is its voice's name when resolved_speakers names the voice, otherwise the voice label, and voice is always the label). A row that was not checked against audio has none of these keys. This route returns the rows that are served now, all with state served, newest published first. A row stops being served, for example when its page turns out to report a remark that another page holds in full, and it is then no longer returned here. The update window of /v1/persons/channel-commentary reports that change, so a consumer that holds the row can drop it (see docs/api/person-channel-commentary-updates.md). No row for a person and day does not mean they said nothing: a remark is stored only when its page can be read and the sentence checked against it.","parameters":[{"description":"Person registry id (uuid), as /api/v1/persons returns. Resolve a name with /api/v1/persons?name=...","in":"path","name":"person_id","required":true,"type":"string"},{"description":"Range start, unix seconds","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"Range end, unix seconds","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Page size, 1 to 500","in":"query","name":"limit","type":"integer"},{"description":"Rows to skip","in":"query","name":"offset","type":"integer"},{"description":"Return each row's full body; caps limit at 50","in":"query","name":"include_body","type":"boolean"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PersonChannelCommentary"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/model.APIResponse"}},"503":{"description":"Service Unavailable","schema":{"$ref":"#/definitions/model.APIResponse"}}},"summary":"Get channel commentary for a person","tags":["Persons"]}},"/v1/social-feeds/x/by-handle":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_social-feeds_x_by-handle_get.json)\nReturns tweets for a TRACKED handle (active or dormant), read\nfrom our store. Unknown/untracked handles return 400 with error\ncode HANDLE_NOT_TRACKED — call POST /social-feeds/x/handles to\nstart tracking the handle (discovery endpoint).","parameters":[{"description":"Twitter handle (no @, case-insensitive)","in":"query","name":"twitter_handle","required":true,"type":"string"},{"description":"Start time (unix seconds)","in":"query","name":"since","type":"integer"},{"description":"End time (unix seconds)","in":"query","name":"until","type":"integer"},{"collectionFormat":"csv","description":"Filter by content type","in":"query","items":{"enum":["original","retweet","quote","reply"],"type":"string"},"name":"content_type","type":"array"},{"description":"Only return tweets with media when true","in":"query","name":"has_media","type":"boolean"},{"description":"Max results (default 50, max 200)","in":"query","name":"limit","type":"integer"},{"description":"Offset (default 0)","in":"query","name":"offset","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Tweet list","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.XFeedTweet"},"type":"array"}},"type":"object"}]}},"400":{"description":"Validation error or untracked handle (code: HANDLE_NOT_TRACKED)","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"X feed dependency unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get X (Twitter) feed by handle","tags":["x-feed"]}},"/v1/social-feeds/x/by-url":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_social-feeds_x_by-url_get.json)\nFetch a single tweet by its canonical x.com / twitter.com URL.","parameters":[{"description":"Canonical x.com / twitter.com tweet URL","in":"query","name":"url","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Tweet (single-element array)","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.XFeedTweet"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Caller request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"X provider budget exhausted or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Fetch a tweet by its X.com URL","tags":["x-feed"]}},"/v1/social-feeds/x/entities/handle/{twitter_handle}":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_social-feeds_x_entities_handle_twitter-handle_get.json)\nRetrieve the twitter_accounts profile for a Twitter handle.\nUnlike by-handle, this endpoint does NOT auto-create a person on miss.","parameters":[{"description":"Twitter handle (no @, case-insensitive)","in":"path","name":"twitter_handle","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Account profile","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.XFeedHandle"},"type":"array"}},"type":"object"}]}},"400":{"description":"Validation failure or handle not found","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get X (Twitter) account profile for a handle","tags":["x-feed"]}},"/v1/social-feeds/x/entities/handles":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_social-feeds_x_entities_handles_get.json)\nPaginated list of Twitter accounts sorted by followers_count DESC.","parameters":[{"description":"Max results (default 50, max 200)","in":"query","name":"limit","type":"integer"},{"description":"Offset (default 0)","in":"query","name":"offset","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Tracked account list","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.XFeedHandle"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"List currently tracked X (Twitter) accounts","tags":["x-feed"]}},"/v1/social-feeds/x/handles":{"post":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_social-feeds_x_handles_post.json)\nExplicitly start tracking a Twitter handle. Unknown handles are\nresolved on X and a subscription is created; dormant handles are\nrevived. Returns the first page of tweets and an \"outcome\".\nThis is the ONLY endpoint that triggers on-demand X fetching; it is\nper-user rate-capped and billed as a premium \"discovery\" unit.","parameters":[{"description":"Handle to discover","in":"body","name":"request","required":true,"schema":{"$ref":"#/definitions/model.DiscoverXFeedHandleRequest"}}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.XFeedTweet"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"429":{"description":"Caller discovery quota exceeded","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"X provider budget exhausted or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Track (discover) an X handle","tags":["x-feed"]}},"/v1/social-feeds/x/live-search":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_social-feeds_x_live-search_get.json)\nSearches every public post on X at request time, through X's own search\n(twitterapi.io advanced_search). Use it for accounts and topics Arrays does\nnot track: /social-feeds/x/search only reads tweets Arrays has already stored.\n\n`q` takes X advanced-search syntax: words, \"exact phrase\", OR, -exclude,\nfrom:user, to:user, @user, #tag, $CASHTAG, lang:en, min_faves:N,\nmin_retweets:N, filter:media, -filter:replies, url:domain. Native retweets\nare left out unless q contains include:nativeretweets. Example:\n`$NVDA (earnings OR guidance) min_faves:50 -filter:replies`. The query sent\nto X, since/until included, must fit in 500 bytes; since and until add 22\nbytes each.\n\nEach call returns one page of at most 20 tweets. To get the next page,\nsend `pagination.cursor` back as `cursor` with the same q, sort, since and\nuntil, and stop when `has_more` is false. A page can hold fewer than 20\ntweets, or none, while `has_more` is still true.\n\n`sort=latest` (default) lists matches newest first; `sort=top` is X's Top\ntab. `since` / `until` (Unix seconds) bound published_at, and tweets outside\nthem are dropped even when X returns them.\n\nResults are what X search shows: it leaves out some replies, accounts X\nfilters for quality and older posts, and the same query can return\ndifferent pages minutes apart. A retweet comes back with empty text and zero\ncounts and the original tweet in `source`; a quote has the quoted tweet in\n`source`. An X Article tweet carries only its link; fetch the article body\nwith /social-feeds/x/by-url. Results are not stored by Arrays, so they do\nnot show up in /social-feeds/x/search or /by-handle.\n\nReturns 503 when X search is unavailable or the daily live-search budget is\nspent (it resets at 00:00 UTC).","parameters":[{"description":"X advanced-search query (at most 500 bytes once since/until are appended)","in":"query","name":"q","required":true,"type":"string"},{"description":"latest (default, newest first) or top (X's Top tab)","enum":["latest","top"],"in":"query","name":"sort","type":"string"},{"description":"Earliest published_at (Unix seconds)","in":"query","name":"since","type":"integer"},{"description":"Latest published_at (Unix seconds); must be greater than since","in":"query","name":"until","type":"integer"},{"description":"pagination.cursor from the previous page; omit for the first page","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"One page of tweets","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.XFeedTweet"},"type":"array"}},"type":"object"}]}},"400":{"description":"Validation error, or q too long for X","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"X search unavailable, or the daily live-search budget is spent","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Search all of X live","tags":["x-feed"]}},"/v1/social-feeds/x/search":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_social-feeds_x_search_get.json)\nFull-text search over the tweet corpus via the TweetSearchService\n(ESSearch — BM25 ranking on full_text + multilingual analyzers).\nCurrently only the registry index is searched; pass an optional\n`handle` to restrict the search to a single author.\n\n`q` is optional: when omitted, the endpoint returns the latest\ntweets (sorted by published_at DESC) within the time window.\n\nAnti-scrape rule: when both `q` and `handle` are empty, `since`\nmust be within the last 30 days (default 30d if omitted). Pass\neither `q` or `handle` to widen the window back to the 10y default.\n\n`sort` controls ordering: `relevance` (default, BM25 over\nfull_text), `latest` (reverse-chronological by published_at), or\n`hottest` (by view_count, may be stale). Use `latest` for\nrecency/discovery so recent tweets are not buried under\nhigher-scoring older matches.\n\nReturns HTTP 501 if the upstream search backend is not configured.\n\nUpdate polling: `updated_after` + `updated_before` (Unix seconds,\ninclusive after, exclusive before) return the tweets whose\n`updated_at` moved inside the window, ordered by `updated_at` ASC\nthen `platform_id` ASC, paged by `pagination.cursor`. `updated_at`\nrecords projection time for a first index or a change to engagement\ncounts, text, deleted flag, `has_media`, normalized media content,\nor a `referenced_tweets[]` entry's `id`, `text` or `text_status`.\nIdentical observations and retries retain it; `last_observed_at`\nadvances on every re-observation and is not a substitute.\nA window reaching past what the sync writer has confirmed searchable\nis served up to that boundary rather than refused:\n`pagination.indexed_through` (Unix seconds) reports how far the page\nis complete, `has_more` stays true, and a `Retry-After` header gives\nthe wait. Page until `has_more` is false before advancing your own\ncheckpoint; a page carrying `indexed_through` is never drained.\nPartial search results and an unreadable indexing checkpoint still\nreturn HTTP 503; retry the same bounds and cursor.\nThe window may span at most 7 days. `sort` is ignored in this mode\nand `offset` is rejected; `q`, `handle`, `content_type`, `has_media`,\n`since` and `until` stay optional intersections and are bound into\nthe cursor, so send the cursor back unchanged with the same window\nand the same filters. `limit` may change between pages. An omitted\ncursor with `has_more=false` means the window is drained; start each\nnew window without the old cursor. An omitted cursor with\n`has_more=true` means nothing was indexed yet in this window: ask\nagain for the same bounds with no cursor. This is current-state polling,\nnot a snapshot or a deletion feed: overlap your windows, dedupe by\n`platform_id` on content, and expect intermediate versions to\ncoalesce. Deleted tweets are not surfaced through the window.","parameters":[{"description":"Search query (BM25 over full_text; `#tag` and `@user` route to filter clauses). Omit for reverse-chronological listing.","in":"query","name":"q","type":"string"},{"description":"Restrict to tweets authored by this Twitter handle (no @, case-insensitive)","in":"query","name":"handle","type":"string"},{"description":"Start time (unix seconds)","in":"query","name":"since","type":"integer"},{"description":"End time (unix seconds)","in":"query","name":"until","type":"integer"},{"collectionFormat":"csv","description":"Filter by content type","in":"query","items":{"enum":["original","retweet","quote","reply"],"type":"string"},"name":"content_type","type":"array"},{"description":"Only return tweets with media when true","in":"query","name":"has_media","type":"boolean"},{"description":"Max results (default 50, max 200)","in":"query","name":"limit","type":"integer"},{"description":"Offset","in":"query","name":"offset","type":"integer"},{"description":"Result ordering: relevance (default, BM25), latest (reverse-chronological), or hottest (by view_count)","enum":["relevance","latest","hottest"],"in":"query","name":"sort","type":"string"},{"description":"Inclusive tweet-update bound (Unix seconds); requires updated_before","format":"int64","in":"query","name":"updated_after","type":"integer"},{"description":"Exclusive tweet-update bound (Unix seconds); must be greater than updated_after and at most 7 days past it","format":"int64","in":"query","name":"updated_before","type":"integer"},{"description":"Opaque update-window continuation; incompatible with offset","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Tweet list","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.XFeedTweet"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"501":{"description":"Search backend not yet wired","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Update polling not available on this backend yet, or the indexing boundary cannot be read","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Search X (Twitter) feed","tags":["x-feed"]}},"/v1/stocks/company/balance-sheets":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_balance-sheets_get.json)\nRetrieve balance sheets for a specific company within a time range","parameters":[{"description":"Stock symbol (uppercase, e.g., NVDA, AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds). Must be greater than start_time","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Reporting period type. Omit to return both annual and quarter data","enum":["annual","quarter"],"in":"query","name":"period_type","type":"string"},{"description":"Time dimension used for filtering. Defaults to OBSERVED_AT. CALENDAR_END_DATE: the last day of the reporting period; FILING_DATE: the date filed with regulators; OBSERVED_AT: the timestamp the data was first ingested (point-in-time safe)","enum":["CALENDAR_END_DATE","FILING_DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved balance statements","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.GetBalanceSheetByTimeIntervalResponse"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Company Balance Sheets","tags":["Stock"]}},"/v1/stocks/company/cashflow-statements":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_cashflow-statements_get.json)\nRetrieve cash flow statements for a specific company within a time range","parameters":[{"description":"Stock symbol (uppercase, e.g., NVDA, AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds). Must be greater than start_time","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Reporting period type. Omit to return both annual and quarter data","enum":["annual","quarter"],"in":"query","name":"period_type","type":"string"},{"description":"Time dimension used for filtering. Defaults to OBSERVED_AT. CALENDAR_END_DATE: the last day of the reporting period; FILING_DATE: the date filed with regulators; OBSERVED_AT: the timestamp the data was first ingested (point-in-time safe)","enum":["CALENDAR_END_DATE","FILING_DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved cash flow statements","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.GetCashFlowByTimeIntervalResponse"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Company Cash Flow Statements","tags":["Stock"]}},"/v1/stocks/company/detail":{"get":{"consumes":["application/json"],"description":"**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_detail_get.json)\nRetrieve the profile of a single company based on stock symbol or company name keyword — identity, classification, and descriptive attributes. Suitable for company detail pages, company search, and more. Valuation and financial metrics are served by the dedicated `/stocks/market-metrics` and `/stocks/financial-metrics` endpoints.\n**Main Use Cases**\n- **Company Detail Pages**: Display the profile of a single company\n- **Company Search**: Resolve a stock symbol or name keyword to a company profile\n- **Mobile Applications**: Provide data interface for company detail pages\n- **Desktop Software**: Provide company data for professional investment software\n\n**Query Parameter Description**\n\nSupports two query methods:\n- **Exact Query**: Find company precisely by stock symbol\n- **Fuzzy Query**: Fuzzy match by company name keyword\n\n**Response Data Description**\n\nThe returned company profile includes:\n- **Basic Info**: Stock symbol, company name, industry classification, exchange\n- **Profile**: Description, website, CEO, employees, country, IPO date, listing flags (is_etf/is_adr/is_fund)\n- **Keywords**: `keywords` — X (Twitter) search terms for the company, ordered stable-identity terms first ($CASHTAG, public name, key products/CEO/brands) then up to 5 news-driven terms refreshed weekly. Use them to search social/news chatter about the company. Empty for symbols outside the covered US universe.\n\nValuation and financial metrics are **not** returned here — use `/stocks/market-metrics` (PE/PS/market cap) and `/stocks/financial-metrics` (revenue/EPS/ROE TTM).\n\n**Usage Examples**\n\n1. **Query Apple company by stock symbol**:\n`?symbol=AAPL`\n\n2. **Query by company name keyword**:\n`?name_kw=Apple`\n\n3. **Use both stock symbol and name keyword**:\n`?symbol=AAPL\u0026name_kw=Apple`\n\n**Best Practices**\n\n- Prioritize using stock symbol for exact queries, faster response\n- Name keyword query supports fuzzy matching, suitable for search functionality\n- Recommend caching query results for popular companies\n- For mobile applications, preload data for commonly used companies\n\n**Important Notes**\n\n- Symbol parameter must be uppercase, e.g., AAPL, GOOGL\n- name_kw parameter supports Chinese and English, case-insensitive\n- If both symbol and name_kw are provided, symbol takes priority","parameters":[{"description":"Stock symbol (uppercase, e.g., AAPL)","in":"query","name":"symbol","type":"string"},{"description":"Company name keyword (English, case-insensitive)","in":"query","name":"name","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved company details","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CompanyDetail"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters or missing required fields","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Single Company Details","tags":["Stock"]}},"/v1/stocks/company/executives":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_executives_get.json)\nRetrieve executive compensation information for a specific company with Redis caching","parameters":[{"description":"Stock symbol (uppercase, e.g., META, AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved executive information","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CompanyExecutiveInfo"},"type":"array"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Company Executive Information","tags":["Stock"]}},"/v1/stocks/company/income-statements":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_income-statements_get.json)\nRetrieve income statements for a specific company within a time range\n**Feature Overview**\nGet detailed financial statements including revenue, net income, EPS, and other key metrics for a specific company over a specified time period.\n**Main Use Cases**\n- **Financial Analysis**: Analyze company's financial performance over time\n- **Investment Research**: Review historical financial data for investment decisions\n- **Quarterly Reports**: Access quarterly and annual financial statements\n- **Trend Analysis**: Track financial metrics trends over time\n\n**Parameters**\n- **symbol**: Stock symbol (required, e.g., NVDA, AAPL)\n- **start_time**: Start time (required, Unix timestamp in seconds)\n- **end_time**: End time (required, Unix timestamp in seconds)\n- **period_type**: Period type (optional, annual/quarter; if omitted, returns both annual \u0026 quarter)\n- **time_type**: Time type for filtering (required)\n- `CALENDAR_END_DATE`: Filter by Date (calendarEndDate) field\n- `FILING_DATE`: Filter by FilingDate field\n- `OBSERVED_AT`: Filter by publish_time field\n\n**Response Data**\nReturns an array of financial statements with:\n- **calendarEndDate**: Statement date (YYYY-MM-DD format)\n- **observedAt**: Observed timestamp (Unix seconds)\n- **Revenue**: Total revenue\n- **Net Income**: Net income/loss\n- **EPS**: Earnings per share\n- **Other metrics**: Additional financial indicators\n\n**Usage Examples**\n\n1. **Get income statements for NVDA in 2024**:\n`?symbol=NVDA\u0026start_time=1704067200\u0026end_time=1735689599\u0026period_type=quarter`\n\n2. **Get annual income statements**:\n`?symbol=AAPL\u0026start_time=1704067200\u0026end_time=1735689599\u0026period_type=annual`\n\n**Best Practices**\n- Use specific time ranges to limit data size and improve performance\n- Cache frequently requested financial data\n- Consider pagination for large datasets\n\n**Important Notes**\n- Ticker parameter (e.g., NVDA, AAPL)\n- Time parameters are Unix timestamps in seconds\n- end_time must be greater than start_time\n- Financial data may have reporting delays","parameters":[{"description":"Stock symbol (uppercase, e.g., NVDA, AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds). Must be greater than start_time","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Reporting period type. Omit to return both annual and quarter data","enum":["annual","quarter"],"in":"query","name":"period_type","type":"string"},{"description":"Time dimension used for filtering. Defaults to OBSERVED_AT. CALENDAR_END_DATE: the last day of the reporting period; FILING_DATE: the date filed with regulators; OBSERVED_AT: the timestamp the data was first ingested (point-in-time safe)","enum":["CALENDAR_END_DATE","FILING_DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved income statements","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.GetIncomeStatementByTimeIntervalResponse"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Company Income Statements","tags":["Stock"]}},"/v1/stocks/company/kpi":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n**Feature Overview**\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_kpi_get.json)\nRetrieve KPI (Key Performance Indicators) values for a specific stock by fiscal year and quarter.\n\n**Main Use Cases**\n- **Financial Analysis**: Analyze company KPI trends over time\n- **Investment Research**: Review key performance metrics for investment decisions\n- **Quarterly Comparison**: Compare KPIs across different periods\n- **Performance Tracking**: Monitor company performance indicators\n\n**Parameters**\n\n| Parameter        | Type   | Required | Description                                           |\n|------------------|--------|----------|-------------------------------------------------------|\n| symbol           | string | Yes      | Stock symbol (e.g., AAPL, NVDA)                      |\n| fiscal_year      | int    | Yes      | Fiscal year                                           |\n| fiscal_quarter   | string | Yes      | Fiscal quarter: Q1, Q2, Q3, Q4 for quarterly; FY for annual |\n\n**Response Data Description**\n\nEach KPI record includes:\n- **symbol**: Stock symbol\n- **periodType**: Period type (annual/quarterly)\n- **periodId**: Unique period identifier\n- **calendarEndDate**: Report date (YYYY-MM-DD)\n- **calendarYear**: Calendar year\n- **calendarQuarter**: Calendar quarter\n- **fiscalYear**: Fiscal year\n- **fiscalQuarter**: Fiscal quarter\n- **createdAt**: Ingestion time — when we first stored this record (RFC3339)\n- **values**: KPI values as JSON object\n\n**Usage Examples**\n\n1. **Get Q2 FY2024 KPIs for Apple**:\n`?symbol=AAPL\u0026fiscal_year=2024\u0026fiscal_quarter=Q2`\n\n2. **Get full year FY2024 KPIs for NVIDIA**:\n`?symbol=NVDA\u0026fiscal_year=2024\u0026fiscal_quarter=FY`\n\n**Important Notes**\n- Symbol parameter must be uppercase\n- Fiscal quarter values: Q1, Q2, Q3, Q4 (quarterly data), or FY (annual data)","parameters":[{"description":"Stock symbol (uppercase, e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Fiscal year","in":"query","name":"fiscal_year","required":true,"type":"integer"},{"description":"Fiscal quarter (Q1/Q2/Q3/Q4 for quarterly, FY for annual)","enum":["Q1","Q2","Q3","Q4","FY"],"in":"query","name":"fiscal_quarter","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved KPI values","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.StockKpiValue"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Stock KPI Values","tags":["Stock"]}},"/v1/stocks/company/price-target-consensus":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\nGet analysts' target price consensus for a specific company\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_price-target-consensus_get.json)","parameters":[{"description":"Stock symbol (uppercase, e.g., META, AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved price consensus","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.CompanyPriceConsensus"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"tags":["Stock"]}},"/v1/stocks/company/price-target-news":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_price-target-news_get.json)\nRetrieve price target news within a time range, ordered by published date\n\n**Feature Overview**\nGet analyst price target news articles published within a specified time range. Returns news articles with analyst information, price targets, and publication details.\n\n**Main Use Cases**\n- **Market Analysis**: Track analyst price target updates and recommendations\n- **News Aggregation**: Collect price target news from various publishers\n- **Research Tools**: Analyze analyst sentiment and price target trends\n- **Media Applications**: Display price target news in financial applications\n\n**Parameters**\n- **symbol**: Stock symbol (optional, e.g., META, AAPL)\n- **start_time**: Start time (Unix timestamp in seconds; required unless `updated_after` is given)\n- **end_time**: End time (Unix timestamp in seconds; required unless `updated_after` is given)\n- **limit**: Maximum number of results (optional, default: 50)\n- **updated_after** / **updated_before**: record-update window (Unix seconds)\n- **cursor**: update-window continuation\n\n**Response Data Structure**\n\nEach news record includes:\n- **id**: Arrays row id, stable for updates to the same stored row. Changes to symbol, published_at, news_url, analyst_name or price_target create a separate row and id.\n- **updated_at**: RFC3339 UTC time Arrays last stored a changed value\n- **symbol**: Stock symbol (e.g., \"AEO\", \"META\")\n- **observedAt**: Observed timestamp (Unix seconds, optional)\n- **newsUrl**: Full URL to the news article\n- **newsTitle**: Title of the news article\n- **analystName**: Name of the analyst (optional)\n- **analystCompany**: Company of the analyst (e.g., \"BMO Capital\", \"Raymond James\")\n- **priceTarget**: Price target value\n- **adjPriceTarget**: Adjusted price target value\n- **priceWhenPosted**: Stock price when the news was posted\n- **newsPublisher**: Publisher name (e.g., \"StreetInsider\", \"TheFly\")\n- **newsBaseUrl**: Base URL of the publisher\n\n**Usage Examples**\n\n1. **Get price target news for 2024**:\n`?start_time=1704067200\u0026end_time=1735689600\u0026limit=20`\n\n2. **Get price target news for specific symbol**:\n`?symbol=META\u0026start_time=1704067200\u0026end_time=1735689600\u0026limit=50`\n\n**Important Notes**\n- Time parameters are Unix timestamps in seconds\n- end_time must be greater than start_time\n- Results are ordered by published date (newest first)\n- Limit defaults to 50 if not specified\n- `observed_at` is the FMP publish date of the article, not the time\nArrays stored it. Poll on `updated_at` instead.\n\n**Update polling** (docs/api/update-polling.md)\n\nSupplying both `updated_after` and `updated_before` selects rows whose\nArrays record changed within [updated_after, updated_before), ordered by\n`updated_at ASC, id ASC`. Times are Unix seconds. In this mode `start_time`\nand `end_time` are not required and stay optional intersections on the\npublished date; omit them to see a revision FMP published years ago.\nEach item carries the stable Arrays row `id` and an RFC3339 `updated_at`.\n`updated_at` advances only when FMP revises a value, not on the daily\nre-fetch. Send `pagination.cursor` back unchanged with the same window and\nfilters; `limit` may change on retry. An omitted cursor with\n`has_more=false` means the window is drained. Start each new window without\nthe old cursor. This is current-state polling, not a snapshot or a deletion\nfeed: overlap windows and reconcile delayed writes.","parameters":[{"description":"Stock symbol (e.g., META, AAPL). US share classes accept both BRK.B and BRK-B.","example":"META","in":"query","name":"symbol","type":"string"},{"description":"Start time (Unix timestamp in seconds). Required for browse mode; with updated_after/updated_before it becomes an optional filter narrowing published_at","example":1704067200,"format":"int64","in":"query","name":"start_time","type":"integer"},{"description":"End time (Unix timestamp in seconds). Required for browse mode; with updated_after/updated_before it becomes an optional filter narrowing published_at","example":1735689600,"format":"int64","in":"query","name":"end_time","type":"integer"},{"description":"Maximum number of results (default: 50)","example":20,"format":"int64","in":"query","name":"limit","type":"integer"},{"description":"Inclusive record-update bound (Unix seconds); requires updated_before","format":"int64","in":"query","name":"updated_after","type":"integer"},{"description":"Exclusive record-update bound (Unix seconds); must exceed updated_after","format":"int64","in":"query","name":"updated_before","type":"integer"},{"description":"Opaque update-window continuation; requires an update window","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved price target news","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PriceTargetNews"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Update polling not available on this backend yet","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Price Target News","tags":["Stock"]}},"/v1/stocks/company/price-target-summary":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\nGet company average target price of last year, last quarter, last month, and current time\n[OpenAPI JSON Spec](/docs/output/v1_stocks_company_price-target-summary_get.json)","parameters":[{"description":"Stock symbol (uppercase, e.g., META, AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved price target summary","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.CompanyPriceTargetSummary"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"tags":["Stock"]}},"/v1/stocks/congress/recent-trades":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_congress_recent-trades_get.json)\n**Feature Overview**\nRetrieve congressional trading activity with flexible filtering.","parameters":[{"description":"Politician name (partial match)","example":"\"Jerry Moran\"","in":"query","name":"name","type":"string"},{"description":"Stock symbol. US share classes accept both BRK.B and BRK-B.","example":"\"AAPL\"","in":"query","name":"symbol","type":"string"},{"description":"Chamber filter: senate, house, all","enum":["senate","house","all"],"example":"\"all\"","in":"query","name":"tag","type":"string"},{"description":"Transaction type filter (e.g. Purchase, Sale, Sale (Full), Sale (Partial))","example":"\"Purchase\"","in":"query","name":"transaction_type","type":"string"},{"description":"Start time (Unix timestamp in seconds)","example":1727740800,"format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","example":1767225599,"format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Filter time type","enum":["TRANSACTION_DATE","FILING_DATE","OBSERVED_AT"],"example":"\"TRANSACTION_DATE\"","in":"query","name":"time_type","required":true,"type":"string"},{"description":"Maximum results (1-1000, default 100)","example":100,"in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved congress trades","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.UWCongressTradeData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Congress Trades","tags":["Stock"]}},"/v1/stocks/crowdfunding/offerings":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_crowdfunding_offerings_get.json)\nGet paginated crowdfunding offerings information","parameters":[{"description":"Page number (0-based, default: 0)","in":"query","name":"page","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved crowdfunding offerings","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CrowdfundingOffering"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Crowdfunding Offerings","tags":["Stock"]}},"/v1/stocks/darkpool":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_darkpool_get.json)\nRetrieve darkpool trading data for specified stock tickers within a time range.\n\n**Features:**\n- Query darkpool trading data by ticker symbol\n- Support time range filtering\n- Returns hourly aggregated OHLC and volume data\n- Includes volume, trade count, and VWAP information\n\n**Parameters:**\n- `symbol`: Stock symbol (required)\n- `start_time`: Start time as Unix timestamp (required, inclusive)\n- `end_time`: End time as Unix timestamp (required, inclusive, must be on or after start_time)\n\n**Response Fields:**\n- `symbol`: Stock symbol\n- `timestamp`: Hourly timestamp in Unix seconds (UTC)\n- `open`: Opening price in the hour\n- `high`: Highest price in the hour\n- `low`: Lowest price in the hour\n- `close`: Closing price in the hour\n- `volume`: Total trading volume\n- `trade_count`: Number of trades executed\n- `total_value`: Total transaction value\n- `vwap`: Volume Weighted Average Price\n```","parameters":[{"description":"Stock symbol (e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved darkpool OHLC data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.DarkpoolOHLCData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Darkpool OHLC Data","tags":["Stock"]}},"/v1/stocks/dividends":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_dividends_get.json)\n**Feature Overview**\nGet Point-in-Time (PIT) dividend data for a specific symbol within a time range.\n\n**Main Use Cases**\n- **Dividend Analysis**: Track historical dividend payments and distributions\n- **Income Planning**: Analyze dividend frequency and yield trends\n- **Investment Research**: Study dividend history for income-focused portfolios\n- **Backtesting**: Historical dividend data for quantitative analysis\n- **Tax Planning**: Review dividend payment dates and amounts\n\n**Query Parameters \u0026 Logic**\n\n**Required Parameters:**\n- `symbol`: Stock symbol (e.g., AAPL, MSFT, KO)\n- `start_time`: Start timestamp (Unix seconds, UTC)\n- `end_time`: End timestamp (Unix seconds, UTC)\n- `time_type`: Date type to filter by (RECORD_DATE, PAYMENT_DATE, or DECLARATION_DATE)\n\n**Optional Parameters:**\n- `limit`: Maximum number of results (1-1000, default: 50)\n\n**Validation Rules:**\n- Symbol is required and must be a valid stock symbol\n- start_time must be before end_time\n- time_type must be one of: RECORD_DATE, PAYMENT_DATE, DECLARATION_DATE\n- Limit defaults to 50 if not provided, max 1000\n\n**Response Data Structure**\n\n- `data` ([]PITDividendData): Array of PIT dividend data points\n\n**PITDividendData fields:**\n- `symbol` (string): Stock symbol\n- `date` (string): Ex-dividend date (YYYY-MM-DD)\n- `record_date` (string): Record date (YYYY-MM-DD)\n- `payment_date` (string): Payment date (YYYY-MM-DD)\n- `declaration_date` (string): Declaration date (YYYY-MM-DD)\n- `adj_dividend` (float64): Adjusted dividend amount\n- `dividend` (float64): Dividend amount\n- `yield` (float64): Dividend yield percentage\n- `frequency` (string): Dividend frequency (e.g., \"Quarterly\", \"Monthly\")\n\n**Dividend Date Explanation:**\n- **Declaration Date**: Date when board announces dividend (use time_type=DECLARATION_DATE)\n- **Ex-Dividend Date**: Date when stock trades without dividend\n- **Record Date**: Date to be on record to receive dividend (use time_type=RECORD_DATE)\n- **Payment Date**: Date when dividend is actually paid (use time_type=PAYMENT_DATE)\n\n**Usage Examples**\n\n1. **Get AAPL dividends by payment date for 2024**: `?symbol=AAPL\u0026start_time=1704067200\u0026end_time=1735689600\u0026time_type=PAYMENT_DATE`\n2. **Get by record date with custom limit**: `?symbol=KO\u0026start_time=1704067200\u0026end_time=1735689600\u0026time_type=RECORD_DATE\u0026limit=100`\n3. **Get by declaration date**: `?symbol=MSFT\u0026start_time=1640995200\u0026end_time=1735689600\u0026time_type=DECLARATION_DATE\u0026limit=1000`\n\n**Important Notes**\n\n- All required parameters must be provided\n- Results are ordered by the specified time_type date (typically descending)\n- PIT dividends provide point-in-time snapshots as they were known historically\n- Choose time_type based on your use case: RECORD_DATE for eligibility, PAYMENT_DATE for cash flow, DECLARATION_DATE for announcements","parameters":[{"description":"Stock symbol (e.g., AAPL, MSFT, KO). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds, UTC)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds, UTC)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Date type to filter by","enum":["RECORD_DATE","PAYMENT_DATE","DECLARATION_DATE"],"in":"query","name":"time_type","required":true,"type":"string"},{"default":50,"description":"Maximum number of results (1-1000, default: 50)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns PIT dividends","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PITDividendData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error - gRPC service failure","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get PIT Dividends","tags":["Stock"]}},"/v1/stocks/earnings-calendar":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_earnings-calendar_get.json)\nUnified endpoint to retrieve earnings calendar data with optional filtering by symbol and/or date range.\n\n**Filtering Options:**\n- No parameters: first page across all symbols, newest first\n- `symbol` only: first page for that symbol, newest first\n- `start_time` and `end_time`: first page within the range, all symbols\n- `symbol` + `start_time` + `end_time`: first page for that symbol within the range\n\nEvery shape returns one page, never the whole table — see paging below.\n\n**Ordering and paging:** records come back newest-first by `date`\nin every call shape; pass `sort_order=asc` for oldest-first. Page with\n`limit` (default and maximum 1000) and `offset` — a response holding\nexactly `limit` records means there may be more, so request the next\noffset. The `pagination` block echoes the limit/offset in effect.\n\n**Update polling:** pass both `updated_after` and `updated_before`\n(Unix seconds) to get the rows whose data changed in that half-open\ninterval, ordered by `updated_at` then `id`. `symbol`, `start_time` and\n`end_time` stay optional filters intersecting the window, and\n`sort_order` is ignored — the order is what the cursor is built on.\nPage by passing `pagination.cursor` back unchanged with the same bounds\nand filters; `limit` may change on retry. An omitted cursor with\n`has_more: false` means the window is drained. Start each new window\nwithout the old cursor. `offset` is not allowed, `offset=0` included.\nThis is current-state polling, not a snapshot or a deletion feed:\noverlap your windows, and dedupe by `id` on content rather than on the\nkey alone. Recognized US reports with a known fiscal period retain\ntheir earliest existing canonical `id` across accepted session and\nannouncement-date changes. Both browse and polling return canonical\nrows only; retained sibling IDs are internal aliases. Fiscal drift\nis matched conservatively, while ambiguous, missing-period and foreign\nreports remain separate. Historical downstream duplicates need an\nexplicit alias-based rekey: this API returns no alias mapping or\nrekey/deletion events. IDs hard-deleted by the earlier implementation\nrequire stored source or downstream evidence to reconcile.\nFull contract: docs/api/earnings-calendar-updates.md.\n\n**Response Data Structure**\n\n- `data` ([]EarningsCalendarEvent): Flat array of earnings calendar records\n\n**EarningsCalendarEvent fields:**\n- `id` (int64): Retained canonical Arrays identifier for a recognized report\n- `symbol` (string): Stock symbol (e.g., \"AAPL\", \"MSFT\")\n- `date` (string): Earnings date in YYYY-MM-DD format\n- `time` (string): Earnings call time (e.g., \"AMC\", \"BMO\")\n- `fiscal_date_ending` (string): Fiscal period end date","parameters":[{"description":"Stock symbol (e.g., AAPL, MSFT) - optional. US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","type":"string"},{"description":"Start time (Unix timestamp) - optional, requires end_time","format":"int64","in":"query","name":"start_time","type":"integer"},{"description":"End time (Unix timestamp) - optional, requires start_time","format":"int64","in":"query","name":"end_time","type":"integer"},{"description":"Max records to return (1-1000, default 1000)","format":"int32","in":"query","name":"limit","type":"integer"},{"description":"Records to skip (default 0)","format":"int32","in":"query","name":"offset","type":"integer"},{"description":"Sort direction by date: asc or desc (default desc)","enum":["asc","desc"],"in":"query","name":"sort_order","type":"string"},{"description":"Inclusive row-update bound (Unix seconds); requires updated_before","format":"int64","in":"query","name":"updated_after","type":"integer"},{"description":"Exclusive row-update bound (Unix seconds); must exceed updated_after","format":"int64","in":"query","name":"updated_before","type":"integer"},{"description":"Opaque update-window continuation; incompatible with offset","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved earnings calendar data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.EarningsCalendarEvent"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Update polling not available on this backend yet","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Earnings Calendar Data","tags":["Stock"]}},"/v1/stocks/earnings-transcript":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_earnings-transcript_get.json)\nRetrieve earnings call transcript data for a specific stock symbol, fiscal year, and period type.\n\n**Overview**\nThis endpoint provides the full transcript of earnings conference calls, including management discussions and Q\u0026A sessions with analysts.\n\n**Request Parameters**\n- `symbol` (required): Stock symbol (e.g., \"AAPL\", \"MSFT\")\n- `period_type` (required): Period type, must be one of: \"annual\" or \"quarterly\"\n- `fiscal_year` (required): Issuer-reported fiscal year (minimum: 2005, e.g., 2024). This is the fiscal year as the company reports it (matching FMP and the company's IR), e.g. Nike's fiscal year ends in May, so its earnings call held in March 2026 is FY2026 Q3.\n- `fiscal_quarter` (optional): Fiscal quarter, required when period_type is \"quarterly\". Valid values: \"Q1\", \"Q2\", \"Q3\", \"Q4\"\n\n**Validation Rules**\n- When `period_type` is \"quarterly\", `fiscal_quarter` is required\n- When `period_type` is \"annual\", `fiscal_quarter` is optional\n\n**Response Data Structure**\n- `data` ([]EarningsTranscriptData): Array of earnings transcript data\n\n**EarningsTranscriptData fields:**\n- `symbol` (string): Stock symbol (e.g., \"AAPL\", \"MSFT\")\n- `quarter` (string): Fiscal period identifier (e.g., \"2024Q1\" for quarterly, \"2024\" for annual)\n- `published_at` (string): Transcript publication moment as an RFC3339 UTC timestamp (e.g. \"2024-10-31T20:54:36Z\"); includes time-of-day. Empty string if unknown\n- `date` (string): Earnings-call date in YYYY-MM-DD format (UTC). Empty string if unknown\n- `transcript` ([]SectionEntry): Array of transcript sections, each containing:\n- `section` (string): Section name (e.g., \"MANAGEMENT DISCUSSION SECTION\")\n- `content` ([]TranscriptEntry): Array of transcript entries, each containing:\n- `speaker` (string): Speaker name (e.g., \"Arvind Krishna\")\n- `title` (string): Speaker title/role (e.g., \"CEO\", \"Analyst\")\n- `content` (string): Transcript content/speech text","parameters":[{"description":"Stock symbol (e.g., AAPL, MSFT). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Period type (annual or quarterly)","enum":["annual","quarterly"],"in":"query","name":"period_type","required":true,"type":"string"},{"description":"Issuer-reported fiscal year (min 2005, e.g. 2024; e.g. Nike Mar-2026 call = FY2026 Q3)","format":"int32","in":"query","name":"fiscal_year","required":true,"type":"integer"},{"description":"Fiscal quarter (Q1, Q2, Q3, Q4) - required when period_type is quarterly","enum":["Q1","Q2","Q3","Q4"],"in":"query","name":"fiscal_quarter","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved earnings transcript data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.EarningsTranscriptData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Earnings Transcript Data","tags":["Stock"]}},"/v1/stocks/equity-offering":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_equity-offering_get.json)\nReturn the latest equity offerings, including new shares being issued by companies and exempt offerings and amendments. Served from the local Postgres table populated by the daily ingestion cron.","parameters":[{"description":"Page number starting from 0","in":"query","minimum":0,"name":"page","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"properties":{"data":{"items":{"$ref":"#/definitions/model.FundraisingRssEvent"},"type":"array"},"success":{"type":"boolean"}},"type":"object"}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/model.APIResponse"}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/model.APIResponse"}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get equity offering events","tags":["Stock"]}},"/v1/stocks/estimates-guidance":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_estimates-guidance_get.json)\nRetrieve consensus estimates or company guidance data.\n\n**Supported Metrics**: EPS, SALES, DPS, CFPS, EBITDA, EBIT, BPS, ASSETS\n\n**Period Type**: annual, quarterly, semi-annual\n\n**Type**:\n- `estimate`: Returns array of EstimateRow (analyst consensus data)\n- `guidance`: Returns array of GuidanceRow (company-reported guidance)\n\n**Pagination**: results are a two-dimensional panel — one row per\nobservation date **per** forecast fiscal period **per** metric — so a\nsingle symbol/metric easily exceeds a thousand rows. Page with `limit`\n+ `offset`; the response echoes both under `pagination`. A page shorter\nthan `limit` is the last page. Rows are ordered by observation date\ndescending, then fiscal period end descending, then metric.","parameters":[{"description":"Stock symbol (e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Metrics (comma-separated). Supported: EPS, SALES, DPS, CFPS, EBITDA, EBIT, BPS, ASSETS","in":"query","name":"metrics","required":true,"type":"string"},{"description":"Data type","enum":["estimate","guidance"],"in":"query","name":"type","required":true,"type":"string"},{"description":"Period type (default: annual)","enum":["annual","quarterly","semi-annual"],"in":"query","name":"period_type","type":"string"},{"description":"Start time for observed_at filter (Unix timestamp in seconds)","in":"query","name":"start_time","type":"integer"},{"description":"End time for observed_at filter (Unix timestamp in seconds)","in":"query","name":"end_time","type":"integer"},{"description":"Issuer fiscal year filter (e.g., 2026). This is the company's own fiscal year label, not the calendar year of fiscal_end_date -- for a filer whose fiscal year ends in January, the quarter ending 2026-04-30 is fiscal year 2027. Matches the fiscal_year on the 3-statement endpoints.","in":"query","name":"fiscal_year","type":"integer"},{"description":"Fiscal quarter","enum":["Q1","Q2","Q3","Q4"],"in":"query","name":"fiscal_quarter","type":"string"},{"description":"Page size (default: 10, max: 1000)","in":"query","name":"limit","type":"integer"},{"description":"Rows to skip before the page (default: 0)","in":"query","name":"offset","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"When type=guidance","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.FactsetGuidanceRow"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Query Estimates or Guidance","tags":["Stock"]}},"/v1/stocks/event-transcripts":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_event-transcripts_get.json)\nList FactSet call transcripts for a symbol across all 6 event\ntypes (Earnings, AnalystsShareholdersMeeting,\nConferencePresentation, SalesRevenue, SpecialSituation,\nGuidance), filtered by date range rather than fiscal\nyear/quarter. Metadata only unless `include_transcript=true`,\nwhich returns each row's transcript and participants; the\ndetail endpoint (GET /event-transcripts/{event_id}) returns\none event's full text.\n\n**Request Parameters**\n- `symbol` (required for browse, optional for update polling): Stock symbol, US or non-US\n(e.g. \"AAPL\", \"BRK.B\", \"0700.HK\").\n- `event_type` (optional): filter to one event type. When\nomitted, results include ALL 6 types, including Earnings —\nit is not \"non-Earnings only\".\n- `from` / `to` (optional): unix-second range, inclusive.\n`to` defaults to now; `from` defaults to `to` minus 90\ndays.\n- `limit` (optional, default 20, max 100; max 20 with\n`include_transcript`), `offset` (optional, default 0).\n- `include_transcript` (optional, default false): return each\nrow's `transcript` and `participants`, in either mode.\n- `updated_after` / `updated_before`: both required for update\npolling; select current rows changed in [after, before), UTC\nUnix seconds. `symbol`, `event_type`, `from` and `to` become\noptional filters. Rows order by updated_at, symbol, event_id.\nUse pagination.cursor with the same bounds and filters until\nhas_more is false. Offset is incompatible with this mode.\nA Corrected version replacing a Raw one is an update.\n\n**Response Data Structure**\n- `data` ([]EventTranscript): one entry per matched event,\nnewest event_date first in browse mode, oldest updated_at first\nin update mode. `transcript` and `participants` are present\nonly with `include_transcript=true`.\n- `transcript_type`: the served version's FactSet type —\n`Corrected` (edited), `Raw` (complete, unedited) or\n`NearRealTime` (a partial draft). The best version is served:\nCorrected replaces Raw when it arrives, and most non-Earnings\nevents never get one.\n- `participants`: the people who speak, once each, in order of\nfirst speaking, with `role` (`company`, `analyst`,\n`operator` or `unknown`), `title`, `affiliation` (their\ncompany or firm; Corrected transcripts only) and\n`factset_entity_id` when known. Each transcript entry's\n`participant_id` names its speaker. Absent for transcripts\nconverted before participants were recorded.\n- `fiscal_year` / `fiscal_quarter` are `null` (not omitted,\nnot `\"\"`) for every event_type except Earnings, which has\nno fiscal-period concept at all.\n- `fiscal_quarter` is Q-prefixed — `\"Q3\"`, not `\"3\"` — the\nsame spelling GET /stocks/earnings-transcript takes as\ninput. A small number of events carry FactSet's own `\"Q5\"`\nlabel, passed through as-is.\n- `pagination`: limit/offset in browse mode; limit/cursor/has_more\nin update mode. Neither mode returns `total`.\n- `metadata.data_as_of`: newest ingestion time (unix\nseconds) across the returned page.\n\n**Paging**: an empty browse page returns 200 with `data: []`;\nin update mode `has_more=false` alone signals a drained window.\nAn error is never the end-of-pages signal; an unknown supplied\nsymbol remains a 400 caller-input error.","parameters":[{"description":"Stock symbol; required for browse, optional for update polling. US or non-US.","in":"query","name":"symbol","type":"string"},{"description":"Filter to one event type; omit for all 6 (including Earnings)","enum":["Earnings","AnalystsShareholdersMeeting","ConferencePresentation","SalesRevenue","SpecialSituation","Guidance"],"in":"query","name":"event_type","type":"string"},{"description":"Range start, unix seconds inclusive (default: to - 90d)","in":"query","name":"from","type":"integer"},{"description":"Range end, unix seconds inclusive (default: now)","in":"query","name":"to","type":"integer"},{"description":"Max results (default 20, max 100)","in":"query","name":"limit","type":"integer"},{"description":"Offset (default 0)","in":"query","name":"offset","type":"integer"},{"description":"Inclusive transcript-update bound (Unix seconds); requires updated_before","format":"int64","in":"query","name":"updated_after","type":"integer"},{"description":"Exclusive transcript-update bound (Unix seconds); must exceed updated_after","format":"int64","in":"query","name":"updated_before","type":"integer"},{"description":"Opaque update-window continuation; incompatible with offset","in":"query","name":"cursor","type":"string"},{"description":"Return each row's transcript and participants (limit at most 20)","in":"query","name":"include_transcript","type":"boolean"}],"produces":["application/json"],"responses":{"200":{"description":"Event transcripts for the page; data is [] when the range or offset matched nothing","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.EventTranscript"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters or unknown symbol","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Update polling or transcripts unavailable on an older backend","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"List event transcripts for a symbol","tags":["Stock"]}},"/v1/stocks/event-transcripts/{event_id}":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_event-transcripts_event-id_get.json)\nRetrieve the full transcript text for one event by event_id,\nacross all 6 FactSet event types. Body sections/content use\nthe same parser as GET /stocks/earnings-transcript, so the\nshape is identical field-for-field.\n\n**Multiple listed entities per event**: a small number of\nevents (e.g. dual share classes, cross-listings, M\u0026A calls)\nare associated with more than one symbol. This endpoint takes\nonly `event_id` — there is no `symbol` disambiguation\nparameter — and returns exactly one row in that case, chosen\nby the highest row_version. The transcript text is identical\nacross such rows; only the `symbol` field differs. Use the\nlist endpoint (filtered by symbol) if you need to know every\nsymbol an event is associated with.\n\n**Response Data Structure**\n- `data` ([]EventTranscript): always a single-element array\n(never a bare object) on success, containing `transcript`.\n- `fiscal_year` / `fiscal_quarter` are `null` (not omitted,\nnot `\"\"`) unless event_type is Earnings.\n- `fiscal_quarter` is Q-prefixed — `\"Q3\"`, not `\"3\"`.\n- `metadata.data_as_of`: this row's ingestion time (unix\nseconds).","parameters":[{"description":"Numeric event ID","in":"path","name":"event_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved the event transcript","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.EventTranscript"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid event_id, or no event transcript found","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get one event transcript's full text","tags":["Stock"]}},"/v1/stocks/financial-metrics":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_financial-metrics_get.json)\nRetrieve time series data for 27 different types of financial metrics for stocks\n\n**Overview**\nThis endpoint provides time series data for 27 financial metrics, including TTM metrics, MRQ ratios, and various growth rates. These metrics are essential for financial analysis, valuation, and investment decision-making.\n\n**Key Use Cases**\n- **Financial Analysis**: Evaluate company profitability, efficiency, and solvency\n- **Investment Screening**: Filter stocks based on fundamental metrics\n- **Trend Analysis**: Track how financial metrics evolve over time\n- **Comparative Analysis**: Compare metrics across different companies\n\n**Metric Types**\n\n**TTM Base Metrics (3 metrics)**\nTTM = Trailing Twelve Months (sum of current quarter + previous 3 quarters)\n- REVENUE_TTM: Total revenue over the trailing twelve months (pre-calculated sum of 4 quarters)\n- NET_INCOME_TTM: Net income over the trailing twelve months (pre-calculated sum of 4 quarters)\n- EPS_TTM: Earnings per share over the trailing twelve months (pre-calculated sum of 4 quarters)\n\n**TTM Profitability Ratios (3 metrics)**\n- ROE_TTM: Return on equity over the trailing twelve months (uses MRQ point-in-time equity)\n- ROA_TTM: Return on assets over the trailing twelve months (uses MRQ point-in-time assets)\n- ROIC_TTM: Return on invested capital over the trailing twelve months (uses MRQ point-in-time invested capital components)\n\n**MRQ Margin Ratios (3 metrics)**\nMRQ = Most Recent Quarter\n- GROSS_MARGIN_MRQ: Gross profit margin for the most recent quarter\n- OPERATING_MARGIN_MRQ: Operating profit margin for the most recent quarter\n- NET_MARGIN_MRQ: Net profit margin for the most recent quarter\n\n**MRQ Other Ratios (1 metric)**\n- FCF_MARGIN_MRQ: Free cash flow margin for the most recent quarter\n\n**MRQ Balance Sheet Ratios (5 metrics)**\nAll values use Most Recent Quarter (MRQ) balance sheet data\n- DEBT_TO_EQUITY_MRQ: Most recent quarter debt-to-equity ratio\n- DEBT_TO_ASSETS_MRQ: Most recent quarter debt-to-assets ratio\n- CURRENT_RATIO_MRQ: Most recent quarter current ratio\n- QUICK_RATIO_MRQ: Most recent quarter quick ratio (acid-test ratio)\n- NET_WORKING_CAPITAL_MRQ: Net working capital at the most recent quarter (an absolute value, not a ratio)\n\n**Revenue Growth Metrics (4 metrics)**\n- REVENUE_GROWTH_QOQ: Quarter-over-quarter revenue growth rate\n- REVENUE_GROWTH_YOY_QUARTERLY: Year-over-year quarterly revenue growth rate\n- REVENUE_GROWTH_YOY_TTM: Year-over-year trailing twelve months revenue growth rate\n- REVENUE_GROWTH_YOY_ANNUAL: Year-over-year annual revenue growth rate\n\n**EPS Growth Metrics (4 metrics)**\n- EPS_GROWTH_QOQ: Quarter-over-quarter earnings per share growth rate\n- EPS_GROWTH_YOY_QUARTERLY: Year-over-year quarterly earnings per share growth rate\n- EPS_GROWTH_YOY_TTM: Year-over-year trailing twelve months earnings per share growth rate\n- EPS_GROWTH_YOY_ANNUAL: Year-over-year annual earnings per share growth rate\n\n**FCF Growth Metrics (4 metrics)**\n- FCF_GROWTH_QOQ: Quarter-over-quarter free cash flow growth rate\n- FCF_GROWTH_YOY_QUARTERLY: Year-over-year quarterly free cash flow growth rate\n- FCF_GROWTH_YOY_TTM: Year-over-year trailing twelve months free cash flow growth rate\n- FCF_GROWTH_YOY_ANNUAL: Year-over-year annual free cash flow growth rate\n\n**Response Data Structure**\n\nData is grouped by time (timestamp) and sorted in descending order by time. Each time group contains:\n- **time**: Observation timestamp (Unix timestamp in seconds, UTC)\n- **items**: Array of symbol-value pairs for this time, each containing:\n- **symbol**: Stock ticker symbol (e.g., \"AAPL\")\n- **value**: Metric value (double precision, may be negative or decimal)\n\n**Usage Examples**\n\n1. **Get AAPL's TTM revenue data**:\n`?metric=REVENUE_TTM\u0026symbol=AAPL\u0026start_time=1672531200\u0026end_time=1704067200`\n\n2. **Get ROE data for all stocks**:\n`?metric=ROE_TTM\u0026start_time=1672531200\u0026end_time=1704067200`\n\n3. **Get TSLA's revenue growth rate**:\n`?metric=REVENUE_GROWTH_YOY_TTM\u0026symbol=TSLA\u0026start_time=1672531200\u0026end_time=1704067200`\n\n**Important Notes**\n\n- Required parameters: metric, start_time, end_time\n- Optional parameter: symbol (if omitted, returns data for all stocks)\n- All timestamps are Unix timestamps in seconds (UTC)\n- Metric values are double precision floating-point numbers\n- Results are grouped by time and sorted in descending order by time (newest first)\n- TTM metrics: sum of current quarter + previous 3 quarters (pre-calculated)\n- MRQ metrics: most recent quarterly or period-end values\n- Ratio metrics: expressed as decimals (e.g., 0.25 means 25% or ratio of 0.25:1)\n- Growth rates: expressed as decimals (NOT percentages). Example: 0.155 means 15.5% growth; -0.102 means 10.2% decline\n- ROE/ROA denominators use MRQ point-in-time values (not period averages)\n- Absolute values: NET_WORKING_CAPITAL_MRQ returns actual dollar amount, not a ratio","parameters":[{"description":"Metric type (enum, required)","enum":["REVENUE_TTM","NET_INCOME_TTM","EPS_TTM","ROE_TTM","ROA_TTM","ROIC_TTM","GROSS_MARGIN_MRQ","OPERATING_MARGIN_MRQ","NET_MARGIN_MRQ","FCF_MARGIN_MRQ","DEBT_TO_EQUITY_MRQ","DEBT_TO_ASSETS_MRQ","CURRENT_RATIO_MRQ","QUICK_RATIO_MRQ","NET_WORKING_CAPITAL_MRQ","REVENUE_GROWTH_QOQ","REVENUE_GROWTH_YOY_QUARTERLY","REVENUE_GROWTH_YOY_TTM","REVENUE_GROWTH_YOY_ANNUAL","EPS_GROWTH_QOQ","EPS_GROWTH_YOY_QUARTERLY","EPS_GROWTH_YOY_TTM","EPS_GROWTH_YOY_ANNUAL","FCF_GROWTH_QOQ","FCF_GROWTH_YOY_QUARTERLY","FCF_GROWTH_YOY_TTM","FCF_GROWTH_YOY_ANNUAL"],"in":"query","name":"metric","required":true,"type":"string"},{"description":"Stock symbol (optional, e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved financial metrics data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SymbolMetricData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Financial Metrics Time Series Data","tags":["Stock"]}},"/v1/stocks/fiscal-dates":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_fiscal-dates_get.json)\nRetrieve fiscal date information for a specific stock by fiscal year and quarter\n\n**Feature Overview**\nGet fiscal dates including calendar end dates and public dates for stocks based on fiscal year and quarter.\n\n**Main Use Cases**\n- **Financial Analysis**: Understand fiscal calendar for earnings analysis\n- **Earnings Tracking**: Track fiscal quarters and their corresponding calendar dates\n- **Investment Planning**: Plan investments around fiscal reporting periods\n- **Data Alignment**: Align financial data with correct fiscal periods\n\n**Response Data Structure**\n\nEach fiscal date record includes:\n- **symbol**: Stock symbol (e.g., \"AAPL\")\n- **fiscalYear**: Fiscal year (e.g., 2024)\n- **fiscalQuarter**: Fiscal quarter (Q1/Q2/Q3/Q4/FY)\n- **calendarEnd**: End date of the fiscal quarter or year covered by the earnings report (YYYY-MM-DD format)\n- **publicDate**: Date when the earnings report was publicly released (YYYY-MM-DD format, empty string if not available)\n\nA symbol with no fiscal coverage returns `200` with an empty `data` array, not an error.\nA symbol outside the active US stock and ETF universe is rejected with `400`.","parameters":[{"description":"Stock symbol (e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Fiscal year (e.g., 2024)","in":"query","name":"fiscal_year","required":true,"type":"integer"},{"description":"Fiscal quarter (Q1/Q2/Q3/Q4/FY)","in":"query","name":"fiscal_quarter","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved fiscal dates","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.FiscalDateData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Fiscal Dates by Fiscal Year","tags":["Stock"]}},"/v1/stocks/fiscal-dates/range":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_fiscal-dates_range_get.json)\nRetrieve fiscal date information for a specific stock by calendar end date range\n\n**Feature Overview**\nGet fiscal dates within a specified calendar end date range for stocks.\n\n**Response Data Structure**\n\nEach fiscal date record includes:\n- **symbol**: Stock symbol (e.g., \"AAPL\")\n- **fiscalYear**: Fiscal year (e.g., 2024)\n- **fiscalQuarter**: Fiscal quarter (Q1/Q2/Q3/Q4/FY)\n- **calendarEnd**: End date of the fiscal quarter or year covered by the earnings report (YYYY-MM-DD format)\n- **publicDate**: Date when the earnings report was publicly released (YYYY-MM-DD format, empty string if not available)\n\nA symbol with no fiscal coverage returns `200` with an empty `data` array, not an error.\nA symbol outside the active US stock and ETF universe is rejected with `400`.","parameters":[{"description":"Stock symbol (e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix timestamp)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved fiscal dates","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.FiscalDateData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Fiscal Dates by Date Range","tags":["Stock"]}},"/v1/stocks/insider/transactions":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_stocks_insider_transactions_get.json)\nRetrieve insider transaction data. Provides comprehensive insider trading information including officer/director status, SEC filings, transaction codes, and ownership changes.","parameters":[{"description":"Stock symbol (e.g., AAPL, TSLA). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","type":"string"},{"description":"Filter by insider name (case-insensitive partial match)","in":"query","name":"owner_name","type":"string"},{"description":"Filter by SEC Form 4 transaction code","enum":["A","C","D","E","F","G","H","I","J","L","M","P","S","U","W","X","Z"],"example":"\"P\"","in":"query","name":"transaction_code","type":"string"},{"description":"Start time (Unix timestamp in seconds)","example":1727740800,"format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","example":1767225599,"format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Date field to filter on","enum":["TRANSACTION_DATE","FILING_DATE","OBSERVED_AT"],"example":"\"TRANSACTION_DATE\"","in":"query","name":"time_type","required":true,"type":"string"},{"description":"Maximum number of records (1-5000, default 1000)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved insider transactions","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.UWInsiderTransactionData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Insider Transactions","tags":["Stock"]}},"/v1/stocks/institution-holder":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_institution-holder_get.json)\nRetrieve institution holder information for a specified stock symbol. This endpoint provides detailed data about institutional investors holding the stock, including their positions, changes, and performance metrics.\n\n**Main Use Cases**\n- **Institutional Analysis**: Analyze institutional investor positions and changes\n- **Ownership Tracking**: Track institutional ownership and concentration\n- **Investment Research**: Understand institutional investor behavior and trends\n- **Risk Management**: Assess institutional ownership concentration and changes\n\n**Response Data Structure**\n\n- `holders` ([]CompanyHolderInfo): Array of institution holder information\n\n**CompanyHolderInfo fields:**\n- `calendar_end_date` (string): Date of the holding record\n- `cik` (string): CIK identifier\n- `filing_date` (string): Filing date\n- `investor_name` (string): Name of the institutional investor\n- `symbol` (string): Stock symbol\n- `security_name` (string): Security name\n- `type_of_security` (string): Type of security\n- `security_cusip` (string): Security CUSIP\n- `shares_type` (string): Shares type\n- `put_call_share` (string): Put/Call/Share indicator\n- `investment_discretion` (string): Investment discretion type\n- `industry_title` (string): Industry title\n- `weight` (float64): Portfolio weight\n- `last_weight` (float64): Previous portfolio weight\n- `change_in_weight` (float64): Change in weight\n- `change_in_weight_percentage` (float64): Change in weight percentage\n- `market_value` (float64): Market value\n- `last_market_value` (float64): Previous market value\n- `change_in_market_value` (float64): Change in market value\n- `change_in_market_value_percentage` (float64): Change in market value percentage\n- `shares_number` (string): Number of shares held\n- `last_shares_number` (string): Previous number of shares held\n- `change_in_shares_number` (string): Change in shares number\n- `change_in_shares_number_percentage` (float64): Change in shares number percentage\n- `quarter_end_price` (float64): Quarter end price\n- `avg_price_paid` (float64): Average price paid\n- `is_new` (bool): Whether this is a new position\n- `is_sold_out` (bool): Whether position was sold out\n- `ownership` (float64): Ownership percentage\n- `last_ownership` (float64): Previous ownership percentage\n- `change_in_ownership` (float64): Change in ownership\n- `change_in_ownership_percentage` (float64): Change in ownership percentage\n- `holding_period` (int32): Holding period in quarters\n- `first_added` (string): First added date\n- `performance` (string): Performance value\n- `performance_percentage` (float64): Performance percentage\n- `last_performance` (string): Previous performance value\n- `change_in_performance` (string): Change in performance\n- `is_counted_for_performance` (bool): Whether counted for performance\n- `observed_at` (int64): Observed timestamp (seconds)\n\n**Query Parameters:**\n- **symbol**: Stock symbol (required, uppercase, e.g., TSM, AAPL, MSFT)\n- **start_time**: Start time (required, Unix timestamp in seconds)\n- **end_time**: End time (required, Unix timestamp in seconds)\n- **limit**: Limit number of results (optional, default: 50, max: 5000)\n- **time_type**: Time type for filtering (required)\n- `CALENDAR_END_DATE`: Filter by Date (calendarEndDate) field\n- `FILING_DATE`: Filter by FilingDate field\n- `OBSERVED_AT`: Filter by publish_time field","parameters":[{"description":"Stock symbol (uppercase, e.g., TSM, AAPL, MSFT). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Limit number of results (default: 50, max: 5000)","in":"query","maximum":5000,"minimum":1,"name":"limit","type":"integer"},{"description":"Start time (Unix timestamp, required)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp, required)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time type for filtering: 'CALENDAR_END_DATE' uses Date field, 'FILING_DATE' uses FilingDate field, 'OBSERVED_AT' uses publish_time field","enum":["CALENDAR_END_DATE","FILING_DATE","OBSERVED_AT"],"in":"query","name":"time_type","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved institution holder data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.CompanyHolderInfo"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Company Institution Holders Info","tags":["Stock"]}},"/v1/stocks/ipo-calendar":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_ipo-calendar_get.json)\nGet upcoming IPO schedules with company details, expected pricing, and market information.\n\n**Use Cases**\n- Track upcoming IPO events for investment opportunities\n- Monitor IPO pipeline for specific exchanges\n- Get expected pricing ranges and market cap estimates\n\n**Response Fields**\n- symbol: Company ticker symbol\n- date: Expected IPO date (YYYY-MM-DD)\n- company: Company name\n- exchange: Listing exchange (e.g., NASDAQ, NYSE)\n- priceRange: Expected price range (e.g., \"$14-$16\")\n- marketCap: Estimated market capitalization","parameters":[{"description":"Start date (YYYY-MM-DD format)","example":"\"2025-04-24\"","in":"query","name":"from","type":"string"},{"description":"End date (YYYY-MM-DD format)","example":"\"2025-07-24\"","in":"query","name":"to","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved IPO calendar","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.IpoCalendarEvent"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get planned IPO calendar events","tags":["Stock"]}},"/v1/stocks/ipo-confirmed-calendar":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_ipo-confirmed-calendar_get.json)\nGet companies that have officially filed IPO documents with regulatory authorities.\n\n**Use Cases**\n- Track confirmed IPO filings from SEC\n- Monitor upcoming IPOs that have cleared regulatory hurdles\n- Research newly filed S-1/F-1 registrations\n\n**Response Fields**\n- symbol: Company ticker symbol\n- cik: SEC CIK number\n- form: Filing form type (e.g., S-1, F-1)\n- filingDate: Date the filing was submitted (YYYY-MM-DD)\n- acceptedDate: Date SEC accepted the filing (ISO datetime)\n- effectivenessDate: Date the registration becomes effective (YYYY-MM-DD)\n- url: Link to the SEC filing document","parameters":[{"description":"Start date (YYYY-MM-DD format)","example":"\"2023-01-01\"","in":"query","name":"from","required":true,"type":"string"},{"description":"End date (YYYY-MM-DD format)","example":"\"2023-12-31\"","in":"query","name":"to","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved confirmed IPO filings","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.IpoCalendarConfirmedEvent"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get confirmed IPO filing events","tags":["Stock"]}},"/v1/stocks/kline":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_kline_get.json)\nRetrieve stock OHLC (candlestick) chart data from the dedicated kline service.\n\n**Time range limits:**\n- For intervals \u003e= 1d (day level and above, e.g. 1d, 1w, 1m, 3m, 6m): No 366-day limit\n- For intervals \u003c 1d (minute/hour level): Maximum 1 year (365 days)\n\n**Response fields:**\n- `time_open`: Time open (Unix timestamp seconds)\n- `time_close`: Time close (Unix timestamp seconds)\n- `time_period_start`: Period start time in ISO 8601 format\n- `time_period_end`: Period end time in ISO 8601 format\n- `price_open`: Open price\n- `price_high`: High price\n- `price_low`: Low price\n- `price_close`: Close price\n- `volume_traded`: Volume traded\n- `trades_count`: Number of trades","parameters":[{"description":"Stock symbol (e.g. AAPL, TSLA)","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start time (Unix seconds)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix seconds)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Interval (1m = 1 month)","enum":["1min","2min","3min","5min","10min","15min","30min","45min","1h","2h","4h","1d","1w","1m","3m","6m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Limit (default 100)","in":"query","name":"limit","type":"integer"},{"description":"Trading session filter: RTH (9:30-16:00 ET) or ETH (default, includes pre/post market). Intraday only — daily+ intervals always use RTH.","enum":["RTH","ETH"],"in":"query","name":"session","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Stock kline data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.StockKlineData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad request","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Service unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Stock OHLC data","tags":["Stock"]}},"/v1/stocks/market-metrics":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_market-metrics_get.json)\nRetrieve time series data for various market indicators, including technical and fundamental metrics.\n\n**Overview**\nThis endpoint provides market indicators for stocks across different time intervals (1d, 1w, 1m).\nIndicators include technical analysis tools (MA, EMA, RSI, etc.) and market fundamentals (Market Cap, P/E, etc.).\n\n**Indicator Formats**\nIndicators requiring a period are formatted as `{INDICATOR}_{PERIOD}`.\n- **PRICE_CHANGE**: `PRICE_CHANGE_1d`, `PRICE_CHANGE_1w`, `PRICE_CHANGE_1M`, `PRICE_CHANGE_3M`, `PRICE_CHANGE_6M`, `PRICE_CHANGE_ytd`, `PRICE_CHANGE_1y`, `PRICE_CHANGE_3y`, `PRICE_CHANGE_5y`\n- **MA**: `MA_5`, `MA_10`, `MA_20`, `MA_60`, `MA_120`, `MA_200`\n- **EMA**: `EMA_5`, `EMA_10`, `EMA_20`, `EMA_60`, `EMA_120`, `EMA_200`\n- **VOLATILITY**: `VOLATILITY_20`, `VOLATILITY_60`, `VOLATILITY_90`\n- **RSI**: `RSI_14`\n- **MACD single components**: `MACD_DIF`, `MACD_DEA`, `MACD_HIST`\n- **MACD legacy multi-component**: `MACD_12,26,9` (returns DIF, DEA, and HIST series)\n- **BOLLINGER single components**: `BOLLINGER_UPPER`, `BOLLINGER_MID`, `BOLLINGER_LOWER`\n- **BOLLINGER legacy multi-component**: `BOLLINGER_20,2` (returns UPPER, MID, and LOWER series)\n- **VWAP**: `VWAP_DAY`\n- **BETA**: `BETA` (default period is `SPX_252`; interval must be `1d`)\n- **AVERAGE_DAILY_DOLLAR_VOLUME**: `AVERAGE_DAILY_DOLLAR_VOLUME` (default period is `20`; interval must be `1d`)\n- **Fundamental indicators**: `MARKET_CAP` (market cap), `PE_RATIO` (P/E ratio), `PS_RATIO` (P/S ratio), `PB_RATIO` (P/B ratio), `DIVIDEND_YIELD` (dividend yield), `ENTERPRISE_VALUE` (EV), `EV_EBITDA_RATIO` (EV/EBITDA multiple)\n\n**Validation Rules**\n- **Required Parameters**: interval, indicator, start_time, end_time.\n- **Interval**: Must be one of `1d`, `1w`, `1m`.\n- **Time Range**: `start_time` must be less than `end_time`.\n- **All-symbols queries** (`symbol` omitted): the window may span at most 100 interval periods — 100 days for `1d`, 100 weeks for `1w`, 100 months for `1m`. A wider window returns 400 `INVALID_PARAMETER`; pass a `symbol`, or walk the range one window at a time.\n","parameters":[{"description":"Time interval","enum":["1d","1w","1m"],"in":"query","name":"interval","required":true,"type":"string"},{"description":"Indicator type (e.g., MA_20, PRICE_CHANGE_1d)","in":"query","name":"indicator","required":true,"type":"string"},{"description":"Stock symbol (optional, e.g., AAPL). Omit it to get every symbol, which caps the window at 100 interval periods. US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved market metrics data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MarketSymbolMetricData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Market Metrics Time Series Data","tags":["Stock"]}},"/v1/stocks/market-news":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_market-news_get.json)\nRetrieve market news articles within a specified time range, optionally filtered by symbol. Supports pagination and flexible filtering.\n\nUse cases:\n- Market news aggregation and monitoring\n- Stock-specific news tracking\n- News analysis and sentiment tracking\n- Media applications and news feeds\n\nData \u0026 semantics:\n- start_time: Start time (Unix seconds; required unless updated_after/updated_before are given)\n- end_time: End time (Unix seconds; required unless updated_after/updated_before are given)\n- symbol: Stock symbol filter (optional, e.g., AAPL, TSLA)\n- topic: Topic filter (optional, lowercase). Valid values:\n- blockchain, earnings, economy_fiscal, economy_macro, economy_monetary\n- energy_and_transportation, finance, financial_markets, ipo, life_sciences\n- manufacturing, mergers_and_acquisitions, real_estate_and_construction\n- retail_and_wholesale, technology\n- Deprecated aliases, still accepted; each resolves to a value above, and\n- responses always carry the canonical form:\n- energy_transportation, real_estate, retail_wholesale\n- source: Media source filter (optional). Valid values:\n- Reuters, AP News, BBC, The New York Times, The Washington Post, The Guardian\n- Bloomberg, The Wall Street Journal, Financial Times, CNBC, Fortune\n- Forbes, TechCrunch, MIT Technology Review, The Verge\n- WIRED, South China Morning Post, Nikkei Asia, Business Wire, PR Newswire\n- sort_by_type: Sort by type - PUBLISHED_TIME, OVERALL_SENTIMENT_SCORE, or RELEVANCE_SCORE (optional, default: PUBLISHED_TIME)\n- sort_by: Sort order - \"ASC\" or \"DESC\" (optional, default: \"DESC\")\n- limit: Maximum number of results (optional, default: 10, max: 100)\n- offset: Pagination offset (optional, default: 0, must be \u003e= 0)\n\nUpdate polling (see /docs/api/market-news-updates.md and update-polling.md):\nsupplying both updated_after and updated_before selects the articles whose content\nchanged in [updated_after, updated_before), ordered by updated_at ASC, id ASC.\nIn that mode start_time/end_time, symbol, topic and source become optional\nintersections, sort_by_type and sort_by are ignored, offset is not allowed, and\npaging is by pagination.cursor. Pass it back unchanged with the same window and\nfilters; limit may change between pages. An omitted cursor with has_more=false\nmeans the window is drained. Each article in a window response carries updated_at,\nits content-change time. It advances for title, summary, source,\npublish_time or symbol/topic membership changes. Sentiment and relevance refreshes\nretain this time. Window bounds and cursors use the same content-change time.\nHistorical times initialized during migration are baselines rather than a record\nof past content changes; see market-news-updates.md for the rollout sequence.\n","parameters":[{"description":"Stock symbol filter (optional)","example":"AAPL","in":"query","name":"symbol","type":"string"},{"description":"Topic filter (optional; energy_transportation, real_estate and retail_wholesale are deprecated aliases)","enum":["blockchain","earnings","economy_fiscal","economy_macro","economy_monetary","energy_and_transportation","finance","financial_markets","ipo","life_sciences","manufacturing","mergers_and_acquisitions","real_estate_and_construction","retail_and_wholesale","technology","energy_transportation","real_estate","retail_wholesale"],"example":"earnings","in":"query","name":"topic","type":"string"},{"description":"Media source filter (optional, e.g. Reuters, Bloomberg, CNBC)","example":"Bloomberg","in":"query","name":"source","type":"string"},{"description":"Start time (Unix seconds); required unless updated_after/updated_before are given, in which case it narrows publish_time as an optional filter","example":1704067200,"format":"int64","in":"query","name":"start_time","type":"integer"},{"description":"End time (Unix seconds); required unless updated_after/updated_before are given, in which case it narrows publish_time as an optional filter","example":1735689600,"format":"int64","in":"query","name":"end_time","type":"integer"},{"description":"Sort by type: PUBLISHED_TIME, OVERALL_SENTIMENT_SCORE, or RELEVANCE_SCORE (default: PUBLISHED_TIME)","enum":["PUBLISHED_TIME","OVERALL_SENTIMENT_SCORE","RELEVANCE_SCORE"],"example":"PUBLISHED_TIME","in":"query","name":"sort_by_type","type":"string"},{"description":"Sort order: ASC or DESC (default: DESC)","enum":["ASC","DESC"],"example":"DESC","in":"query","name":"sort_by","type":"string"},{"default":10,"description":"Maximum number of results (1-100, default: 10)","in":"query","maximum":100,"minimum":1,"name":"limit","type":"integer"},{"default":0,"description":"Pagination offset (\u003e=0, default: 0)","in":"query","minimum":0,"name":"offset","type":"integer"},{"description":"Inclusive article update bound (Unix seconds); requires updated_before","example":1757376000,"format":"int64","in":"query","name":"updated_after","type":"integer"},{"description":"Exclusive article update bound (Unix seconds); must exceed updated_after","example":1757462400,"format":"int64","in":"query","name":"updated_before","type":"integer"},{"description":"Opaque update-window continuation; incompatible with offset","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"List of market news articles","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MarketNewsArticle"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Update polling not available on this backend","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Market News","tags":["Stock"]}},"/v1/stocks/mergers-acquisitions":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_mergers-acquisitions_get.json)\n- Regulatory compliance monitoring\n\n**Pagination \u0026 Limits**\n- Default: 100 records per page\n- Maximum: 1000 records per request","parameters":[{"description":"Start time (Unix timestamp in seconds)","in":"query","name":"start_time","type":"integer"},{"description":"End time (Unix timestamp in seconds)","in":"query","name":"end_time","type":"integer"},{"description":"Stock symbol (e.g., AAPL, RIO, WLKP)","in":"query","name":"symbol","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved M\u0026A data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.GetMergersAcquisitionsResponse"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Mergers \u0026 Acquisitions Data","tags":["Stock"]}},"/v1/stocks/non-us/company/detail":{"get":{"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_non-us_company_detail_get.json)","parameters":[{"description":"Non-US ticker symbol (e.g. 0700.HK, 9888.HK)","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.NonUSCompanyDetail"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/model.APIResponse"}}},"summary":"Get non-US stock company profile","tags":["Stock"]}},"/v1/stocks/non-us/kline":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_non-us_kline_get.json)\nReturns split-adjusted OHLCV bars for non-US tickers in dotted form (e.g. `0700.HK`), newest-first by `time_open`.\nFor every interval, a bar is returned only when `time_open \u003e= start_time` and `time_close \u003c= min(end_time, request_now)`, where `request_now` is the server time captured for the request. Equality at either boundary is allowed. This filter is applied before `limit`.\nA request boundary that cuts through a bar excludes that entire bar; aggregated OHLCV is never truncated to the requested window. `time_close` is the exclusive end of the bar's period, not the timestamp of its last trade.\nSet `interval=1min` to receive 1-minute bars instead of daily bars.\nIntraday intervals (5min–4h) are available only for symbols in the 1-minute polling pool; symbols outside it return an empty data array. 1d/1w/1m cover all non-US symbols.\nWeekly and monthly bars aggregate daily data by the exchange's local calendar. A week runs from Monday 00:00 to the next Monday 00:00; a month runs from its first day at 00:00 to the next month's first day at 00:00. Response timestamps represent those boundaries in UTC.\nFor example, the June 2026 monthly bar for `0700.HK` opens at `2026-05-31T16:00:00Z` (June 1 00:00 Hong Kong time), so a request starting at `2026-06-01T00:00:00Z` excludes that bar.","parameters":[{"description":"Non-US ticker in \u003cTICKER\u003e.\u003cEXCHANGE_SUFFIX\u003e form, e.g. 0700.HK","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Unix seconds; returned bars must have time_open \u003e= start_time","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"Unix seconds (\u003e start_time); returned bars must have time_close \u003c= end_time and must have closed by the request time","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"default":"1d","description":"Bar interval","enum":["1min","5min","15min","30min","1h","4h","1d","1w","1m"],"in":"query","name":"interval","type":"string"},{"default":500,"description":"Max eligible bars after complete-period filtering (1-10000)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.NonUSStockKlinePoint"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad Request","schema":{"$ref":"#/definitions/model.APIResponse"}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/model.APIResponse"}}},"security":[{"ApiKeyAuth":[]}],"summary":"OHLCV klines for non-US stocks (1min–1m)","tags":["Stock"]}},"/v1/stocks/outstanding-shares":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_outstanding-shares_get.json)\nRetrieve outstanding shares records for a given stock symbol.","parameters":[{"description":"Stock symbol (e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Period type","enum":["quarterly","annual"],"in":"query","name":"period_type","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Time filter dimension (default CALENDAR_END_DATE)","enum":["CALENDAR_END_DATE","FILING_DATE","OBSERVED_AT"],"in":"query","name":"time_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.OutstandingSharesItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Outstanding Shares Data","tags":["Stock"]}},"/v1/stocks/ratings":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_ratings_get.json)\n**Feature Overview**\nGet Point-in-Time (PIT) stock ratings data for a specific symbol within a time range.\n\n**Main Use Cases**\n- **Investment Analysis**: Analyze historical stock ratings and scores over time\n- **Performance Tracking**: Track rating changes and score trends\n- **Risk Assessment**: Evaluate financial health metrics and ratios\n- **Portfolio Management**: Make informed decisions based on comprehensive ratings\n- **Research \u0026 Backtesting**: Historical rating data for quantitative analysis\n\n**Query Parameters \u0026 Logic**\n\n**Required Parameters:**\n- `symbol`: Stock symbol (e.g., AAPL, TSLA)\n- `start_time`: Start timestamp (Unix seconds, UTC)\n- `end_time`: End timestamp (Unix seconds, UTC)\n\n**Optional Parameters:**\n- `limit`: Maximum number of results (1-1000, default: 50)\n\n**Validation Rules:**\n- Symbol is required and must be a valid stock symbol\n- start_time must be before end_time\n- Limit defaults to 50 if not provided, max 1000\n\n**Response Data Structure**\n\n- `data` ([]PITStockRatingData): Array of PIT stock rating data points\n\n**PITStockRatingData fields:**\n- `symbol` (string): Stock symbol\n- `date` (string): Rating date (YYYY-MM-DD format)\n- `rating` (string): Overall rating (e.g., \"A+\", \"B\", \"C\")\n- `overall_score` (int32): Overall composite score\n- `discounted_cash_flow_score` (int32): DCF model score\n- `return_on_equity_score` (int32): ROE score\n- `return_on_assets_score` (int32): ROA score\n- `debt_to_equity_score` (int32): Debt-to-Equity ratio score\n- `price_to_earnings_score` (int32): P/E ratio score\n- `price_to_book_score` (int32): P/B ratio score\n- `publish_time` (int64): Data publish timestamp (Unix seconds, UTC)\n\n**Rating Interpretation:**\n- Higher overall score indicates better financial health and performance\n- Individual metric scores range typically from 0-100\n- Rating letters typically: A+, A, A-, B+, B, B-, C+, C, C-, D, F\n\n**Usage Examples**\n\n1. **Get AAPL ratings for last 30 days**: `?symbol=AAPL\u0026start_time=1730678400\u0026end_time=1733356800`\n2. **With custom limit**: `?symbol=TSLA\u0026start_time=1730678400\u0026end_time=1733356800\u0026limit=100`\n3. **Get maximum data points**: `?symbol=MSFT\u0026start_time=1704067200\u0026end_time=1733356800\u0026limit=1000`\n\n**Important Notes**\n\n- All required parameters must be provided\n- Results are ordered by date\n- PIT ratings provide point-in-time snapshots of stock performance\n- All score fields are always present (not optional)","parameters":[{"description":"Stock symbol (e.g., AAPL, TSLA). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds, UTC)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds, UTC)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"default":50,"description":"Maximum number of results (1-1000, default: 50)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns PIT stock ratings","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PITStockRatingData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error - gRPC service failure","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get PIT Stock Ratings","tags":["Stock"]}},"/v1/stocks/research":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_research_get.json)\nReport headers (metadata, report-level summary, key points),\nnewest publication first. `symbol`/`entity` filter on the\nREPORT-level coverage arrays — \"reports discussing X\nanywhere\" (broader than the search endpoint's per-unit\nfilter). Unit summaries are not included; fetch them via\n/research/units or /research/report.","parameters":[{"description":"Reports whose coverage includes this symbol","in":"query","name":"symbol","type":"string"},{"description":"Reports whose coverage includes this entity name","in":"query","name":"entity","type":"string"},{"description":"Report scope","enum":["company","industry","macro"],"in":"query","name":"scope","type":"string"},{"description":"Report sector (closed set)","enum":["semiconductors","software","internet","hardware","financials","industrials","autos","aerospace_space","healthcare","consumer","energy","materials","real_assets","multi","none","other"],"in":"query","name":"sector","type":"string"},{"description":"Report region (closed set)","enum":["us","americas_ex_us","europe","emea_other","japan","greater_china","apac_other","global"],"in":"query","name":"region","type":"string"},{"description":"published_at range start, unix seconds","in":"query","name":"start_time","type":"integer"},{"description":"published_at range end, unix seconds","in":"query","name":"end_time","type":"integer"},{"description":"Max results (default 20, max 100)","in":"query","name":"limit","type":"integer"},{"description":"Offset (default 0)","in":"query","name":"offset","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Report headers, newest first","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ResearchReport"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Browse equity research reports","tags":["Stock"]}},"/v1/stocks/research/report":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_research_report_get.json)\nDetail view: the report header plus every section and exhibit\nsummary, in order. This is the \"read the whole document\"\nendpoint (all content is LLM-generated summaries of the\nsource PDF — open `file_url` for original text). Unknown\ndoc_id → 400 NOT_FOUND.","parameters":[{"description":"Document id (16 hex chars)","in":"query","name":"doc_id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"One report with units populated","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ResearchReport"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters, or unknown doc_id","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get one research report with all its unit summaries","tags":["Stock"]}},"/v1/stocks/research/search":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_research_search_get.json)\nFull-text search over LLM-generated summaries of sell-side\nresearch PDFs. Hits are individual SECTIONS and EXHIBITS (one\nranked mix, `kind` discriminates), never whole reports; each\nhit carries the unit's FULL summary with inline (p.N) page\ncitations plus its report context, and `file_url` opens the\nsource PDF at the hit's page.\n\nSummaries are LLM-generated from the source PDF; page\nreferences are best-effort. Open `file_url` for original text.\n\n**Filters**: `symbol`/`entity` match units that MATERIALLY\nDISCUSS the company (per-unit tags — a thematic's Tesla\nsection matches symbol=TSLA, its Waymo section doesn't);\n`entity` reaches unlisted companies (e.g. \"Waymo\").\n`scope`/`sector`/`region` are closed vocabularies (see enums).\n`per_report` caps how many hits one report may contribute\n(default 2; 1 ≈ best-hit-per-report ranking).\n\n**Sort**: `relevance` (default) or `latest` (same matched\nset, newest publication first — for \"what's the street saying\nnow\"). No `total`; page until `data` comes back short.\nPagination caveat: when few results match all terms, page 1\nmay be filled by an any-term fallback pass; later pages use\nall-term matching only, so a full page 1 can be followed by a\nshort page 2. `entity` matching is exact and case-sensitive.","parameters":[{"description":"Search terms (2-200 chars)","in":"query","name":"q","required":true,"type":"string"},{"description":"Units materially discussing this symbol (canonical form, e.g. NVDA, 0700.HK)","in":"query","name":"symbol","type":"string"},{"description":"Units materially discussing this entity name (reaches unlisted companies)","in":"query","name":"entity","type":"string"},{"description":"Report scope","enum":["company","industry","macro"],"in":"query","name":"scope","type":"string"},{"description":"Report sector (closed set)","enum":["semiconductors","software","internet","hardware","financials","industrials","autos","aerospace_space","healthcare","consumer","energy","materials","real_assets","multi","none","other"],"in":"query","name":"sector","type":"string"},{"description":"Report region (closed set)","enum":["us","americas_ex_us","europe","emea_other","japan","greater_china","apac_other","global"],"in":"query","name":"region","type":"string"},{"description":"published_at range start, unix seconds","in":"query","name":"start_time","type":"integer"},{"description":"published_at range end, unix seconds","in":"query","name":"end_time","type":"integer"},{"description":"relevance (default) or latest","enum":["relevance","latest"],"in":"query","name":"sort","type":"string"},{"description":"Max hits per report (default 2, max 5)","in":"query","name":"per_report","type":"integer"},{"description":"Max results (default 10, max 50)","in":"query","name":"limit","type":"integer"},{"description":"Offset (default 0)","in":"query","name":"offset","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Ranked section/exhibit hits; [] when nothing matched","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ResearchUnit"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Search equity research sections and exhibits","tags":["Stock"]}},"/v1/stocks/research/units":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_research_units_get.json)\nDirect unit fetch: all sections and exhibits of one document\nin order, optionally narrowed to one kind or one unit. Same\nelement shape as /research/search (without scores). Use this\nfor whole-document reads; use the search endpoint to find\nunits across documents.","parameters":[{"description":"Document id (16 hex chars)","in":"query","name":"doc_id","required":true,"type":"string"},{"description":"Narrow to one kind","enum":["section","exhibit"],"in":"query","name":"kind","type":"string"},{"description":"One unit's index (requires kind)","in":"query","name":"idx","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Units in (kind, idx) order","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ResearchUnit"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters, or unknown doc_id","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Fetch research units (sections/exhibits) of one report","tags":["Stock"]}},"/v1/stocks/screener/basic-info/country":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_basic-info_country_get.json)\nRetrieve a list of stock companies filtered by country. Returns basic company information including ticker, name, sector, industry, exchange, and country.\n\n**Country Codes**\nSupports ISO 3166-1 alpha-2 country codes. 57 countries are supported:\n- AE (United Arab Emirates), AR (Argentina), AU (Australia), BE (Belgium), BM (Bermuda), BR (Brazil), BS (Bahamas), CA (Canada), CH (Switzerland), CI (Côte d'Ivoire), CL (Chile), CN (China), CO (Colombia), CR (Costa Rica), CY (Cyprus), DE (Germany), DK (Denmark), ES (Spain), FI (Finland), FR (France), GB (United Kingdom), GG (Guernsey), GI (Gibraltar), GR (Greece), HK (Hong Kong), ID (Indonesia), IE (Ireland), IL (Israel), IN (India), IS (Iceland), IT (Italy), JE (Jersey), JO (Jordan), JP (Japan), KR (South Korea), KY (Cayman Islands), KZ (Kazakhstan), LU (Luxembourg), MC (Monaco), MO (Macao), MX (Mexico), MY (Malaysia), NL (Netherlands), NO (Norway), PA (Panama), PE (Peru), PH (Philippines), SE (Sweden), SG (Singapore), TH (Thailand), TR (Turkey), TW (Taiwan), US (United States), UY (Uruguay), VG (British Virgin Islands), VN (Vietnam), ZA (South Africa).\n**ETF filter**: results default to non-ETF stocks (symbol_type=stock). Pass symbol_type=etf to return ETFs (e.g. SPY, QQQ).","parameters":[{"description":"Country code (ISO 3166-1 alpha-2)","enum":["AE","AR","AU","BE","BM","BR","BS","CA","CH","CI","CL","CN","CO","CR","CY","DE","DK","ES","FI","FR","GB","GG","GI","GR","HK","ID","IE","IL","IN","IS","IT","JE","JO","JP","KR","KY","KZ","LU","MC","MO","MX","MY","NL","NO","PA","PE","PH","SE","SG","TH","TR","TW","US","UY","VG","VN","ZA"],"in":"query","name":"country","required":true,"type":"string"},{"description":"Asset type filter. Valid values: stock (non-ETF), etf. Optional, defaults to stock.","enum":["stock","etf"],"in":"query","name":"symbol_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved stock basic info by country","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.StockScreenerItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Backend unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Stock Basic Info Screener by Country","tags":["Stock"]}},"/v1/stocks/screener/basic-info/exchange":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_basic-info_exchange_get.json)\nRetrieve a list of stock companies filtered by exchange. 3 exchanges are supported: AMEX, NASDAQ, NYSE.\n**ETF filter**: results default to non-ETF stocks (symbol_type=stock). Pass symbol_type=etf to return ETFs (the AMEX bucket in particular is dominated by NYSE Arca-listed ETFs).","parameters":[{"description":"Exchange name","enum":["AMEX","NASDAQ","NYSE"],"in":"query","name":"exchange","required":true,"type":"string"},{"description":"Asset type filter. Valid values: stock (non-ETF), etf. Optional, defaults to stock.","enum":["stock","etf"],"in":"query","name":"symbol_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved stock basic info by exchange","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.StockScreenerItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Backend unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Stock Basic Info Screener by Exchange","tags":["Stock"]}},"/v1/stocks/screener/basic-info/industry":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_basic-info_industry_get.json)\nRetrieve a list of stock companies filtered by industry. 154 industry types are available: Advertising Agencies, Aerospace And Defense, Agricultural Farm Products, Agricultural Inputs, Agricultural Machinery, Airlines Airports And Air Services, Aluminum, Apparel Footwear And Accessories, Apparel Manufacturers, Apparel Retail, Asset Management, Asset Management Cryptocurrency, Asset Management Global, Asset Management Income, Asset Management Leveraged, Auto Dealerships, Auto Manufacturers, Auto Parts, Auto Recreational Vehicles, Banks, Banks Diversified, Banks Regional, Beverages Alcoholic, Beverages Non Alcoholic, Beverages Wineries And Distilleries, Biotechnology, Broadcasting, Business Equipment And Supplies, Chemicals, Chemicals Specialty, Coal, Communication Equipment, Computer Hardware, Conglomerates, Construction, Construction Materials, Consulting Services, Consumer Electronics, Copper, Department Stores, Discount Stores, Diversified Utilities, Drug Manufacturers General, Drug Manufacturers Specialty And Generic, Education And Training Services, Electrical Equipment And Parts, Electronic Gaming And Multimedia, Engineering And Construction, Entertainment, Financial Capital Markets, Financial Conglomerates, Financial Credit Services, Financial Data And Stock Exchanges, Financial Diversified, Financial Mortgages, Food Confectioners, Food Distribution, Furnishings Fixtures And Appliances, Gambling Resorts And Casinos, General Transportation, General Utilities, Gold, Grocery Stores, Hardware Equipment And Parts, Home Improvement, Household And Personal Products, Independent Power Producers, Industrial Distribution, Industrial Infrastructure Operations, Industrial Machinery, Industrial Materials, Industrial Pollution And Treatment Controls, Industrial Specialties, Information Technology Services, Insurance Brokers, Insurance Diversified, Insurance Life, Insurance Property And Casualty, Insurance Reinsurance, Insurance Specialty, Integrated Freight And Logistics, Internet Content And Information, Investment Banking And Investment Services, Leisure, Luxury Goods, Manufacturing Metal Fabrication, Manufacturing Textiles, Manufacturing Tools And Accessories, Marine Shipping, Media And Entertainment, Medical Care Facilities, Medical Devices, Medical Diagnostics And Research, Medical Distribution, Medical Equipment And Services, Medical Healthcare Information Services, Medical Healthcare Plans, Medical Instruments And Supplies, Medical Pharmaceuticals, Medical Specialties, Oil And Gas Drilling, Oil And Gas Energy, Oil And Gas Equipment And Services, Oil And Gas Exploration And Production, Oil And Gas Integrated, Oil And Gas Midstream, Oil And Gas Refining And Marketing, Other Precious Metals, Packaged Foods, Packaging And Containers, Paper Lumber And Forest Products, Personal Products And Services, Publishing, Railroads, Real Estate Development, Real Estate Diversified, Real Estate General, Real Estate Services, Regulated Electric, Regulated Gas, Regulated Water, Reit Diversified, Reit Healthcare Facilities, Reit Hotel And Motel, Reit Industrial, Reit Mortgage, Reit Office, Reit Residential, Reit Retail, Reit Specialty, Renewable Utilities, Rental And Leasing Services, Residential Construction, Restaurants, Security And Protection Services, Semiconductors, Shell Companies, Silver, Software Application, Software Infrastructure, Software Services, Solar, Specialty Business Services, Specialty Retail, Staffing And Employment Services, Steel, Technology Distributors, Telecommunications Services, Tobacco, Travel Lodging, Travel Services, Trucking, Uranium, Waste Management.\n**ETF exclusion**: ETF rows are excluded from this endpoint (same reason as sector — FMP's industry mapping for ETFs is not informative).","parameters":[{"description":"Industry name (see description for full list of 154 industries)","in":"query","name":"industry","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved stock basic info by industry","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.StockScreenerItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Backend unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Stock Basic Info Screener by Industry","tags":["Stock"]}},"/v1/stocks/screener/basic-info/sector":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_basic-info_sector_get.json)\nRetrieve a list of stock companies filtered by sector. 11 sector types are available: Basic Materials, Communication Services, Consumer Cyclical, Consumer Defensive, Energy, Financial Services, Healthcare, Industrials, Real Estate, Technology, Utilities.\n**ETF exclusion**: ETF rows are excluded from this endpoint. FMP categorizes nearly all ETFs as sector=Financial Services, which would dilute meaningful sector results.","parameters":[{"description":"Sector name","enum":["BASIC_MATERIALS","COMMUNICATION_SERVICES","CONSUMER_CYCLICAL","CONSUMER_DEFENSIVE","ENERGY","FINANCIAL_SERVICES","HEALTHCARE","INDUSTRIALS","REAL_ESTATE","TECHNOLOGY","UTILITIES"],"in":"query","name":"sector","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved stock basic info by sector","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.StockScreenerItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Backend unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Stock Basic Info Screener by Sector","tags":["Stock"]}},"/v1/stocks/screener/events":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_events_get.json)\nRetrieve a list of stock events filtered by event type and date range. 3 event types are supported: IPO Date, Split Date, Earnings Date. For Split Date and Earnings Date, the date range must not exceed 1 year.\n**ETF behavior**: IPO Date returns ETF inception dates; Split Date returns ETF splits; Earnings Date returns no ETFs (they have no earnings filings).","parameters":[{"description":"Event type. One of: IPO Date, Split Date, Earnings Date","in":"query","name":"event_type","required":true,"type":"string"},{"description":"Start time (Unix timestamp in seconds). For Split Date and Earnings Date, the date range (end_time - start_time) must not exceed 1 year.","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds). For Split Date and Earnings Date, the date range (end_time - start_time) must not exceed 1 year.","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved stock events","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.StockScreenerItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Backend unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Stock Event Screener","tags":["Stock"]}},"/v1/stocks/screener/financial-metrics":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_financial-metrics_get.json)\nRetrieve stocks filtered by financial metrics at a specific snapshot time. Returns stocks matching the specified metric type and value ranges.\nIncludes companies with a market cap exceeding $5B at the time of the data snapshot. Please note that current market caps may fluctuate below this threshold due to recent price changes.\n\n**Overview:**\nThis endpoint filters stocks based on financial metrics from the `stock_financial_metrics` table. The snapshot parameter is a Unix timestamp (seconds) that will be used directly for querying data.\n\n**Financial Metrics from stock_financial_metrics table (27 metrics):**\n\n**PIT (Point-in-Time) Balance Sheet Ratios (5 metrics):**\n- `CURRENT_RATIO_MRQ`: Current Ratio (Most Recent Quarter) - Current assets divided by current liabilities\n- `DEBT_TO_ASSETS_MRQ`: Debt-to-Assets Ratio (MRQ) - Total debt divided by total assets\n- `DEBT_TO_EQUITY_MRQ`: Debt-to-Equity Ratio (MRQ) - Total debt divided by total equity\n- `NET_WORKING_CAPITAL_MRQ`: Net Working Capital (MRQ) - Current assets minus current liabilities\n- `QUICK_RATIO_MRQ`: Quick Ratio (MRQ) - (Current assets - Inventory) divided by current liabilities\n\n**TTM (Trailing Twelve Months) Base Metrics (3 metrics):**\n- `REVENUE_TTM`: Revenue TTM - Total revenue over trailing twelve months\n- `NET_INCOME_TTM`: Net Income TTM - Net income over trailing twelve months\n- `EPS_TTM`: Earnings Per Share TTM - Earnings per share over trailing twelve months\n\n**TTM Profitability Ratios (3 metrics):**\n- `ROA_TTM`: Return on Assets TTM - Net income divided by average total assets\n- `ROE_TTM`: Return on Equity TTM - Net income divided by average shareholder equity\n- `ROIC_TTM`: Return on Invested Capital TTM - Net operating profit after tax divided by invested capital\n\n**MRQ Margin Ratios (4 metrics):**\n- `GROSS_MARGIN_MRQ`: Gross Margin (MRQ) - (Revenue - Cost of Goods Sold) / Revenue\n- `OPERATING_MARGIN_MRQ`: Operating Margin (MRQ) - Operating income / Revenue\n- `NET_MARGIN_MRQ`: Net Margin (MRQ) - Net income / Revenue\n- `FCF_MARGIN_MRQ`: Free Cash Flow Margin (MRQ) - Free cash flow / Revenue\n\n**Revenue Growth Metrics (4 metrics):**\n- `REVENUE_GROWTH_QOQ`: Revenue Growth Quarter-over-Quarter\n- `REVENUE_GROWTH_YOY_QUARTERLY`: Revenue Growth Year-over-Year (Quarterly)\n- `REVENUE_GROWTH_YOY_TTM`: Revenue Growth Year-over-Year (TTM)\n- `REVENUE_GROWTH_YOY_ANNUAL`: Revenue Growth Year-over-Year (Annual)\n\n**EPS Growth Metrics (4 metrics):**\n- `EPS_GROWTH_QOQ`: EPS Growth Quarter-over-Quarter\n- `EPS_GROWTH_YOY_QUARTERLY`: EPS Growth Year-over-Year (Quarterly)\n- `EPS_GROWTH_YOY_TTM`: EPS Growth Year-over-Year (TTM)\n- `EPS_GROWTH_YOY_ANNUAL`: EPS Growth Year-over-Year (Annual)\n\n**FCF Growth Metrics (4 metrics):**\n- `FCF_GROWTH_QOQ`: Free Cash Flow Growth Quarter-over-Quarter\n- `FCF_GROWTH_YOY_QUARTERLY`: FCF Growth Year-over-Year (Quarterly)\n- `FCF_GROWTH_YOY_TTM`: FCF Growth Year-over-Year (TTM)\n- `FCF_GROWTH_YOY_ANNUAL`: FCF Growth Year-over-Year (Annual)\n\n**Price-Related Metrics (7 metrics):**\n- `MARKET_CAP`: Market Capitalization - Total market value of a company's outstanding shares\n- `PE_RATIO`: Price-to-Earnings Ratio - Market price per share divided by earnings per share\n- `PS_RATIO`: Price-to-Sales Ratio - Market capitalization divided by revenue\n- `PB_RATIO`: Price-to-Book Ratio - Market price per share divided by book value per share\n- `DIVIDEND_YIELD`: Dividend Yield - Annual dividend per share divided by market price per share\n- `ENTERPRISE_VALUE`: Enterprise Value - Market capitalization + Total debt - Cash and cash equivalents\n- `EV_EBITDA_RATIO`: EV/EBITDA Ratio - Enterprise value divided by EBITDA\n\n**Filtering:**\n- Use `range_min` to filter for stocks where the metric value is greater than or equal to the minimum\n- Use `range_max` to filter for stocks where the metric value is less than or equal to the maximum\n- Both filters can be used together to create a range\n- If neither filter is provided, all stocks matching the metric type will be returned\n\n**Response Format:**\nReturns an array of stocks with their symbol, snapshot time (Unix timestamp seconds, UTC), metric type, and metric value.\n**ETF behavior**: financial-metrics returns NO ETFs. The 7 valuation metrics (MARKET_CAP, PE_RATIO, PS_RATIO, PB_RATIO, DIVIDEND_YIELD, ENTERPRISE_VALUE, EV_EBITDA_RATIO) are skipped for ETFs — they require shares-outstanding / SEC fundamentals an ETF does not have (ETF MARKET_CAP via AUM is a follow-up). The 28 fundamental metrics (REVENUE_TTM, ROE_TTM, etc.) likewise return no ETFs. Query ETFs via the technical-metrics endpoint.","parameters":[{"description":"Snapshot time (Unix timestamp in seconds, used directly for querying)","in":"query","name":"snapshot","required":true,"type":"integer"},{"description":"Metric type. Valid values: CURRENT_RATIO_MRQ, DEBT_TO_ASSETS_MRQ, DEBT_TO_EQUITY_MRQ, EPS_GROWTH_QOQ, EPS_GROWTH_YOY_ANNUAL, EPS_GROWTH_YOY_QUARTERLY, EPS_GROWTH_YOY_TTM, EPS_TTM, FCF_GROWTH_QOQ, FCF_GROWTH_YOY_ANNUAL, FCF_GROWTH_YOY_QUARTERLY, FCF_GROWTH_YOY_TTM, FCF_MARGIN_MRQ, GROSS_MARGIN_MRQ, NET_INCOME_TTM, NET_MARGIN_MRQ, NET_WORKING_CAPITAL_MRQ, OPERATING_MARGIN_MRQ, QUICK_RATIO_MRQ, REVENUE_GROWTH_QOQ, REVENUE_GROWTH_YOY_ANNUAL, REVENUE_GROWTH_YOY_QUARTERLY, REVENUE_GROWTH_YOY_TTM, REVENUE_TTM, ROA_TTM, ROE_TTM, ROIC_TTM, MARKET_CAP, PE_RATIO, PS_RATIO, PB_RATIO, DIVIDEND_YIELD, ENTERPRISE_VALUE, EV_EBITDA_RATIO","in":"query","name":"metric_type","required":true,"type":"string"},{"description":"Minimum value filter (optional). Returns only stocks where metric value \u003e= range_min","format":"float64","in":"query","name":"range_min","type":"number"},{"description":"Maximum value filter (optional). Returns only stocks where metric value \u003c= range_max","format":"float64","in":"query","name":"range_max","type":"number"},{"description":"Sort order (optional). Valid values: ASC (ascending), DESC (descending). Defaults to DESC","in":"query","name":"order_by","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved financial metrics screener data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MetricScreenerData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters (missing snapshot, invalid metric_type, etc.)","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Financial Metrics Screener","tags":["Stock"]}},"/v1/stocks/screener/financial-metrics/timerange":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_financial-metrics_timerange_get.json)\nRetrieve stocks filtered by financial metrics over a time range. Returns stocks matching the specified metric type and value range, grouped by date.\n\n**Overview:**\nThis endpoint filters stocks based on financial metrics from the `stock_financial_metrics` table over a specified time range. Results are grouped by date (YYYY-MM-DD format).\n\n**Financial Metrics:** Same as the snapshot endpoint - supports all financial metric types (CURRENT_RATIO_MRQ, PE_RATIO, MARKET_CAP, etc.)\n\n**Data Limitation:**\n- The underlying data table for financial metrics has a limit of 1000 records per day\n- This means each date in the response can contain at most 1000 stock records\n\n**Filtering:**\n- Use `range_min` to filter for stocks where the metric value is greater than or equal to the minimum\n- Use `range_max` to filter for stocks where the metric value is less than or equal to the maximum\n- Both filters can be used together to create a range\n- If neither filter is provided, all stocks matching the metric type will be returned (up to 1000 per day)\n\n**Limit Parameter:**\n- Use `limit` to further limit the maximum number of results returned per day (optional, defaults to no limit)\n- This is useful for pagination or when you only need the top N results per day\n\n**Response Format:**\nReturns an array of date-grouped data items. Each item contains a date (YYYY-MM-DD format) and an array of stocks with their symbol, snapshot time (Unix timestamp seconds, UTC), metric type, and metric value for that date.\n**ETF behavior**: financial-metrics returns NO ETFs. The 7 valuation metrics (MARKET_CAP, PE_RATIO, PS_RATIO, PB_RATIO, DIVIDEND_YIELD, ENTERPRISE_VALUE, EV_EBITDA_RATIO) are skipped for ETFs — they require shares-outstanding / SEC fundamentals an ETF does not have (ETF MARKET_CAP via AUM is a follow-up). The 28 fundamental metrics (REVENUE_TTM, ROE_TTM, etc.) likewise return no ETFs. Query ETFs via the technical-metrics endpoint.","parameters":[{"description":"Start time (Unix timestamp in seconds, UTC)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds, UTC)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Metric type. Valid values: CURRENT_RATIO_MRQ, DEBT_TO_ASSETS_MRQ, DEBT_TO_EQUITY_MRQ, EPS_GROWTH_QOQ, EPS_GROWTH_YOY_ANNUAL, EPS_GROWTH_YOY_QUARTERLY, EPS_GROWTH_YOY_TTM, EPS_TTM, FCF_GROWTH_QOQ, FCF_GROWTH_YOY_ANNUAL, FCF_GROWTH_YOY_QUARTERLY, FCF_GROWTH_YOY_TTM, FCF_MARGIN_MRQ, GROSS_MARGIN_MRQ, NET_INCOME_TTM, NET_MARGIN_MRQ, NET_WORKING_CAPITAL_MRQ, OPERATING_MARGIN_MRQ, QUICK_RATIO_MRQ, REVENUE_GROWTH_QOQ, REVENUE_GROWTH_YOY_ANNUAL, REVENUE_GROWTH_YOY_QUARTERLY, REVENUE_GROWTH_YOY_TTM, REVENUE_TTM, ROA_TTM, ROE_TTM, ROIC_TTM, MARKET_CAP, PE_RATIO, PS_RATIO, PB_RATIO, DIVIDEND_YIELD, ENTERPRISE_VALUE, EV_EBITDA_RATIO","in":"query","name":"metric_type","required":true,"type":"string"},{"description":"Minimum value filter (optional). Returns only stocks where metric value \u003e= range_min","format":"float64","in":"query","name":"range_min","type":"number"},{"description":"Maximum value filter (optional). Returns only stocks where metric value \u003c= range_max","format":"float64","in":"query","name":"range_max","type":"number"},{"description":"Sort order (optional). Valid values: ASC (ascending), DESC (descending). Defaults to DESC","in":"query","name":"order_by","type":"string"},{"description":"Maximum number of results per day (optional, defaults to no limit)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved financial metrics screener time range data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MetricScreenerTimeRangeDataItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters (missing start_time/end_time, invalid metric_type, start_time \u003e= end_time, etc.)","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Financial Metrics Screener Time Range","tags":["Stock"]}},"/v1/stocks/screener/technical-metrics":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_technical-metrics_get.json)\nRetrieve stocks filtered by technical metrics at a specific snapshot time. Returns stocks matching the specified metric type and value range.\n\n**Overview:**\nThis endpoint filters stocks based on technical analysis metrics from the `market_metrics_1d`, `market_metrics_1w`, or `market_metrics_1m` tables. The snapshot parameter is a Unix timestamp (seconds) that will be used directly for querying data.\n\n**Price Change Metrics (9 metrics):**\n- `PRICE_CHANGE_1D`: Price change over 1 day (percentage)\n- `PRICE_CHANGE_1W`: Price change over 1 week (percentage)\n- `PRICE_CHANGE_1M`: Price change over 1 month (percentage)\n- `PRICE_CHANGE_3M`: Price change over 3 months (percentage)\n- `PRICE_CHANGE_6M`: Price change over 6 months (percentage)\n- `PRICE_CHANGE_YTD`: Price change year-to-date (percentage)\n- `PRICE_CHANGE_1Y`: Price change over 1 year (percentage)\n- `PRICE_CHANGE_3Y`: Price change over 3 years (percentage)\n- `PRICE_CHANGE_5Y`: Price change over 5 years (percentage)\n\n**Volume Metrics (3 metrics):**\n- `SHARES_VOLUME`: Trading volume in shares\n- `DOLLAR_VOLUME`: Trading volume in dollars (price × volume)\n- `AVERAGE_DAILY_DOLLAR_VOLUME`: Average daily dollar volume\n\n**Moving Averages - Simple Moving Average (MA) (6 metrics):**\n- `MA_5`: 5-day Simple Moving Average\n- `MA_10`: 10-day Simple Moving Average\n- `MA_20`: 20-day Simple Moving Average\n- `MA_60`: 60-day Simple Moving Average\n- `MA_120`: 120-day Simple Moving Average\n- `MA_200`: 200-day Simple Moving Average\n\n**Moving Averages - Exponential Moving Average (EMA) (6 metrics):**\n- `EMA_5`: 5-day Exponential Moving Average\n- `EMA_10`: 10-day Exponential Moving Average\n- `EMA_20`: 20-day Exponential Moving Average\n- `EMA_60`: 60-day Exponential Moving Average\n- `EMA_120`: 120-day Exponential Moving Average\n- `EMA_200`: 200-day Exponential Moving Average\n\n**Momentum Indicators (1 metric):**\n- `RSI_14`: Relative Strength Index (14-period) - Momentum oscillator that measures speed and magnitude of price changes (typically ranges from 0 to 100)\n\n**MACD (Moving Average Convergence Divergence) Components (3 metrics):**\n- `MACD_DIF`: MACD Line (DIF) - Difference between 12-day EMA and 26-day EMA\n- `MACD_DEA`: Signal Line (DEA) - 9-day EMA of the MACD line\n- `MACD_HIST`: MACD Histogram - Difference between MACD line and signal line\n\n**Bollinger Bands Components (3 metrics):**\n- `BOLLINGER_UPPER`: Upper Bollinger Band - Upper band of Bollinger Bands (20-day MA + 2 standard deviations)\n- `BOLLINGER_MID`: Middle Bollinger Band - 20-day Simple Moving Average\n- `BOLLINGER_LOWER`: Lower Bollinger Band - Lower band of Bollinger Bands (20-day MA - 2 standard deviations)\n\n**Other Technical Indicators (5 metrics):**\n- `VWAP_DAY`: Volume Weighted Average Price (Day) - Average price weighted by volume for the trading day\n- `BETA`: Beta - Measure of stock's volatility relative to the market (typically S\u0026P 500). Beta of 1 means stock moves with market\n- `VOLATILITY_20`: Volatility (20-period) - Standard deviation of returns over 20 periods (annualized)\n- `VOLATILITY_60`: Volatility (60-period) - Standard deviation of returns over 60 periods (annualized)\n- `VOLATILITY_90`: Volatility (90-period) - Standard deviation of returns over 90 periods (annualized)\n\n**Filtering:**\n- Use `range_min` to filter for stocks where the metric value is greater than or equal to the minimum\n- Use `range_max` to filter for stocks where the metric value is less than or equal to the maximum\n- Both filters can be used together to create a range\n- If neither filter is provided, all stocks matching the metric type will be returned\n\n**Response Format:**\nReturns an array of stocks with their symbol, snapshot time (Unix timestamp seconds, UTC), metric type, and metric value.\n**ETF inclusion**: Liquid ETFs (30-day average daily dollar volume ≥ $10M, ~800 ETFs) are included in results across all 36 technical metrics.","parameters":[{"description":"Snapshot time (Unix timestamp in seconds, used directly for querying)","in":"query","name":"snapshot","required":true,"type":"integer"},{"description":"Metric type. Valid values: PRICE_CHANGE_1D, PRICE_CHANGE_1W, PRICE_CHANGE_1M, PRICE_CHANGE_3M, PRICE_CHANGE_6M, PRICE_CHANGE_YTD, PRICE_CHANGE_1Y, PRICE_CHANGE_3Y, PRICE_CHANGE_5Y, SHARES_VOLUME, DOLLAR_VOLUME, AVERAGE_DAILY_DOLLAR_VOLUME, MA_5, MA_10, MA_20, MA_60, MA_120, MA_200, EMA_5, EMA_10, EMA_20, EMA_60, EMA_120, EMA_200, RSI_14, MACD_DIF, MACD_DEA, MACD_HIST, BOLLINGER_UPPER, BOLLINGER_MID, BOLLINGER_LOWER, VWAP_DAY, BETA, VOLATILITY_20, VOLATILITY_60, VOLATILITY_90","in":"query","name":"metric_type","required":true,"type":"string"},{"description":"Minimum value filter (optional). Returns only stocks where metric value \u003e= range_min","format":"float64","in":"query","name":"range_min","type":"number"},{"description":"Maximum value filter (optional). Returns only stocks where metric value \u003c= range_max","format":"float64","in":"query","name":"range_max","type":"number"},{"description":"Sort order (optional). Valid values: ASC (ascending), DESC (descending). Defaults to DESC","in":"query","name":"order_by","type":"string"},{"description":"Asset type filter. Valid values: stock (CS/ADRC), etf. Optional, defaults to stock.","enum":["stock","etf"],"in":"query","name":"symbol_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved technical metrics screener data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MetricScreenerData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters (missing snapshot, invalid metric_type, etc.)","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Technical Metrics Screener","tags":["Stock"]}},"/v1/stocks/screener/technical-metrics/timerange":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_screener_technical-metrics_timerange_get.json)\nRetrieve stocks filtered by technical metrics over a time range. Returns stocks matching the specified metric type and value range, grouped by date.\n\n**Overview:**\nThis endpoint filters stocks based on technical analysis metrics from the `market_metrics_1d`, `market_metrics_1w`, or `market_metrics_1m` tables over a specified time range. Results are grouped by date (YYYY-MM-DD format).\n\n**Technical Metrics:** Same as the snapshot endpoint - supports all technical metric types (PRICE_CHANGE_1W, MA_5, RSI_14, BETA, etc.)\n\n**Filtering:**\n- Use `range_min` to filter for stocks where the metric value is greater than or equal to the minimum\n- Use `range_max` to filter for stocks where the metric value is less than or equal to the maximum\n- Both filters can be used together to create a range\n- If neither filter is provided, all stocks matching the metric type will be returned\n\n**Limit Parameter:**\n- Use `limit` to limit the maximum number of results returned per day (optional, defaults to no limit)\n- This is useful for pagination or when you only need the top N results per day\n\n**Response Format:**\nReturns an array of date-grouped data items. Each item contains a date (YYYY-MM-DD format) and an array of stocks with their symbol, snapshot time (Unix timestamp seconds, UTC), metric type, and metric value for that date.\n**ETF inclusion**: Liquid ETFs (30-day average daily dollar volume ≥ $10M, ~800 ETFs) are included in results across all 36 technical metrics.","parameters":[{"description":"Start time (Unix timestamp in seconds, UTC)","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End time (Unix timestamp in seconds, UTC)","in":"query","name":"end_time","required":true,"type":"integer"},{"description":"Metric type. Valid values: PRICE_CHANGE_1D, PRICE_CHANGE_1W, PRICE_CHANGE_1M, PRICE_CHANGE_3M, PRICE_CHANGE_6M, PRICE_CHANGE_YTD, PRICE_CHANGE_1Y, PRICE_CHANGE_3Y, PRICE_CHANGE_5Y, SHARES_VOLUME, DOLLAR_VOLUME, AVERAGE_DAILY_DOLLAR_VOLUME, MA_5, MA_10, MA_20, MA_60, MA_120, MA_200, EMA_5, EMA_10, EMA_20, EMA_60, EMA_120, EMA_200, RSI_14, MACD_DIF, MACD_DEA, MACD_HIST, BOLLINGER_UPPER, BOLLINGER_MID, BOLLINGER_LOWER, VWAP_DAY, BETA, VOLATILITY_20, VOLATILITY_60, VOLATILITY_90","in":"query","name":"metric_type","required":true,"type":"string"},{"description":"Minimum value filter (optional). Returns only stocks where metric value \u003e= range_min","format":"float64","in":"query","name":"range_min","type":"number"},{"description":"Maximum value filter (optional). Returns only stocks where metric value \u003c= range_max","format":"float64","in":"query","name":"range_max","type":"number"},{"description":"Sort order (optional). Valid values: ASC (ascending), DESC (descending). Defaults to DESC","in":"query","name":"order_by","type":"string"},{"description":"Maximum number of results per day (optional, defaults to no limit)","in":"query","name":"limit","type":"integer"},{"description":"Asset type filter. Valid values: stock (CS/ADRC), etf. Optional, defaults to stock.","enum":["stock","etf"],"in":"query","name":"symbol_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved technical metrics screener time range data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.MetricScreenerTimeRangeDataItem"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters (missing start_time/end_time, invalid metric_type, start_time \u003e= end_time, etc.)","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"502":{"description":"Upstream response too large","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Technical Metrics Screener Time Range","tags":["Stock"]}},"/v1/stocks/sec-earnings-release":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_sec-earnings-release_get.json)\nRetrieve SEC earnings release publication date by symbol and fiscal period","parameters":[{"description":"Company symbol (e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Period type","enum":["annual","quarterly"],"in":"query","name":"period_type","required":true,"type":"string"},{"description":"Fiscal year (e.g., 2024)","in":"query","name":"fiscal_year","required":true,"type":"integer"},{"description":"Fiscal quarter (required when period_type=quarterly)","enum":["Q1","Q2","Q3","Q4","FY"],"in":"query","name":"fiscal_quarter","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved SEC earnings release","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SECEarningsReleaseData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get SEC Earnings Release publication date","tags":["Stock"]}},"/v1/stocks/sec-filings":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_sec-filings_get.json)\nList a company's SEC 10-K (annual) and 10-Q (quarterly) filings — filing/report dates, resolved fiscal period, and the primary document URL on sec.gov. With no filters, returns all stored filings for the symbol, ordered by filing_date descending (newest first). fiscal_quarter=FY selects the 10-K of that fiscal year; Q4 normally returns empty because US filers report the fourth quarter inside the 10-K rather than in a separate 10-Q.","parameters":[{"description":"Company symbol (e.g., AAPL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Form type","enum":["10-K","10-Q"],"in":"query","name":"form_type","type":"string"},{"description":"Fiscal year (e.g., 2026)","in":"query","name":"fiscal_year","type":"integer"},{"description":"Fiscal quarter (requires fiscal_year)","enum":["Q1","Q2","Q3","Q4","FY"],"in":"query","name":"fiscal_quarter","type":"string"},{"description":"Max rows (1-500; default all)","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved SEC filings","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SECFiling"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"List SEC 10-K/10-Q filings with document URLs","tags":["Stock"]}},"/v1/stocks/shares-float":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n**Feature Overview**\n[OpenAPI JSON Spec](/docs/output/v1_stocks_shares-float_get.json)\nRetrieve shares float information for a specified stock symbol. This endpoint provides detailed data about free float, outstanding shares, and float shares for equity analysis.\n\n**Main Use Cases**\n- **Equity Analysis**: Analyze stock float and outstanding shares\n- **Liquidity Assessment**: Evaluate stock liquidity based on float data\n- **Investment Research**: Understand stock structure and trading characteristics\n- **Risk Management**: Assess concentration risk and float availability\n- **Compliance Monitoring**: Track float requirements and regulations\n\n**Response Data Structure**\n\n`data` is a flat array of SharesFloat items:\n\n**SharesFloat fields:**\n- `symbol` (string): Stock symbol\n- `date` (string): Data date and time\n- `free_float` (float64): Free float percentage\n- `float_shares` (string): Number of float shares\n- `outstanding_shares` (string): Number of outstanding shares\n- `source` (string): Data source URL","parameters":[{"description":"Stock symbol (uppercase, e.g., AAPL, MSFT, GOOGL). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully retrieved shares float data","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.SharesFloat"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get Shares Float Data","tags":["Stock"]}},"/v1/stocks/short-interest":{"get":{"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_short-interest_get.json)\nBi-monthly FINRA consolidated short interest for a US equity:\nshort interest (shares), change vs prior period, days-to-cover,\naverage daily volume, and SI% of float/outstanding. Reported by\nsettlement date and lags ~8 trading days (not real time).\nstart_time/end_time (unix seconds) are optional but must be sent\ntogether; omit both for the latest period. time_type selects\nwhich timestamp the range filters: SETTLEMENT_DATE (default,\ncalendar-day) or UPDATED_AT (our upsert time, second precision).","parameters":[{"description":"Symbol (e.g. NVDA, BRK.B). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Range start, unix seconds (with end_time)","in":"query","name":"start_time","type":"integer"},{"description":"Range end, unix seconds (with start_time)","in":"query","name":"end_time","type":"integer"},{"description":"Which timestamp to filter","enum":["SETTLEMENT_DATE","UPDATED_AT"],"in":"query","name":"time_type","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.ShortInterestPoint"},"type":"array"}},"type":"object"}]}}},"summary":"Get FINRA Short Interest","tags":["Stock"]}},"/v1/stocks/splits":{"get":{"consumes":["application/json"],"description":"US share-class symbols accept both `BRK.B` and `BRK-B`. When `symbol` is provided, matching scalar `symbol` fields in the response echo the request spelling.\n\n[OpenAPI JSON Spec](/docs/output/v1_stocks_splits_get.json)\n**Feature Overview**\nGet Point-in-Time (PIT) stock split data for a specific symbol within a time range.\n\n**Main Use Cases**\n- **Corporate Action Analysis**: Track historical stock split events\n- **Price Adjustment**: Use split data for historical price adjustments\n- **Investment Research**: Study split patterns and their market impact\n- **Backtesting**: Historical split data for quantitative analysis\n- **Portfolio Management**: Track corporate actions affecting holdings\n\n**Query Parameters \u0026 Logic**\n\n**Required Parameters:**\n- `symbol`: Stock symbol (e.g., AAPL, TSLA, NVDA)\n- `start_time`: Start timestamp (Unix seconds, UTC)\n- `end_time`: End timestamp (Unix seconds, UTC)\n\n**Optional Parameters:**\n- `limit`: Maximum number of results (1-1000, default: 50)\n\n**Validation Rules:**\n- Symbol is required and must be a valid stock symbol\n- start_time must be before end_time\n- Limit defaults to 50 if not provided, max 1000\n\n**Response Data Structure**\n\n- `data` ([]PITStockSplitData): Array of PIT stock split data points\n\n**PITStockSplitData fields:**\n- `symbol` (string): Stock symbol\n- `date` (string): Split date (YYYY-MM-DD)\n- `numerator` (float64): Split numerator (e.g., 2.0 for 2-for-1 split)\n- `denominator` (float64): Split denominator (e.g., 1.0 for 2-for-1 split)\n- `observed_at` (int64): Ingestion timestamp (when this split row was first recorded), Unix seconds, UTC\n\n**Stock Split Explanation:**\n- **2-for-1 Split**: numerator=2, denominator=1 (shareholders receive 2 shares for each 1 held)\n- **3-for-2 Split**: numerator=3, denominator=2 (shareholders receive 3 shares for each 2 held)\n- **Reverse Split (1-for-5)**: numerator=1, denominator=5 (consolidation, 5 shares become 1)\n- **Split Ratio**: numerator/denominator (e.g., 2.0 means stock doubles in quantity, halves in price)\n\n**Usage Examples**\n\n1. **Get AAPL splits for 2024**: `?symbol=AAPL\u0026start_time=1704067200\u0026end_time=1735689600`\n2. **With custom limit**: `?symbol=TSLA\u0026start_time=1704067200\u0026end_time=1735689600\u0026limit=100`\n3. **Get maximum data points**: `?symbol=NVDA\u0026start_time=1640995200\u0026end_time=1735689600\u0026limit=1000`\n\n**Important Notes**\n\n- All required parameters must be provided\n- Results are ordered by date (typically descending)\n- PIT splits provide point-in-time snapshots as they were known historically\n- Split date is the effective date of the split\n- Use split ratio for historical price adjustments: adjusted_price = price * (denominator / numerator)","parameters":[{"description":"Stock symbol (e.g., AAPL, TSLA, NVDA). US share classes accept both BRK.B and BRK-B.","in":"query","name":"symbol","required":true,"type":"string"},{"description":"Start timestamp (Unix seconds, UTC)","format":"int64","in":"query","name":"start_time","required":true,"type":"integer"},{"description":"End timestamp (Unix seconds, UTC)","format":"int64","in":"query","name":"end_time","required":true,"type":"integer"},{"default":50,"description":"Maximum number of results (1-1000, default: 50)","format":"int32","in":"query","name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Successfully returns PIT stock splits","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.PITStockSplitData"},"type":"array"}},"type":"object"}]}},"400":{"description":"Parameter validation error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error - gRPC service failure","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Dependency timeout or unavailable","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get PIT Stock Splits","tags":["Stock"]}},"/v1/stocks/tv-news":{"get":{"consumes":["application/json"],"description":"[OpenAPI JSON Spec](/docs/output/v1_stocks_tv-news_get.json)\nRetrieve TradingView news stories within a time range, optionally filtered by symbol or industry.\n\nData \u0026 semantics:\n- start_time: Start time (Unix timestamp in seconds, required unless updated_after and updated_before are supplied)\n- end_time: End time (Unix timestamp in seconds, same requirement as start_time)\n- symbol: Canonical symbol filter (optional, e.g., AAPL, BRK.B, 0700.HK); mutually exclusive with industry\n- industry: FMP industry filter (optional); mutually exclusive with symbol\n- limit: Maximum number of results (optional, 1–500, default: 10)\nResults are ordered by published_at DESC (newest first).\n\nUpdate polling selects rows within [updated_after, updated_before),\nordered by updated_at ASC, story_id ASC. Times are Unix seconds; both bounds\nare required together and the whole table may be polled with a bounded window.\nstart_time/end_time (on published_at) and symbol/industry intersect that window.\nupdated_at advances when a story's title, content or related symbols change,\nand each item carries story_id — TradingView's natural key, no surrogate id —\nplus RFC3339 updated_at. Pass pagination.cursor back unchanged with the same\nwindow and filters; limit may change on retry. An omitted cursor with\nhas_more=false means the window is drained. Start each new window without the\nold cursor. Offset paging is not available in window mode.\nThis is current-state polling, not a snapshot or deletion feed: overlap\nwindows and reconcile delayed writes. See docs/api/update-polling.md.\n\nValid industry values (exact match required):\nAdvertising Agencies; Aerospace \u0026 Defense; Agricultural - Machinery; Agricultural Farm Products;\nAgricultural Inputs; Airlines, Airports \u0026 Air Services; Aluminum;\nApparel - Footwear \u0026 Accessories; Apparel - Manufacturers; Apparel - Retail;\nAsset Management; Asset Management - Bonds; Asset Management - Cryptocurrency;\nAsset Management - Global; Asset Management - Income; Asset Management - Leveraged;\nAuto - Dealerships; Auto - Manufacturers; Auto - Parts; Auto - Recreational Vehicles;\nBanks; Banks - Diversified; Banks - Regional; Beverages - Alcoholic;\nBeverages - Non-Alcoholic; Beverages - Wineries \u0026 Distilleries; Biotechnology; Broadcasting;\nBusiness Equipment \u0026 Supplies; Chemicals; Chemicals - Specialty; Coal;\nCommunication Equipment; Computer Hardware; Conglomerates; Construction;\nConstruction Materials; Consulting Services; Consumer Electronics; Copper;\nDepartment Stores; Discount Stores; Diversified Utilities; Drug Manufacturers - General;\nDrug Manufacturers - Specialty \u0026 Generic; Education \u0026 Training Services;\nElectrical Equipment \u0026 Parts; Electronic Gaming \u0026 Multimedia; Engineering \u0026 Construction;\nEntertainment; Environmental Services; Financial - Capital Markets;\nFinancial - Conglomerates; Financial - Credit Services;\nFinancial - Data \u0026 Stock Exchanges; Financial - Diversified; Financial - Mortgages;\nFood Confectioners; Food Distribution; Furnishings, Fixtures \u0026 Appliances;\nGambling, Resorts \u0026 Casinos; General Transportation; General Utilities; Gold;\nGrocery Stores; Hardware, Equipment \u0026 Parts; Home Improvement;\nHousehold \u0026 Personal Products; Independent Power Producers;\nIndustrial - Distribution; Industrial - Infrastructure Operations; Industrial - Machinery;\nIndustrial - Pollution \u0026 Treatment Controls; Industrial - Specialties; Industrial Materials;\nInformation Technology Services; Insurance - Brokers; Insurance - Diversified;\nInsurance - Life; Insurance - Property \u0026 Casualty; Insurance - Reinsurance;\nInsurance - Specialty; Integrated Freight \u0026 Logistics; Internet Content \u0026 Information;\nInvestment - Banking \u0026 Investment Services; Leisure; Luxury Goods;\nManufacturing - Metal Fabrication; Manufacturing - Miscellaneous;\nManufacturing - Textiles; Manufacturing - Tools \u0026 Accessories; Marine Shipping;\nMedia \u0026 Entertainment; Medical - Care Facilities; Medical - Devices;\nMedical - Diagnostics \u0026 Research; Medical - Distribution;\nMedical - Equipment \u0026 Services; Medical - Healthcare Information Services;\nMedical - Healthcare Plans; Medical - Instruments \u0026 Supplies;\nMedical - Pharmaceuticals; Medical - Specialties; Oil \u0026 Gas Drilling; Oil \u0026 Gas Energy;\nOil \u0026 Gas Equipment \u0026 Services; Oil \u0026 Gas Exploration \u0026 Production;\nOil \u0026 Gas Integrated; Oil \u0026 Gas Midstream; Oil \u0026 Gas Refining \u0026 Marketing;\nOther Precious Metals; Packaged Foods; Packaging \u0026 Containers;\nPaper, Lumber \u0026 Forest Products; Personal Products \u0026 Services; Publishing;\nREIT - Diversified; REIT - Healthcare Facilities; REIT - Hotel \u0026 Motel; REIT - Industrial;\nREIT - Mortgage; REIT - Office; REIT - Residential; REIT - Retail; REIT - Specialty;\nRailroads; Real Estate - Development; Real Estate - Diversified; Real Estate - Services;\nRegulated Electric; Regulated Gas; Regulated Water; Renewable Utilities;\nRental \u0026 Leasing Services; Residential Construction; Restaurants;\nSecurity \u0026 Protection Services; Semiconductors; Shell Companies; Silver;\nSoftware - Application; Software - Infrastructure; Software - Services; Solar;\nSpecialty Business Services; Specialty Retail; Staffing \u0026 Employment Services; Steel;\nTechnology Distributors; Telecommunications Services; Tobacco; Travel Lodging;\nTravel Services; Trucking; Uranium; Waste Management","parameters":[{"description":"Canonical symbol filter (optional)","example":"AAPL","in":"query","name":"symbol","type":"string"},{"description":"Filter to stories with a symbol in this exact FMP industry. Mutually exclusive with symbol.","in":"query","name":"industry","type":"string"},{"description":"Start time (Unix seconds); required unless updated_after/updated_before are given, in which case it narrows published_at as an optional filter","example":1704067200,"format":"int64","in":"query","name":"start_time","type":"integer"},{"description":"End time (Unix seconds); required unless updated_after/updated_before are given, in which case it narrows published_at as an optional filter","example":1735689600,"format":"int64","in":"query","name":"end_time","type":"integer"},{"default":10,"description":"Maximum number of results (1–500, default: 10)","in":"query","maximum":500,"minimum":1,"name":"limit","type":"integer"},{"description":"Inclusive story update bound (Unix seconds); requires updated_before","format":"int64","in":"query","name":"updated_after","type":"integer"},{"description":"Exclusive story update bound (Unix seconds); must exceed updated_after","format":"int64","in":"query","name":"updated_before","type":"integer"},{"description":"Opaque update-window continuation; requires an update window","in":"query","name":"cursor","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"List of TradingView news stories","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/model.TVNewsArticle"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid parameters","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"408":{"description":"Request timeout","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}},"503":{"description":"Update polling not available on this backend yet","schema":{"allOf":[{"$ref":"#/definitions/model.APIResponse"},{"properties":{"error":{"$ref":"#/definitions/model.APIError"}},"type":"object"}]}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get TradingView News","tags":["Stock"]}}},"schemes":["https"],"securityDefinitions":{"ApiKeyAuth":{"description":"API Key authentication. Example: \"your-api-key-here\"","in":"header","name":"X-API-Key","type":"apiKey"}},"swagger":"2.0"}