{"openapi":"3.1.0","info":{"title":"nfin API Reference","version":"0.1.0","description":"Nasdaq source API contract for bluedoor Financial Data.\n\nSource-native Nasdaq-backed routes for calendars, options, quote pages, short interest, IPOs, and Nordic market data.\n\nHosted, AI-friendly Nasdaq.com public data API for quotes, historical prices, options, calendars, IPOs, market movers, screeners, news, ownership, funds, ISEE, and Nasdaq Nordic workflows.","x-bluedoor-source":{"source_id":"nfin","adapter_slug":"nasdaq","upstream":"nasdaq.com","docs_url":"https://bluedoor.sh/apis/financial-data/sources/nfin"}},"servers":[{"url":"https://api.nfin.dev","description":"Current source API host"},{"url":"https://api.bluedoor.sh/adapters/nasdaq","description":"bluedoor adapter namespace"}],"tags":[{"name":"System","description":"Health, OpenAPI, and endpoint discovery."},{"name":"Auth","description":"Email verification, API keys, key management, and custom limit requests."},{"name":"Search","description":"Symbol and instrument search."},{"name":"Quotes","description":"Nasdaq quote, chart, historical, dividend, EPS, and trade routes."},{"name":"Options","description":"Option chains, greeks, and most-active option routes."},{"name":"Calendars","description":"Earnings, dividends, splits, and upcoming event calendars."},{"name":"IPOs","description":"IPO calendar, overview, experts, financials, and filings."},{"name":"Markets","description":"Market info, lists, and movers."},{"name":"Screeners","description":"Nasdaq screener routes."},{"name":"Company Data","description":"Ownership and company-oriented data."},{"name":"Funds","description":"Fund section data."},{"name":"News","description":"Press-center and topic news."},{"name":"ISEE","description":"ISEE sentiment index data."},{"name":"Nordic","description":"Nasdaq Nordic search, listing, screener, instrument, and market data."}],"components":{"securitySchemes":{"nfinApiKey":{"type":"apiKey","in":"header","name":"X-Nfin-Key"},"bearerAuth":{"type":"http","scheme":"bearer"},"managementToken":{"type":"apiKey","in":"header","name":"X-Nfin-Management-Token"}},"schemas":{"GenericSuccessResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"description":"Endpoint-specific response data."}},"additionalProperties":true},"HealthResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"name":{"type":"string"},"version":{"type":"string"},"shipped_rest_contracts":{"type":"integer"},"identity":{"$ref":"#/components/schemas/IdentityPolicy"}},"required":["ok","name","version","shipped_rest_contracts"],"additionalProperties":false},"IdentityPolicy":{"type":"object","properties":{"anonymous":{"type":"string"},"contact":{"type":"string"},"auth":{"type":"string"},"key":{"type":"string"},"limits":{"type":"string"}},"additionalProperties":false},"EndpointCatalogResponse":{"type":"object","properties":{"shipped_contract_count":{"type":"integer"},"identity_policy":{"$ref":"#/components/schemas/IdentityPolicy"},"friendly_routes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/EndpointCatalogRoute"}},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/EndpointCatalogItem"}}},"required":["shipped_contract_count","friendly_routes","endpoints"],"additionalProperties":false},"EndpointCatalogRoute":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"],"additionalProperties":false},"EndpointCatalogItem":{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string"},"method":{"type":"string"},"auth_tier":{"type":"string"},"freshness":{"type":"object","properties":{"max_age_seconds":{"type":"integer"},"stale_while_revalidate_seconds":{"type":"integer"}},"additionalProperties":false},"description":{"type":"string"}},"required":["name","path","method","description"],"additionalProperties":false},"ResponseMeta":{"type":"object","properties":{"provider":{"type":"string","const":"nasdaq"},"route":{"type":"string"},"status":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"freshness":{"$ref":"#/components/schemas/Freshness"}},"required":["provider","route","generated_at"],"additionalProperties":false},"Freshness":{"type":"object","properties":{"as_of":{"type":"string","format":"date-time"},"max_age_seconds":{"type":"integer"},"stale":{"type":"boolean"}},"additionalProperties":false},"NfinMarketDataResponse":{"type":"object","properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"$ref":"#/components/schemas/NasdaqSourcePayload"}},"required":["meta","data"],"additionalProperties":true},"NasdaqSourcePayload":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","additionalProperties":true},{"type":"array","items":{"type":"object","additionalProperties":true}},{"type":"string"},{"type":"null"}],"description":"Provider payload from Nasdaq. Shape varies by route; table routes commonly expose data.headers and data.rows."},"message":{"type":["string","null"]},"messages":{"type":["array","null"],"items":{"type":"object","additionalProperties":true}},"status":{"$ref":"#/components/schemas/NasdaqStatus"}},"additionalProperties":true},"NasdaqStatus":{"type":"object","properties":{"rCode":{"type":"integer"},"bCodeMessage":{"type":["string","null"]},"developerMessage":{"type":["string","null"]}},"additionalProperties":true},"NasdaqTable":{"type":"object","properties":{"asOf":{"type":["string","null"]},"headers":{"type":"object","additionalProperties":{"type":"string"}},"rows":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true}}},"additionalProperties":true},"AuthOtpRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"],"additionalProperties":false},"AuthOtpResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"email":{"type":"string","format":"email"},"expires_in_seconds":{"type":"integer"},"delivery":{"type":"string"},"message_id":{"type":"string"}},"required":["email","expires_in_seconds","delivery"],"additionalProperties":false}},"required":["ok","data"],"additionalProperties":false},"AuthVerifyRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"code":{"type":"string"},"label":{"type":"string"},"create_key":{"type":"boolean"},"expires_in_days":{"type":"integer"}},"required":["email","code"],"additionalProperties":false},"ApiKeyRecord":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","format":"email"},"label":{"type":["string","null"]},"created_at":{"type":"integer"},"expires_at":{"type":"integer"},"revoked_at":{"type":["integer","null"]},"last_used_at":{"type":["integer","null"]},"requests_per_minute":{"type":"integer"},"origin_per_minute":{"type":"integer"}},"required":["id","email","created_at","expires_at"],"additionalProperties":false},"AuthVerifyResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"email":{"type":"string","format":"email"},"management_token":{"type":"string"},"token_type":{"type":"string"},"management_expires_in_seconds":{"type":"integer"},"api_key":{"type":"string"},"key":{"$ref":"#/components/schemas/ApiKeyRecord"}},"required":["email","management_token","token_type","management_expires_in_seconds"],"additionalProperties":false}},"required":["ok","data"],"additionalProperties":false},"ApiKeysResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"email":{"type":"string","format":"email"},"keys":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyRecord"}}},"required":["email","keys"],"additionalProperties":false}},"required":["ok","data"],"additionalProperties":false},"ApiKeyCreateRequest":{"type":"object","properties":{"label":{"type":"string"},"expires_in_days":{"type":"integer","minimum":1}},"additionalProperties":false},"ApiKeyCreateResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"api_key":{"type":"string"},"key":{"$ref":"#/components/schemas/ApiKeyRecord"}},"required":["api_key","key"],"additionalProperties":false}},"required":["ok","data"],"additionalProperties":false},"ApiKeyRevokeResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"id":{"type":"string"},"revoked":{"type":"boolean"},"revoked_at":{"type":"integer"}},"required":["id","revoked","revoked_at"],"additionalProperties":false}},"required":["ok","data"],"additionalProperties":false},"ApiKeyRotateResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"revoked_key_id":{"type":"string"},"api_key":{"type":"string"},"key":{"$ref":"#/components/schemas/ApiKeyRecord"}},"required":["revoked_key_id","api_key","key"],"additionalProperties":false}},"required":["ok","data"],"additionalProperties":false},"AuthLimitRequest":{"type":"object","properties":{"requested_rps":{"type":"number"},"requested_origin_rps":{"type":"number"},"use_case":{"type":"string"},"message":{"type":"string"}},"required":["use_case"],"additionalProperties":false},"AuthLimitRequestResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","format":"email"},"status":{"type":"string"},"notification":{"type":"object","additionalProperties":true},"message":{"type":"string"}},"required":["id","email","status","message"],"additionalProperties":false}},"required":["ok","data"],"additionalProperties":false},"ErrorDetail":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"ErrorResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$ref":"#/components/schemas/ErrorDetail"},"allow":{"type":"array","items":{"type":"string"}},"meta":{"type":"object","additionalProperties":true}},"required":["ok","error"],"additionalProperties":true},"RateLimitResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$ref":"#/components/schemas/ErrorDetail"},"rate_limit":{"type":"object","properties":{"scope":{"type":"string"},"tier":{"type":"string"},"retry_after_seconds":{"type":"integer","minimum":1},"upgrade":{"type":"object","additionalProperties":true}},"required":["scope","tier"],"additionalProperties":true}},"required":["ok","error","rate_limit"],"additionalProperties":false},"CalendarDividendsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Dividend calendar response. The data field contains the Nasdaq payload for Dividend Calendar. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"CalendarEarningsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Earnings calendar response. The data field contains the Nasdaq payload for Earnings Calendar. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"CalendarSplitsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Split calendar response. The data field contains the Nasdaq payload for Split Calendar. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"CalendarUpcomingResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Upcoming calendar response. The data field contains the Nasdaq payload for Upcoming Calendar Events. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"CalendarUpcomingRecentResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Upcoming and recent calendar response. The data field contains the Nasdaq payload for Upcoming And Recent Calendar Events. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"CompanyOwnershipResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Company ownership response. The data field contains the Nasdaq payload for Company Ownership. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"FundSectionResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Fund section response. The data field contains the Nasdaq payload for Fund Section. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"IpoCalendarResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"IPO calendar response. The data field contains the Nasdaq payload for IPO Calendar. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"IpoExpertsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"IPO experts response. The data field contains the Nasdaq payload for IPO Experts. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"IpoFilingsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"IPO financials and filings response. The data field contains the Nasdaq payload for IPO Financials And Filings. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"IpoOverviewResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"IPO overview response. The data field contains the Nasdaq payload for IPO Overview. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"IseeResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"ISEE index response. The data field contains the Nasdaq payload for ISEE Index. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"IseeChartResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"ISEE chart response. The data field contains the Nasdaq payload for ISEE Chart. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"IseeDownloadResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"ISEE download response. The data field contains the Nasdaq payload for ISEE Download. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"ListTypeResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Market list response. The data field contains the Nasdaq payload for Market List. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"ListTypeExtendedResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Extended market list response. The data field contains the Nasdaq payload for Extended Market List. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"MarketInfoResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Market info response. The data field contains the Nasdaq payload for Market Info. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"MarketMoversResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Market movers response. The data field contains the Nasdaq payload for Market Movers. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NewsPressCenterResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Press center news response. The data field contains the Nasdaq payload for Press Center News. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NewsTopicResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Topic news response. The data field contains the Nasdaq payload for Topic News. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicInstrumentInfoResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic instrument info response. The data field contains the Nasdaq payload for Nordic Instrument Info. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicInstrumentPriceInfoResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic instrument price info response. The data field contains the Nasdaq payload for Nordic Instrument Price Info. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicInstrumentSummaryResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic instrument summary response. The data field contains the Nasdaq payload for Nordic Instrument Summary. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicInstrumentTradesResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic instrument trades response. The data field contains the Nasdaq payload for Nordic Instrument Trades. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicListingResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic listing response. The data field contains the Nasdaq payload for Nordic Listing. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicMarketMoversResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic market movers response. The data field contains the Nasdaq payload for Nordic Market Movers. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicScreenerResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic screener response. The data field contains the Nasdaq payload for Nordic Screener. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicSearchResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic search response. The data field contains the Nasdaq payload for Nordic Search. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"NordicStarKeyStatsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Nordic Star key stats response. The data field contains the Nasdaq payload for Nordic Star Key Stats. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteBasicResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Batch quotes response. The data field contains the Nasdaq payload for Batch Quotes. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteChartResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Quote chart response. The data field contains the Nasdaq payload for Quote Chart. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteDividendsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Quote dividends response. The data field contains the Nasdaq payload for Quote Dividends. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteEpsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Quote EPS response. The data field contains the Nasdaq payload for Quote EPS. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteExtendedResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Extended trading response. The data field contains the Nasdaq payload for Extended Trading. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteHistoricalResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Historical prices response. The data field contains the Nasdaq payload for Historical Prices. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteIndicesResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Index quotes response. The data field contains the Nasdaq payload for Index Quotes. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteInfoResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Quote info response. The data field contains the Nasdaq payload for Quote Info. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteOptionsResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Options chain response. The data field contains the Nasdaq payload for Options Chain. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteOptionsGreeksResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Options greeks response. The data field contains the Nasdaq payload for Options Greeks. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteOptionsMostActiveResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Most active options response. The data field contains the Nasdaq payload for Most Active Options. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteRealtimeTradesResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Realtime trades response. The data field contains the Nasdaq payload for Realtime Trades. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteShortInterestResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Short interest response. The data field contains the Nasdaq payload for Short Interest. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteSummaryResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Quote summary response. The data field contains the Nasdaq payload for Quote Summary. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"QuoteWatchlistResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Watchlist quotes response. The data field contains the Nasdaq payload for Watchlist Quotes. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"ScreenerResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Screener response. The data field contains the Nasdaq payload for Screener. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."},"SearchResponse":{"allOf":[{"$ref":"#/components/schemas/NfinMarketDataResponse"}],"description":"Symbol search response. The data field contains the Nasdaq payload for Symbol Search. Table-style payloads usually expose data.data.headers and data.data.rows; search payloads commonly expose data.data as an array."}}},"paths":{"/v1/health":{"get":{"tags":["System"],"operationId":"getHealth","summary":"Service health.","description":"Returns basic nfin service status, shipped REST contract count, and auth/rate-limit guidance.","responses":{"200":{"description":"Health response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"name":"nfin","version":"0.1.0","shipped_rest_contracts":107,"identity":{"anonymous":"Works without setup with IP-based limits.","contact":"Send X-Nfin-Contact for higher no-key limits and support metadata.","auth":"Create API keys by requesting an email code at /v1/auth/otp and verifying it at /v1/auth/verify.","key":"Send Authorization: Bearer <api_key> or X-Nfin-Key for higher production limits.","limits":"When key-tier limits are too low, email sam@nfin.dev or POST /v1/auth/limits/requests with an API key."}}}}}}}}}},"/v1/endpoints":{"get":{"tags":["System"],"operationId":"listEndpoints","summary":"Endpoint Catalog","description":"Returns the machine-readable catalog of supported nfin endpoints. Use this for tool discovery, code generation, and agents that need to inspect available routes programmatically.","responses":{"200":{"description":"Endpoint catalog.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointCatalogResponse"},"examples":{"success":{"summary":"Success","value":{"shipped_contract_count":46,"identity_policy":{"anonymous":"Works without setup with IP-based limits.","contact":"Send X-Nfin-Contact for higher no-key limits and support metadata.","auth":"Create API keys by requesting an email code at /v1/auth/otp and verifying it at /v1/auth/verify.","key":"Send Authorization: Bearer <api_key> or X-Nfin-Key for higher production limits.","limits":"When key-tier limits are too low, email sam@nfin.dev or POST /v1/auth/limits/requests with an API key."},"friendly_routes":{"search":{"path":"/v1/search"},"quote_summary":{"path":"/v1/quote/{symbol}/summary"}},"endpoints":[{"name":"search","path":"/v1/search","method":"GET","auth_tier":"open","freshness":{"max_age_seconds":300,"stale_while_revalidate_seconds":3600},"description":"Search Nasdaq symbols, companies, ETFs, funds, and other instruments by text query."}]}}}}}}}}},"/v1/auth/otp":{"post":{"tags":["Auth"],"operationId":"requestAuthOtp","summary":"Request Email Verification Code","description":"Sends a short-lived verification code to an email address. Use this before creating nfin API keys.","requestBody":{"required":true,"description":"Email address to verify.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOtpRequest"},"examples":{"default":{"summary":"Request","value":{"email":"developer@example.com"}}}}}},"responses":{"202":{"description":"Verification code accepted for delivery.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOtpResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"email":"developer@example.com","expires_in_seconds":600,"delivery":"email","message_id":"<message-id@nfin.dev>"}}}}}}},"400":{"description":"Invalid email or JSON body.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"A valid email is required.","value":{"ok":false,"error":{"code":"bad_request","message":"A valid email is required."}}}}}}},"403":{"description":"Email is not eligible for API key access.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"email_not_eligible":{"summary":"This email is not eligible for API key access. Use another email or contact support.","value":{"ok":false,"error":{"code":"email_not_eligible","message":"This email is not eligible for API key access. Use another email or contact support."}}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"503":{"description":"Auth storage or email delivery is unavailable.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"auth_not_configured":{"summary":"API key authentication is not configured.","value":{"ok":false,"error":{"code":"auth_not_configured","message":"API key authentication is not configured."}}},"email_delivery_failed":{"summary":"Could not send verification email. Retry shortly.","value":{"ok":false,"error":{"code":"email_delivery_failed","message":"Could not send verification email. Retry shortly."}}}}}}}}}},"/v1/auth/verify":{"post":{"tags":["Auth"],"operationId":"verifyAuthOtp","summary":"Verify Email Code","description":"Verifies the email code and returns a short-lived management token. By default, it also creates an API key.","requestBody":{"required":true,"description":"Verification code and optional key settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthVerifyRequest"},"examples":{"default":{"summary":"Request","value":{"email":"developer@example.com","code":"123456","label":"agent","expires_in_days":90}}}}}},"responses":{"200":{"description":"Email verified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthVerifyResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"email":"developer@example.com","management_token":"nfin_mgmt_<token>","token_type":"Bearer","management_expires_in_seconds":86400,"api_key":"nfin_live_<id>_<secret>","key":{"id":"key_123","email":"developer@example.com","label":"agent","created_at":1779991200,"expires_at":1787767200,"revoked_at":null,"last_used_at":null,"requests_per_minute":30000,"origin_per_minute":3000}}}}}}}},"400":{"description":"Invalid or expired verification code.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"A valid email and 6-digit code are required.","value":{"ok":false,"error":{"code":"bad_request","message":"A valid email and 6-digit code are required."}}},"invalid_code":{"summary":"Verification code is invalid or expired.","value":{"ok":false,"error":{"code":"invalid_code","message":"Verification code is invalid or expired."}}}}}}},"403":{"description":"Email is not eligible for API key access.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"email_not_eligible":{"summary":"This email is not eligible for API key access. Use another email or contact support.","value":{"ok":false,"error":{"code":"email_not_eligible","message":"This email is not eligible for API key access. Use another email or contact support."}}}}}}},"429":{"description":"Too many verification attempts.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"too_many_attempts":{"summary":"Too many verification attempts. Request a new code.","value":{"ok":false,"error":{"code":"too_many_attempts","message":"Too many verification attempts. Request a new code."}}}}}}},"503":{"description":"Auth storage is unavailable.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"auth_not_configured":{"summary":"API key authentication is not configured.","value":{"ok":false,"error":{"code":"auth_not_configured","message":"API key authentication is not configured."}}}}}}}}}},"/v1/auth/keys":{"get":{"tags":["Auth"],"operationId":"listApiKeys","summary":"List API Keys","description":"Lists API keys for the verified email tied to the management token.","parameters":[{"name":"X-Nfin-Management-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Management token returned by /v1/auth/verify. Authorization: Bearer is also supported."},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key or management token, depending on endpoint."}],"responses":{"200":{"description":"API keys for the verified email.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeysResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"email":"developer@example.com","keys":[{"id":"key_123","email":"developer@example.com","label":"agent","created_at":1779991200,"expires_at":1787767200,"revoked_at":null,"last_used_at":null,"requests_per_minute":30000,"origin_per_minute":3000}]}}}}}}},"401":{"description":"Management token is missing, invalid, or expired.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"unauthorized":{"summary":"Management token is required.","value":{"ok":false,"error":{"code":"unauthorized","message":"Management token is required."}}}}}}},"503":{"description":"Auth storage is unavailable.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"auth_not_configured":{"summary":"API key authentication is not configured.","value":{"ok":false,"error":{"code":"auth_not_configured","message":"API key authentication is not configured."}}}}}}}}},"post":{"tags":["Auth"],"operationId":"createApiKey","summary":"Create API Key","description":"Creates a new API key for the verified email tied to the management token.","parameters":[{"name":"X-Nfin-Management-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Management token returned by /v1/auth/verify. Authorization: Bearer is also supported."},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key or management token, depending on endpoint."}],"requestBody":{"required":false,"description":"Optional key label and expiry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"},"examples":{"default":{"summary":"Request","value":{"label":"production agent","expires_in_days":90}}}}}},"responses":{"201":{"description":"New API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"api_key":"nfin_live_<id>_<secret>","key":{"id":"key_123","email":"developer@example.com","label":"agent","created_at":1779991200,"expires_at":1787767200,"revoked_at":null,"last_used_at":null,"requests_per_minute":30000,"origin_per_minute":3000}}}}}}}},"400":{"description":"Invalid JSON body.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid JSON body.","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid JSON body."}}}}}}},"401":{"description":"Management token is missing, invalid, or expired.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"unauthorized":{"summary":"Management token is required.","value":{"ok":false,"error":{"code":"unauthorized","message":"Management token is required."}}}}}}},"403":{"description":"Email is not eligible for API key access.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"email_not_eligible":{"summary":"This email is not eligible for API key access. Use another email or contact support.","value":{"ok":false,"error":{"code":"email_not_eligible","message":"This email is not eligible for API key access. Use another email or contact support."}}}}}}},"503":{"description":"Auth storage is unavailable.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"auth_not_configured":{"summary":"API key authentication is not configured.","value":{"ok":false,"error":{"code":"auth_not_configured","message":"API key authentication is not configured."}}}}}}}}}},"/v1/auth/keys/{key_id}":{"delete":{"tags":["Auth"],"operationId":"revokeApiKey","summary":"Revoke API Key","description":"Revokes one API key owned by the verified email tied to the management token.","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string"},"description":"API key ID to revoke."},{"name":"X-Nfin-Management-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Management token returned by /v1/auth/verify. Authorization: Bearer is also supported."},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key or management token, depending on endpoint."}],"responses":{"200":{"description":"API key revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRevokeResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"id":"key_123","revoked":true,"revoked_at":1779991200}}}}}}},"401":{"description":"Management token is missing, invalid, or expired.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"unauthorized":{"summary":"Management token is required.","value":{"ok":false,"error":{"code":"unauthorized","message":"Management token is required."}}}}}}},"404":{"description":"API key was not found.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"API key was not found.","value":{"ok":false,"error":{"code":"not_found","message":"API key was not found."}}}}}}},"503":{"description":"Auth storage is unavailable.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"auth_not_configured":{"summary":"API key authentication is not configured.","value":{"ok":false,"error":{"code":"auth_not_configured","message":"API key authentication is not configured."}}}}}}}}}},"/v1/auth/keys/{key_id}/rotate":{"post":{"tags":["Auth"],"operationId":"rotateApiKey","summary":"Rotate API Key","description":"Revokes one API key and creates a replacement key for the same verified email.","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string"},"description":"API key ID to rotate."},{"name":"X-Nfin-Management-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Management token returned by /v1/auth/verify. Authorization: Bearer is also supported."},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key or management token, depending on endpoint."}],"requestBody":{"required":false,"description":"Optional replacement key label and expiry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"},"examples":{"default":{"summary":"Request","value":{"label":"rotated production agent","expires_in_days":90}}}}}},"responses":{"200":{"description":"API key rotated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRotateResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"revoked_key_id":"key_123","api_key":"nfin_live_<new_id>_<secret>","key":{"id":"key_456","email":"developer@example.com","label":"agent","created_at":1779991200,"expires_at":1787767200,"revoked_at":null,"last_used_at":null,"requests_per_minute":30000,"origin_per_minute":3000}}}}}}}},"400":{"description":"Invalid JSON body.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid JSON body.","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid JSON body."}}}}}}},"401":{"description":"Management token is missing, invalid, or expired.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"unauthorized":{"summary":"Management token is required.","value":{"ok":false,"error":{"code":"unauthorized","message":"Management token is required."}}}}}}},"403":{"description":"Email is not eligible for API key access.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"email_not_eligible":{"summary":"This email is not eligible for API key access. Use another email or contact support.","value":{"ok":false,"error":{"code":"email_not_eligible","message":"This email is not eligible for API key access. Use another email or contact support."}}}}}}},"404":{"description":"API key was not found.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"API key was not found.","value":{"ok":false,"error":{"code":"not_found","message":"API key was not found."}}}}}}},"409":{"description":"API key is already revoked.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"key_revoked":{"summary":"API key is already revoked.","value":{"ok":false,"error":{"code":"key_revoked","message":"API key is already revoked."}}}}}}},"503":{"description":"Auth storage is unavailable.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"auth_not_configured":{"summary":"API key authentication is not configured.","value":{"ok":false,"error":{"code":"auth_not_configured","message":"API key authentication is not configured."}}}}}}}}}},"/v1/auth/limits/requests":{"post":{"tags":["Auth"],"operationId":"requestCustomRateLimit","summary":"Request Custom Rate Limits","description":"Submits a custom RPS request for the authenticated API key. This is intended for agents and automated workflows and is limited to 1 request per minute per API key.","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key or management token, depending on endpoint."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"requestBody":{"required":true,"description":"Requested custom rate limits and use case.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLimitRequest"},"examples":{"default":{"summary":"Request","value":{"requested_rps":50,"requested_origin_rps":5,"use_case":"production agent workload","message":"Short description of traffic pattern and data needed."}}}}}},"responses":{"202":{"description":"Custom rate-limit request received.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLimitRequestResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"id":"req_123","email":"developer@example.com","status":"received","notification":{"sent":true},"message":"Custom rate-limit request received. You can also email sam@nfin.dev."}}}}}}},"400":{"description":"Invalid JSON body.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid JSON body.","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid JSON body."}}}}}}},"401":{"description":"API key is missing or inactive.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"api_key_required":{"summary":"API key is required to request custom rate limits.","value":{"ok":false,"error":{"code":"api_key_required","message":"API key is required to request custom rate limits."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"503":{"description":"Auth storage is unavailable.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"auth_not_configured":{"summary":"API key authentication is not configured.","value":{"ok":false,"error":{"code":"auth_not_configured","message":"API key authentication is not configured."}}}}}}}}}},"/v1/calendar/dividends":{"get":{"tags":["Calendars"],"operationId":"getCalendarDividends","summary":"Dividend Calendar","description":"Nasdaq dividend calendar events, including ex-dividend dates, payment dates, indicated annual dividends, and yield-oriented table rows.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Dividend calendar response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarDividendsResponse"},"examples":{"success":{"summary":"Calendar Dividends success","value":{"data":{"data":{"calendar":{"asOf":"Thu, May 28, 2026","headers":{"announcement_Date":"Announcement Date","companyName":"Name","dividend_Ex_Date":"Ex-Dividend Date","dividend_Rate":"Dividend","indicated_Annual_Dividend":"Historical Annual Dividend","payment_Date":"Payment Date","record_Date":"Record Date","symbol":"Symbol"},"rows":[{"announcement_Date":"5/27/2026","companyName":"Altrius Global Dividend ETF","dividend_Ex_Date":"5/28/2026","dividend_Rate":0.1964154,"indicated_Annual_Dividend":2.356985,"payment_Date":"5/29/2026","record_Date":"5/28/2026","symbol":"DIVD"},{"announcement_Date":"5/27/2026","companyName":"Amplify Cash Flow Dividend Leaders ETF","dividend_Ex_Date":"5/28/2026","dividend_Rate":0.0604638,"indicated_Annual_Dividend":0.725566,"payment_Date":"5/29/2026","record_Date":"5/28/2026","symbol":"COWS"},{"announcement_Date":"5/27/2026","companyName":"Amplify COWS Covered Call ETF","dividend_Ex_Date":"5/28/2026","dividend_Rate":0.2407,"indicated_Annual_Dividend":2.8884,"payment_Date":"5/29/2026","record_Date":"5/28/2026","symbol":"HCOW"}]},"timeframe":{"maxDate":"2104-06-02T00:00:00","minDate":"1988-10-03T00:00:00"}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:13.803Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:13.803Z","provider":"nasdaq","route":"calendar_dividends","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_dividends"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_dividends"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/calendar/earnings":{"get":{"tags":["Calendars"],"operationId":"getCalendarEarnings","summary":"Earnings Calendar","description":"Nasdaq earnings calendar events, including report timing, company name, market cap, fiscal quarter, consensus EPS forecast, and prior-year EPS fields.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Earnings calendar response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarEarningsResponse"},"examples":{"success":{"summary":"Calendar Earnings success","value":{"data":{"data":{"asOf":"Thu, May 28, 2026","headers":{"epsForecast":"Consensus EPS* Forecast","fiscalQuarterEnding":"Fiscal Quarter Ending","lastYearEPS":"Last year's EPS*","lastYearRptDt":"Last Year's Report Date","marketCap":"Market Cap","name":"Company Name","noOfEsts":"# of Ests","symbol":"Symbol","time":"Time"},"rows":[{"epsForecast":"$4.91","fiscalQuarterEnding":"May/2026","lastYearEPS":"$4.28","lastYearRptDt":"5/29/2025","marketCap":"$445,289,617,873","name":"Costco Wholesale Corporation","noOfEsts":"13","symbol":"COST","time":"time-after-hours"},{"epsForecast":"$2.81","fiscalQuarterEnding":"Apr/2026","lastYearEPS":"$2.20","lastYearRptDt":"5/29/2025","marketCap":"$264,834,177,578","name":"Royal Bank Of Canada","noOfEsts":"4","symbol":"RY","time":"time-pre-market"},{"epsForecast":"$2.79","fiscalQuarterEnding":"Apr/2026","lastYearEPS":"$1.41","lastYearRptDt":"5/29/2025","marketCap":"$198,326,189,387","name":"Dell Technologies Inc.","noOfEsts":"5","symbol":"DELL","time":"time-after-hours"}]},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:14.298Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:14.298Z","provider":"nasdaq","route":"calendar_earnings","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_earnings"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_earnings"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/calendar/splits":{"get":{"tags":["Calendars"],"operationId":"getCalendarSplits","summary":"Split Calendar","description":"Nasdaq split calendar events with symbol, company name, split ratio, execution date, and related split metadata when Nasdaq publishes it.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Split calendar response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarSplitsResponse"},"examples":{"success":{"summary":"Calendar Splits success","value":{"data":{"data":{"asOf":"Thu, May 28, 2026","headers":{"executionDate":"EFFECTIVE DATE","name":"COMPANY","ratio":"RATIO","symbol":"SYMBOL"},"rows":[{"executionDate":"6/18/2026","name":"Chino Commercial Bancorp","ratio":"6 : 5","symbol":"CCBC"},{"executionDate":"6/17/2026","name":"Worldline ADR","ratio":"1 : 40","symbol":"WRDLY"},{"executionDate":"6/12/2026","name":"KLA Corporation ","ratio":"10:1","symbol":"KLAC"}]},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:14.782Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:14.782Z","provider":"nasdaq","route":"calendar_splits","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_splits"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_splits"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/calendar/upcoming":{"get":{"tags":["Calendars"],"operationId":"getCalendarUpcoming","summary":"Upcoming Calendar Events","description":"Upcoming Nasdaq calendar events across supported event types.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Upcoming calendar response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarUpcomingResponse"},"examples":{"success":{"summary":"Calendar Upcoming success","value":{"data":{"data":[{"eventCount":31,"name":"Stock Splits","splitsList":[{"companyName":"ProShares Ultra Bloomberg Natural Gas","executionDate":"5/28/2026"},{"companyName":"ProShares UltraShort MSCI Brazil Capped","executionDate":"5/28/2026"},{"companyName":"ProShares UltraShort Nasdaq Biotechnology","executionDate":"5/28/2026"}]},{"earningsList":[{"companyName":"Costco Wholesale Corporation","date":"5/28/2026"},{"companyName":"Royal Bank Of Canada","date":"5/28/2026"},{"companyName":"Dell Technologies Inc.","date":"5/28/2026"}],"eventCount":115,"name":"Earnings"},{"dividendsList":[{"companyName":"Altrius Global Dividend ETF","exDivDate":"5/28/2026"},{"companyName":"Amplify Cash Flow Dividend Leaders ETF","exDivDate":"5/28/2026"},{"companyName":"Amplify COWS Covered Call ETF","exDivDate":"5/28/2026"}],"eventCount":127,"name":"Dividends"}],"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:15.154Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:15.154Z","provider":"nasdaq","route":"calendar_upcoming","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_upcoming"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_upcoming"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/calendar/upcoming-recent":{"get":{"tags":["Calendars"],"operationId":"getCalendarUpcomingRecent","summary":"Upcoming And Recent Calendar Events","description":"Upcoming and recent Nasdaq event rows for workflows that need nearby corporate actions and event history.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Upcoming and recent calendar response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarUpcomingRecentResponse"},"examples":{"success":{"summary":"Calendar Upcoming Recent success","value":{"data":{"data":{"recentEvents":{"events":[{"eventDate":"05/11/2026","eventName":"Ex-Dividend Date","url":"/market-activity/stocks/AAPL/dividend-history"},{"eventDate":"05/01/2026","eventName":"SEC Filing: 10-Q","url":"https://app.quotemedia.com/data/downloadFiling?webmasterId=90423&ref=320004561&type=HTML&symbol=AAPL&cdn=58e9a71c5abba33bf1ec8ae7dcc5950e&companyName=Apple+Inc.&formType=10-Q&formDescription=General+form+for+quarterly+reports+under+Section+13+or+15%28d%29&dateFiled=2026-05-01"},{"eventDate":"04/30/2026","eventName":"Earnings Date","url":"/market-activity/stocks/AAPL/earnings"}],"title":"Recent Events"},"upcomingEvents":null},"message":null,"status":{"bCodeMessage":[{"code":1002,"errorMessage":"Upcoming Recent Splits Calendar: No record found."}],"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:15.631Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:15.631Z","provider":"nasdaq","route":"calendar_upcoming_recent","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_upcoming_recent"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"calendar_upcoming_recent"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/company/ownership":{"get":{"tags":["Company Data"],"operationId":"getCompanyOwnership","summary":"Company Ownership","description":"Institutional and insider ownership search data for a company or symbol when Nasdaq publishes ownership rows.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Company ownership response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyOwnershipResponse"},"examples":{"success":{"summary":"Company Ownership success","value":{"data":{"data":{"table":{"asOf":null,"headers":{"company":"Company","form":"Form","insiderName":"Insider","lastDate":"Last Date","lastPrice":"Price","ownershipType":"Ownership Type","sharesHeld":"Shares Held","sharesTraded":"Shares Traded","transactionType":"Transaction"},"rows":[{"company":"BKNG","companyURL":"/market-activity/stocks/bkng/insider-activity","form":"http://secfilings.nasdaq.com/filingFrameset.asp?FilingID=19484528&RcvdDate=05/26/2026&CoName=BOOKING%20HOLDINGS%20INC.&FormType=4&View=html","insiderName":"MILLONES PETER J","insiderURL":"/market-activity/insiders/millones-peter-j-620529","lastDate":"05/26/2026","lastPrice":"$162.9596 - $165.5644","ownershipType":"direct","sharesHeld":"425,075","sharesTraded":"62,500","transactionType":"Automatic Sell"},{"company":"GSHD","companyURL":"/market-activity/stocks/gshd/insider-activity","form":"http://secfilings.nasdaq.com/filingFrameset.asp?FilingID=19480721&RcvdDate=05/26/2026&CoName=GOOSEHEAD%20INSURANCE,%20INC.&FormType=4&View=html","insiderName":"MARK & ROBYN JONES DESCENDANTS TRUST 2014","insiderURL":"/market-activity/insiders/mark--robyn-jones-descendants-trust-2014-1053347","lastDate":"05/26/2026","lastPrice":"$40.07","ownershipType":"direct","sharesHeld":"0","sharesTraded":"45,588","transactionType":"Sell"},{"company":"RMBS","companyURL":"/market-activity/stocks/rmbs/insider-activity","form":"http://secfilings.nasdaq.com/filingFrameset.asp?FilingID=19480419&RcvdDate=05/26/2026&CoName=RAMBUS%20INC&FormType=4&View=html","insiderName":"FAN XIANZHI SEAN","insiderURL":"/market-activity/insiders/fan-xianzhi-sean-913224","lastDate":"05/26/2026","lastPrice":"$151.6896 - $152.35","ownershipType":"direct","sharesHeld":"168,358","sharesTraded":"37,914","transactionType":"Sell"}]},"title":"Recent Insider Activity Over $1 Million"},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:22.197Z","max_age_seconds":600,"stale":false},"generated_at":"2026-05-28T20:59:22.197Z","provider":"nasdaq","route":"company_ownership","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"company_ownership"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"company_ownership"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/funds/{symbol}/section":{"get":{"tags":["Funds"],"operationId":"getFundSection","summary":"Fund Section","description":"Nasdaq fund section data for one symbol. Use the section query parameter to request portfolio, holdings, performance, risk, or other supported fund sections.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"section","in":"query","required":false,"schema":{"type":"string"},"description":"Fund section to request when supported by the upstream Nasdaq route."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Fund section response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundSectionResponse"},"examples":{"success":{"summary":"Fund Section success","value":{"data":{"data":{},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:22.594Z","max_age_seconds":3600,"stale":false},"generated_at":"2026-05-28T20:59:22.594Z","provider":"nasdaq","route":"fund_section","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"fund_section"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"fund_section"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/ipo/calendar":{"get":{"tags":["IPOs"],"operationId":"getIpoCalendar","summary":"IPO Calendar","description":"Nasdaq IPO calendar data, including upcoming, priced, withdrawn, and filed IPO tables when available.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"IPO calendar response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpoCalendarResponse"},"examples":{"success":{"summary":"IPO Calendar success","value":{"data":{"data":{"filed":{"asOf":null,"headers":{"companyName":"Company Name","dollarValueOfSharesOffered":"Offer Amount","filedDate":"Date Filed","proposedTickerSymbol":"Symbol"},"rows":[{"companyName":"Powercheck AI Holdings Ltd","dealID":"1387765-118185","dollarValueOfSharesOffered":"$18,750,000","filedDate":"5/27/2026","proposedTickerSymbol":"PCAI"},{"companyName":"VARSAL TECH, INC.","dealID":"1387600-118178","dollarValueOfSharesOffered":"$20,000,000","filedDate":"5/26/2026","proposedTickerSymbol":"VAT"},{"companyName":"Crestone Strategic Capital Acquisition Corp","dealID":"1387564-118176","dollarValueOfSharesOffered":"$86,250,000","filedDate":"5/26/2026","proposedTickerSymbol":"CSCM"}]},"month":5,"priced":{"asOf":null,"headers":{"companyName":"Company Name","dealStatus":"Actions","dollarValueOfSharesOffered":"Offer Amount","pricedDate":"Date","proposedExchange":"Exchange/ Market","proposedSharePrice":"Price","proposedTickerSymbol":"Symbol","sharesOffered":"Shares"},"rows":[{"companyName":"DISCIPLINED GROWTH ACQUISITION Corp","dealID":"1381970-117681","dealStatus":"Priced","dollarValueOfSharesOffered":"$150,000,000","pricedDate":"5/27/2026","proposedExchange":"NYSE","proposedSharePrice":"10.00","proposedTickerSymbol":"DGACU","sharesOffered":"15,000,000"},{"companyName":"Peace Acquisition Corp.","dealID":"1351956-115625","dealStatus":"Priced","dollarValueOfSharesOffered":"$60,000,000","pricedDate":"5/22/2026","proposedExchange":"NASDAQ Capital","proposedSharePrice":"10.00","proposedTickerSymbol":"PECEU","sharesOffered":"6,000,000"},{"companyName":"FortuneX Acquisition Corp","dealID":"1381567-117663","dealStatus":"Priced","dollarValueOfSharesOffered":"$75,000,000","pricedDate":"5/22/2026","proposedExchange":"NASDAQ Global","proposedSharePrice":"10.00","proposedTickerSymbol":"FXACU","sharesOffered":"7,500,000"}]},"totalResults":6,"upcoming":{"lastUpdatedTime":"LAST UPDATED: 05/28/2026* - Source: EDGAR® Online","upcomingTable":{"asOf":null,"headers":{"companyName":"Company Name","dollarValueOfSharesOffered":"Offer Amount","expectedPriceDate":"Expected IPO Date","proposedExchange":"Exchange/ Market","proposedSharePrice":"Price","proposedTickerSymbol":"Symbol","sharesOffered":"Shares"},"rows":[{"companyName":"Innovative Digital Investors Acquisition Corp.","dealID":"1278782-114155","dollarValueOfSharesOffered":"$230,000,000","expectedPriceDate":"5/29/2026","proposedExchange":"NASDAQ Global","proposedSharePrice":"10.00","proposedTickerSymbol":"IDIAU","sharesOffered":"20,000,000"},{"companyName":"DEEP FISSION, INC.","dealID":"1207270-118102","dollarValueOfSharesOffered":"$179,400,000","expectedPriceDate":"5/29/2026","proposedExchange":"NASDAQ Global","proposedSharePrice":"24.00-26.00","proposedTickerSymbol":"FISN","sharesOffered":"6,000,000"}]}},"withdrawn":{"asOf":null,"headers":{"companyName":"Company Name","dollarValueOfSharesOffered":"Offer Amount","filedDate":"Date Filed","proposedExchange":"Exchange/ Market","proposedTickerSymbol":"Symbol","sharesOffered":"Shares","withdrawDate":"Date Withdrawn"},"rows":[{"companyName":"VISTEK LTD","dealID":"1322838-112768","dollarValueOfSharesOffered":"$13,500,000","filedDate":"1/28/2025","proposedExchange":null,"proposedTickerSymbol":null,"sharesOffered":"2,250,000","withdrawDate":"5/20/2026"},{"companyName":"VISTEK LTD","dealID":"1322838-117305","dollarValueOfSharesOffered":"$40,875,000","filedDate":"3/10/2026","proposedExchange":null,"proposedTickerSymbol":null,"sharesOffered":"6,250,000","withdrawDate":"5/20/2026"},{"companyName":"Kepler Group Ltd","dealID":"1347735-115196","dollarValueOfSharesOffered":"$9,660,000","filedDate":"9/03/2025","proposedExchange":null,"proposedTickerSymbol":null,"sharesOffered":"1,400,000","withdrawDate":"5/19/2026"}]},"year":2026},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:22.944Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:22.944Z","provider":"nasdaq","route":"ipo_calendar","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"ipo_calendar"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"ipo_calendar"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/ipo/experts":{"get":{"tags":["IPOs"],"operationId":"getIpoExperts","summary":"IPO Experts","description":"Nasdaq IPO expert and analyst-oriented data for IPO workflows.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"IPO experts response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpoExpertsResponse"},"examples":{"success":{"summary":"IPO Experts success","value":{"data":{"data":{"companyInformation":{"companyDescription":null,"companyName":"SUJA LIFE, INC.","symbol":"SUJA"},"dealID":"1380867-117624","tableModel":{"asOf":null,"headers":null,"rows":[{"expertName":"Deloitte & Touche LLP","role":"Auditor"},{"expertName":"Kirkland & Ellis LLP","role":"CompanyCounsel"},{"expertName":"Goldman Sachs & Co. LLC","role":"LeadUnderwriter"}]}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:23.281Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:23.281Z","provider":"nasdaq","route":"ipo_experts","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"ipo_experts"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"ipo_experts"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/ipo/financials-filings":{"get":{"tags":["IPOs"],"operationId":"getIpoFilings","summary":"IPO Financials And Filings","description":"Nasdaq IPO financials and filings tables, including filing status and document-oriented fields when available.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"IPO financials and filings response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpoFilingsResponse"},"examples":{"success":{"summary":"IPO Filings success","value":{"data":{"data":{"companyInformation":{"companyDescription":null,"companyName":"SUJA LIFE, INC.","symbol":"SUJA"},"dealID":"1380867-117624","filings":[{"CompanyName":{"label":"Company Name","value":"SUJA LIFE, INC."},"DateReceived":{"label":"Date Received","value":"04/10/2026"},"FilingLink":{"label":"View","value":"http://secfilings.nasdaq.com/filingFrameset.asp?FilingID=19334651&View=html"},"FormType":{"label":"Form Type","value":"S-1"}},{"CompanyName":{"label":"Company Name","value":"SUJA LIFE, INC."},"DateReceived":{"label":"Date Received","value":"04/27/2026"},"FilingLink":{"label":"View","value":"http://secfilings.nasdaq.com/filingFrameset.asp?FilingID=19370591&View=html"},"FormType":{"label":"Form Type","value":"S-1/A"}},{"CompanyName":{"label":"Company Name","value":"SUJA LIFE, INC."},"DateReceived":{"label":"Date Received","value":"04/30/2026"},"FilingLink":{"label":"View","value":"http://secfilings.nasdaq.com/filingFrameset.asp?FilingID=19390664&View=html"},"FormType":{"label":"Form Type","value":"S-1/A"}}],"financials":[{"NetIncome":{"label":"Net Income","value":"-$23,337,000.00"},"Revenue":{"label":"Revenue","value":"$326,624,000.00"},"StockholdersEquity":{"label":"Stockholders' Equity","value":"$32,570,000.00"},"TotalAssets":{"label":"Total Assets","value":"$428,113,000.00"},"TotalLiabilities":{"label":"Total Liabilities","value":"$395,543,000.00"}}]},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:23.654Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:23.654Z","provider":"nasdaq","route":"ipo_financials_filings","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"ipo_filings"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"ipo_filings"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/ipo/overview":{"get":{"tags":["IPOs"],"operationId":"getIpoOverview","summary":"IPO Overview","description":"Nasdaq IPO overview data for current and recent IPO activity.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"IPO overview response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpoOverviewResponse"},"examples":{"success":{"summary":"IPO Overview success","value":{"data":{"data":{"companyInformation":{"companyDescription":"Changing What Beverages Bring to the Table\n\nSuja Life is a modern beverage platform at the forefront of one of the most\npowerful consumer transformations of our time: the shift toward functional,\nbetter-for-you beverages. We operate at the intersection of health, taste, and\ntrust, offering cold-pressed juices, wellness shots, and functional sodas that\nhave become an essential part of consumers’ everyday routines.\n\nWe began with a simple purpose: to change what beverages bring to the table.\nFueled by the lack of genuinely nutritious options on the market, our founders\nbegan crafting juices using high-quality organic ingredients and cold-pressing\ntechniques to preserve nutrients and flavor. What started as a passion for\ncreating something better, quickly evolved into a movement that reshaped an\nentire category. Over a decade ago, we played a key role in shaping the\ncold-pressed juice category, transforming what was once a niche offering into a\nmainstream better-for-you beverage category. Today, we serve the rapidly growing\nNHB market which is outpacing growth of the broader beverage market by 10%\naccording to SPINS, 52 Weeks. We are rapidly scaling within this market: our\ncore brands — Suja Organic and Vive Organic — grew 26% in total dollars, 4% in\nTDPs, and 22% in velocity according to SPINS, 52 Weeks. We are well-positioned\nto continue capturing market share as consumers increasingly prioritize\nhealth-forward beverage choices.\n\nOur three brands — Suja Organic, Vive Organic, and Slice — address distinct\nconsumer needs across the health and wellness spectrum. Together, they form a\ncomplementary portfolio that reaches consumers across multiple beverage\noccasions and fits naturally into their daily routines: from a cold-pressed\njuice to start the day, to the wellness shot that supports daily immunity, to\nthe functional soda that satisfies without compromise. Each brand reflects our\ncore philosophy of delivering premium, nutritional products with transparency,\nintegrity, and great taste.\n\nBehind our brands is a high-performing platform built for speed, scale, and\nprofitability. We believe we own and operate one of the largest vertically\nintegrated cold-pressed beverage facilities in North America, spanning\napproximately 270,000 square feet across our multi-building campus. This\nprovides meaningful cost and quality advantages while enabling the rapid scaling\nof our brands and innovation initiatives. Based on NIQ Scantrack, 52 Weeks data,\nour products are available in more than 37,000 stores. As part of our broader\ncommitment to responsible growth, we emphasize environmental sustainability,\nthrough responsible sourcing as well as recyclable and lower-plastic packaging.\n\nOur pioneering mentality has propelled us into a leadership position in both\ncold-pressed juice and wellness shots based on retail sales according to SPINS,\n52 Weeks. We deliver significant topline growth and strong margins while\ncontinuing to reinvest in marketing, innovation, and infrastructure to drive\nsustainable growth. We are well-positioned to define the next generation of\niconic, better-for-you beverage brands as health, functionality, and\nsustainability continue to shape consumer preferences.\n---\n\nWe were incorporated in Delaware on October 8, 2025. Our principal executive\noffices are located at 3831 Ocean Ranch Boulevard, Oceanside, California 92056.\nOur telephone number is (855) 879-7852. Our website address is www.sujalife.com.","companyName":"SUJA LIFE, INC.","symbol":"SUJA"},"poOverview":{"Address":{"label":"Company Address","value":"3831 OCEAN RANCH BLVD.   OCEANSIDE CA 92056"},"CEO":{"label":"CEO","value":"Maria Stipp"},"CompanyName":{"label":"Company Name","value":"SUJA LIFE, INC."},"CompanyWebsite":{"label":"Company Website","value":"<a href='http://www.sujalife.com' target='_blank'>www.sujalife.com</a>"},"DealId":{"label":"DealId","value":"1380867-117624"},"DealStatus":{"label":"Status","value":"Priced"},"DollarValueOfSharesOffered":{"label":"Offer amount","value":"$186,666,669"},"Exchange":{"label":"Exchange","value":"NASDAQ Global Select"},"FiscalYearEnd":{"label":"Fiscal Year End","value":"12/27"},"LockupPeriodExpirationDate":{"label":"Lockup Expiration","value":"11/03/2026"},"LockupPeriodNumberofDays":{"label":"Lockup Period (days)","value":"180"},"NumberOfEmployees":{"label":"Employees","value":"590 (as of 12/29/2025)"},"PhoneNumber":{"label":"Company Phone","value":"(855) 879-7852"},"ProposedSharePrice":{"label":"Share Price","value":"$21.00"},"QuietPeriodExpirationDate":{"label":"Quiet Period Expiration","value":"06/16/2026"},"SECCIK":{"label":"CIK","value":"0001934114"},"ShareholderSharesOffered":{"label":"Shareholder Shares Offered","value":"--"},"SharesOffered":{"label":"Shares Offered","value":8888889},"SharesOutstanding":{"label":"Shares Outstanding","value":"23,788,700"},"SharesOverAllotment":{"label":"Shares Over Alloted","value":"--"},"StateOfIncorp":{"label":"State of Inc","value":"--"},"Symbol":{"label":"Proposed Symbol","value":"SUJA"},"TotalExpenseOfTheOffering":{"label":"Total Offering Expense","value":"$7,500,000.00"}}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:24.027Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:24.027Z","provider":"nasdaq","route":"ipo_overview","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"ipo_overview"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"ipo_overview"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/isee":{"get":{"tags":["ISEE"],"operationId":"getIsee","summary":"ISEE Index","description":"Nasdaq ISEE index data for equity and ETF option sentiment workflows.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"ISEE index response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IseeResponse"},"examples":{"success":{"summary":"ISEE success","value":{"data":{"data":{"ctaLinks":[{"Label":"What is an ISEE Sentiment Indicator?","Value":"https://www.investopedia.com/terms/i/iseesentiment.asp"},{"Label":"How to Use Options as Sentiment Indicators","Value":"https://www.schaeffersresearch.com/content/education/2015/09/17/how-to-use-options-as-sentiment-indicators"}],"description":"<p>Investors often buy call and put options to express their actual market view of a particular stock, and because of that, opening such long transactions are thought to best represent market sentiment. Market maker and firm trades, which are excluded, are not considered representative of true market sentiment due to their specialized nature. As such, the ISEE calculation method allows for a more accurate measure of true investor sentiment than traditional put/call ratios.</p><p>Because of this distinctive calculation methodology, ISEE has been referenced by The Wall Street Journal, Barron’s and other leading publications as a useful investment tool. Investors and investment professionals can use this unique put/call value to determine how other investors view stock prices, as well as to supplement and validate their own market views.</p>","disclaimer":"Please note that the percentage change shown in this chart is based on the current ISEE value vs last updated value.","isSuccess":false,"iseeIndexInfo":{"indexChangeInfos":[{"changePercentage":"UNCH","changeValue":"","indexCategory":"All Securities","indicator":"","lastValue":"166"},{"changePercentage":"UNCH","changeValue":"","indexCategory":"All Equities Only","indicator":"","lastValue":"282"},{"changePercentage":"UNCH","changeValue":"","indexCategory":"All Indexes & ETFs Only","indicator":"","lastValue":"90"}],"lastUpdatedText":"Last updated at 16:15, May 28, 2026 - Data updates every 20 minutes"},"iseeIndexTableData":{"indexHeaders":{"category1":"All Securities","category2":"All Equities Only","category3":"All Indexes & ETFs Only"},"tableData":{"asOf":null,"headers":{"category1_ISE_Index":"ISEE","category1_Total":"TOTAL","category1_Total_Calls":"CALLS","category1_Total_Puts":"PUTS","category2_ISE_Index":"ISEE","category2_Total":"TOTAL","category2_Total_Calls":"CALLS","category2_Total_Puts":"PUTS","category3_ISE_Index":"ISEE","category3_Total":"TOTAL","category3_Total_Calls":"CALLS","category3_Total_Puts":"PUTS","time_of_Day":"TIME"},"rows":[{"category1_ISE_Index":"166","category1_Total":"1,383,537","category1_Total_Calls":"862,864","category1_Total_Puts":"520,673","category2_ISE_Index":"282","category2_Total":"803,551","category2_Total_Calls":"593,141","category2_Total_Puts":"210,410","category3_ISE_Index":"90","category3_Total":"23,359","category3_Total_Calls":"11,036","category3_Total_Puts":"12,323","time_of_Day":"16:15"},{"category1_ISE_Index":"166","category1_Total":"1,381,114","category1_Total_Calls":"862,067","category1_Total_Puts":"519,047","category2_ISE_Index":"282","category2_Total":"803,551","category2_Total_Calls":"593,141","category2_Total_Puts":"210,410","category3_ISE_Index":"90","category3_Total":"23,274","category3_Total_Calls":"10,994","category3_Total_Puts":"12,280","time_of_Day":"16:10"},{"category1_ISE_Index":"168","category1_Total":"1,324,733","category1_Total_Calls":"830,576","category1_Total_Puts":"494,157","category2_ISE_Index":"282","category2_Total":"772,327","category2_Total_Calls":"570,096","category2_Total_Puts":"202,231","category3_ISE_Index":"89","category3_Total":"21,985","category3_Total_Calls":"10,382","category3_Total_Puts":"11,603","time_of_Day":"15:50"}]}},"message":null,"sentimentDataHeader":"Sentiment Data for 5/28/2026 Call/Put Volume"},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:24.369Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:24.369Z","provider":"nasdaq","route":"isee","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"isee"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"isee"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/isee/chart":{"get":{"tags":["ISEE"],"operationId":"getIseeChart","summary":"ISEE Chart","description":"Chart-ready ISEE index series for equity and ETF option sentiment analysis.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"ISEE chart response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IseeChartResponse"},"examples":{"success":{"summary":"ISEE Chart success","value":{"data":{"data":{"chartCategories":[{"name":"All Securities","value":"1"},{"name":"All Equities Only","value":"2"},{"name":"All Indexes & ETFs Only","value":"3"}],"iseeIndexChartData":[{"charts":[{"x":1762128000000,"y":147,"z":{"name":"ISEE VALUE","netChange":"0","percentageChange":"0%","value":147}},{"x":1762214400000,"y":135,"z":{"name":"ISEE VALUE","netChange":"-12","percentageChange":"8.89%","value":135}},{"x":1762300800000,"y":136,"z":{"name":"ISEE VALUE","netChange":"+1","percentageChange":"0.74%","value":136}}],"label":"ISEE Value"},{"charts":[{"x":1762128000000,"y":157,"z":{"name":"10D MA","netChange":"0","percentageChange":"0%","value":157}},{"x":1762214400000,"y":154,"z":{"name":"10D MA","netChange":"-3","percentageChange":"1.95%","value":154}},{"x":1762300800000,"y":152,"z":{"name":"10D MA","netChange":"-2","percentageChange":"1.32%","value":152}}],"label":"10D MA"},{"charts":[{"x":1762128000000,"y":163,"z":{"name":"20D MA","netChange":"0","percentageChange":"0%","value":163}},{"x":1762214400000,"y":161,"z":{"name":"20D MA","netChange":"-2","percentageChange":"1.24%","value":161}},{"x":1762300800000,"y":158,"z":{"name":"20D MA","netChange":"-3","percentageChange":"1.9%","value":158}}],"label":"20D MA"}]},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:24.775Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:24.775Z","provider":"nasdaq","route":"isee_chart","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"isee_chart"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"isee_chart"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/isee/download":{"get":{"tags":["ISEE"],"operationId":"getIseeDownload","summary":"ISEE Download","description":"Download-style ISEE index data returned through the nfin JSON envelope.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"ISEE download response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IseeDownloadResponse"},"examples":{"success":{"summary":"ISEE Download success","value":{"data":{"data":{"iseeDownloadTable":{"asOf":null,"headers":{"allETFs":"ALL ETFS","allEquities":"ALL EQUITIES","allSecurities":"ALL SECURITIES","avg10_1":"10 AVG","avg10_2":"10 AVG","avg10_3":"10 AVG","avg20_1":"20 AVG","avg20_2":"20 AVG","avg20_3":"20 AVG","avg50_1":"50 AVG","avg50_2":"50 AVG","avg50_3":"50 AVG","date":"DATE"},"rows":[{"allETFs":49,"allEquities":212,"allSecurities":149,"avg10_1":0,"avg10_2":212,"avg10_3":49,"avg20_1":0,"avg20_2":212,"avg20_3":49,"avg50_1":0,"avg50_2":212,"avg50_3":49,"date":"1/3/2006"},{"allETFs":74,"allEquities":218,"allSecurities":180,"avg10_1":0,"avg10_2":215,"avg10_3":62,"avg20_1":0,"avg20_2":215,"avg20_3":62,"avg50_1":0,"avg50_2":215,"avg50_3":62,"date":"1/4/2006"},{"allETFs":38,"allEquities":264,"allSecurities":195,"avg10_1":0,"avg10_2":231,"avg10_3":54,"avg20_1":0,"avg20_2":231,"avg20_3":54,"avg50_1":0,"avg50_2":231,"avg50_3":54,"date":"1/5/2006"}]}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:25.942Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:25.942Z","provider":"nasdaq","route":"isee_download","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"isee_download"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"isee_download"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/markets/lists/{list_id}":{"get":{"tags":["Markets"],"operationId":"getListType","summary":"Market List","description":"Nasdaq market list rows for a list identifier such as most-active, gainers, losers, or other supported list IDs.","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string"},"description":"Nasdaq list identifier."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Market list response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListTypeResponse"},"examples":{"success":{"summary":"List Type success","value":{"data":{"data":{"data":{"asOf":null,"headers":{"companyName":"Name","lastSalePrice":"Last Sale","marketCap":"Market Cap","netChange":"Net Change","percentageChange":"Percentage Change","symbol":"Symbol"},"rows":[{"companyName":"AGNC Investment Corp. Common Stock","deltaIndicator":"up","lastSalePrice":"$10.57","marketCap":"12,110,653,820","netChange":"$0.02","percentageChange":"+0.19%","sector":"","symbol":"AGNC"},{"companyName":"Arch Capital Group Ltd. Common Stock","deltaIndicator":"up","lastSalePrice":"$91.80","marketCap":"31,679,153,944","netChange":"$1.13","percentageChange":"+1.25%","sector":"","symbol":"ACGL"},{"companyName":"BancFirst Corporation Common Stock","deltaIndicator":"unch","lastSalePrice":"$110.48","marketCap":"3,721,371,680","netChange":"UNCH","percentageChange":"UNCH","sector":"","symbol":"BANF"}]},"date":"May 28, 2026","filters":null,"limit":100,"offset":0,"title":null,"totalrecords":100},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T21:00:22.162Z","max_age_seconds":120,"stale":false},"generated_at":"2026-05-28T21:00:22.162Z","provider":"nasdaq","route":"list_type","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"list_type"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"list_type"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/markets/extended-lists/{list_id}":{"get":{"tags":["Markets"],"operationId":"getListTypeExtended","summary":"Extended Market List","description":"Extended Nasdaq list data for supported list identifiers with richer table fields when available.","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string"},"description":"Nasdaq list identifier."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Extended market list response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListTypeExtendedResponse"},"examples":{"success":{"summary":"List Type Extended success","value":{"data":{"data":{"dollarvolume":{"date":"Data As Of: 05/28/2026 04:15:00 PM","header":"NASDAQ Most Active by Dollar Volume","tblDlrVol":{"asOf":null,"headers":{"dollarVolume":"Dollar Volume","issueSymbol":"Symbol","lastSaleChange":"Change","lastSalePrice":"Price","name":"Company Name"},"rows":[{"dollarVolume":"$45,178,829,280","issueSymbol":"MU","lastSaleChange":"-4.89","lastSalePrice":"$923.52","name":"Micron Technology, Inc."},{"dollarVolume":"$29,788,131,984","issueSymbol":"NVDA","lastSaleChange":"1.65","lastSalePrice":"$214.25","name":"NVIDIA Corporation"},{"dollarVolume":"$23,788,020,378","issueSymbol":"QQQ","lastSaleChange":"6.15","lastSalePrice":"$735.60","name":"Invesco QQQ Trust, Series 1"}]}},"globalMarketSummary":{"VolumeTotal":{"label":"Total Share Volume","value":"7,641,787,333"},"date":"Data As Of: 05/28/2026 04:58:57 PM","gmsdetails":{"NewHigh":{"label":"New Highs","value":"397"},"NewLow":{"label":"New Lows","value":"108"},"SecuritiesAdvanced":{"label":"Advances","value":"3,255"},"SecuritiesDeclined":{"label":"Declines","value":"1,823"},"SecuritiesUnchanged":{"label":"Unchanged","value":"400"},"totaltrades":{"label":"Total","value":"5,478"}},"header":"NASDAQ Global Market Summary"},"indexValues":{"date":"Data As Of: 05/28/2026 04:58:57 PM","header":"Index Values","indxtbl":{"asOf":null,"headers":{"change":"Change","displayname":"Index Name","high":"High","low":"Low","value":"Index Value"},"rows":[{"change":"117.56","displayname":"NASDAQ Global Select Composite","high":"13,212.01","low":"13,044.31","symbol":"NQGS","value":"13,203.97"},{"change":"22.89","displayname":"NASDAQ Global Market Composite","high":"2,375.68","low":"2,331.57","symbol":"NQGM","value":"2,366.62"},{"change":"3.20","displayname":"NASDAQ Capital Market Composite","high":"154.50","low":"150.40","symbol":"RCMP","value":"153.98"}]}},"nasdaqBlockTrades":{"Blocktrade_date":"2026-05-27T00:00:00","blocktrade":{"label":"Nasdaq Total","value":"55,884"},"date":"Data As Of: 05/27/2026 5:15 PM","header":"Number of Block Trades"},"sharevolume":{"date":"Data As Of: 05/28/2026 03:46:33 PM","header":"NASDAQ Most Active by Share Volume","tblShrVol":{"asOf":null,"headers":{"issueSymbol":"Symbol","lastSaleChange":"Change","lastSalePrice":"Price","name":"Company Name","shareVolume":"Share Volume"},"rows":[{"issueSymbol":"IUSB","lastSaleChange":"0.145","lastSalePrice":"$46.185","name":"iShares Core Universal USD Bond ETF","shareVolume":"129,241,728"},{"issueSymbol":"NVDA","lastSaleChange":"1.79","lastSalePrice":"$214.39","name":"NVIDIA Corporation","shareVolume":"102,359,876"},{"issueSymbol":"CORO","lastSaleChange":"0.19","lastSalePrice":"$36.42","name":"iShares International Country Rotation Active ETF","shareVolume":"89,951,125"}]}}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:27.501Z","max_age_seconds":120,"stale":false},"generated_at":"2026-05-28T20:59:27.501Z","provider":"nasdaq","route":"list_type_extended","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"list_type_extended"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"list_type_extended"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/markets/info":{"get":{"tags":["Markets"],"operationId":"getMarketInfo","summary":"Market Info","description":"Nasdaq market status, market centers, and session metadata when available.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Market info response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketInfoResponse"},"examples":{"success":{"summary":"Market Info success","value":{"data":{"data":{"afterHoursMarketClosingTime":"May 28, 2026 08:00 PM ET","afterHoursMarketOpeningTime":"May 28, 2026 04:00 PM ET","ahCloseRaw":"2026-05-28T20:00:00","closeRaw":"2026-05-28T16:00:00","country":"U.S.","isBusinessDay":true,"marketClosingTime":"May 28, 2026 04:00 PM ET","marketCountDown":"Market Opens in 16H 30M","marketIndicator":"After Hours","marketOpeningTime":"May 28, 2026 09:30 AM ET","mrktCountDown":"Opens in 16H 30M","mrktStatus":"After-Hours","nextTradeDate":"May 29, 2026","openRaw":"2026-05-28T09:30:00","pmOpenRaw":"2026-05-28T04:00:00","preMarketClosingTime":"May 28, 2026 09:30 AM ET","preMarketOpeningTime":"May 28, 2026 04:00 AM ET","previousTradeDate":"May 27, 2026","uiMarketIndicator":"After Hours"},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:27.850Z","max_age_seconds":120,"stale":false},"generated_at":"2026-05-28T20:59:27.850Z","provider":"nasdaq","route":"market_info","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"market_info"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"market_info"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/markets/movers":{"get":{"tags":["Markets"],"operationId":"getMarketMovers","summary":"Market Movers","description":"Nasdaq market movers across stocks, ETFs, and other asset classes, including most-active, gainers, and losers tables.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"market_type","in":"query","required":false,"schema":{"type":"string"},"description":"Market mover group or market type when supported by Nasdaq. Maps to marketType."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Market movers response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketMoversResponse"},"examples":{"success":{"summary":"Market Movers success","value":{"data":{"data":{"ETF":{"MostActiveByShareVolume":{"dataAsOf":"Data as of May 28, 2026 4:58 PM ET","lastTradeTimestamp":"May 28, 2026 4:58 PM ET","table":{"asOf":null,"headers":{"change":"Share Volume","lastSaleChange":"Change","lastSalePrice":"Last","name":"Name","symbol":"Symbol"},"rows":[{"change":"345,654,514.612112","deltaIndicator":"down","lastSaleChange":"-0.22","lastSalePrice":"$6.31","name":"Direxion Daily Semiconductor Bear 3x Shares","symbol":"SOXS"},{"change":"285,872,347.397239","deltaIndicator":"up","lastSaleChange":"+0.0482","lastSalePrice":"$0.2681","name":"Genius Group Limited","symbol":"GNS"},{"change":"244,184,745.921613","deltaIndicator":"up","lastSaleChange":"+2.45","lastSalePrice":"$13.25","name":"Ondas Holdings Inc.","symbol":"ONDS"}]}},"MostAdvanced":{"dataAsOf":"Data as of May 28, 2026 4:58 PM ET","lastTradeTimestamp":"May 28, 2026 4:58 PM ET","table":{"asOf":null,"headers":{"change":"% Change","lastSaleChange":"Change","lastSalePrice":"Last","name":"Name","symbol":"Symbol"},"rows":[{"change":"+199.2754%","deltaIndicator":"up","lastSaleChange":"+2.75","lastSalePrice":"$4.13","name":"3 E Network Technology Group Ltd Class A Ordinary Shares","symbol":"MASK"},{"change":"+151.4933%","deltaIndicator":"up","lastSaleChange":"+0.421","lastSalePrice":"$0.6989","name":"Creative Global Technology Holdings Limited","symbol":"CGTL"},{"change":"+144.213%","deltaIndicator":"up","lastSaleChange":"+6.23","lastSalePrice":"$10.55","name":"SciSparc Ltd.","symbol":"SPRC"}]}},"MostDeclined":{"dataAsOf":"Data as of May 28, 2026 4:58 PM ET","lastTradeTimestamp":"May 28, 2026 4:58 PM ET","table":{"asOf":null,"headers":{"change":"% Change","lastSaleChange":"Change","lastSalePrice":"Last","name":"Name","symbol":"Symbol"},"rows":[{"change":"-64.6863%","deltaIndicator":"down","lastSaleChange":"-0.9897","lastSalePrice":"$0.5403","name":"Zhongchao Inc.","symbol":"ZCMD"},{"change":"-51.3514%","deltaIndicator":"down","lastSaleChange":"-0.0038","lastSalePrice":"$0.0036","name":"GDEV Inc.","symbol":"GDEVW"},{"change":"-44.0901%","deltaIndicator":"down","lastSaleChange":"-1.175","lastSalePrice":"$1.49","name":"SU Group Holdings Limited","symbol":"SUGP"}]}}},"MUTUALFUNDS":{"MostAdvanced":{"dataAsOf":"Data as of Jan 29, 2026","lastTradeTimestamp":"Jan 29, 2026","table":{"asOf":null,"headers":{"change":"% Change","lastSaleChange":"1D Change","lastSalePrice":"NAV","name":"Name","symbol":"Symbol"},"rows":[{"change":"+7.93%","deltaIndicator":"up","lastSaleChange":"+0.61","lastSalePrice":"$8.30","name":"Virtus AlphaSimplex Managed Futures Strategy Fund Class I","symbol":"ASFYX"},{"change":"+7.78%","deltaIndicator":"up","lastSaleChange":"+0.54","lastSalePrice":"$7.48","name":"Virtus AlphaSimplex Managed Futures Strategy Fund Class C","symbol":"ASFCX"},{"change":"+7.5%","deltaIndicator":"up","lastSaleChange":"+0.57","lastSalePrice":"$8.17","name":"Virtus AlphaSimplex Managed Futures Strategy Fund Class A","symbol":"AMFAX"}]}},"MostDeclined":{"dataAsOf":"Data as of Jan 29, 2026","lastTradeTimestamp":"Jan 29, 2026","table":{"asOf":null,"headers":{"change":"% Change","lastSaleChange":"1D Change","lastSalePrice":"NAV","name":"Name","symbol":"Symbol"},"rows":[{"change":"-6.98%","deltaIndicator":"down","lastSaleChange":"-1.69","lastSalePrice":"$22.51","name":"Ether ProFund Investor Class","symbol":"ETHFX"},{"change":"-6.85%","deltaIndicator":"down","lastSaleChange":"-1.62","lastSalePrice":"$22.03","name":"Software and IT Services Portfolio","symbol":"FSCSX"},{"change":"-5.78%","deltaIndicator":"down","lastSaleChange":"-0.67","lastSalePrice":"$10.92","name":"Virtus Westchester Credit Event Fund - Class I","symbol":"WCFIX"}]}}},"STOCKS":{"MostActiveByDollarVolume":{"dataAsOf":"Data as of May 28, 2026 4:58 PM ET","lastTradeTimestamp":"May 28, 2026 4:58 PM ET","table":{"asOf":null,"headers":{"change":"% Change","lastSaleChange":"Change","lastSalePrice":"Last","name":"Name","symbol":"Symbol"},"rows":[{"change":"-0.5267%","deltaIndicator":"down","lastSaleChange":"-4.89","lastSalePrice":"$923.52","name":"Micron Technology, Inc.","symbol":"MU"},{"change":"+0.7761%","deltaIndicator":"up","lastSaleChange":"+1.65","lastSalePrice":"$214.25","name":"NVIDIA Corporation","symbol":"NVDA"},{"change":"+0.5583%","deltaIndicator":"up","lastSaleChange":"+4.19","lastSalePrice":"$754.65","name":"SPDR S&P 500","symbol":"SPY"}]}},"MostActiveByShareVolume":{"dataAsOf":"Data as of May 28, 2026 4:58 PM ET","lastTradeTimestamp":"May 28, 2026 4:58 PM ET","table":{"asOf":null,"headers":{"change":"Share Volume","lastSaleChange":"Change","lastSalePrice":"Last","name":"Name","symbol":"Symbol"},"rows":[{"change":"345,654,514.612112","deltaIndicator":"down","lastSaleChange":"-0.22","lastSalePrice":"$6.31","name":"Direxion Daily Semiconductor Bear 3x Shares","symbol":"SOXS"},{"change":"285,872,347.397239","deltaIndicator":"up","lastSaleChange":"+0.0482","lastSalePrice":"$0.2681","name":"Genius Group Limited","symbol":"GNS"},{"change":"244,184,745.921613","deltaIndicator":"up","lastSaleChange":"+2.45","lastSalePrice":"$13.25","name":"Ondas Holdings Inc.","symbol":"ONDS"}]}},"MostAdvanced":{"dataAsOf":"Data as of May 28, 2026 4:58 PM ET","lastTradeTimestamp":"May 28, 2026 4:58 PM ET","table":{"asOf":null,"headers":{"change":"% Change","lastSaleChange":"Change","lastSalePrice":"Last","name":"Name","symbol":"Symbol"},"rows":[{"change":"+199.2754%","deltaIndicator":"up","lastSaleChange":"+2.75","lastSalePrice":"$4.13","name":"3 E Network Technology Group Ltd Class A Ordinary Shares","symbol":"MASK"},{"change":"+151.4933%","deltaIndicator":"up","lastSaleChange":"+0.421","lastSalePrice":"$0.6989","name":"Creative Global Technology Holdings Limited","symbol":"CGTL"},{"change":"+144.213%","deltaIndicator":"up","lastSaleChange":"+6.23","lastSalePrice":"$10.55","name":"SciSparc Ltd.","symbol":"SPRC"}]}},"MostDeclined":{"dataAsOf":"Data as of May 28, 2026 4:58 PM ET","lastTradeTimestamp":"May 28, 2026 4:58 PM ET","table":{"asOf":null,"headers":{"change":"% Change","lastSaleChange":"Change","lastSalePrice":"Last","name":"Name","symbol":"Symbol"},"rows":[{"change":"-64.6863%","deltaIndicator":"down","lastSaleChange":"-0.9897","lastSalePrice":"$0.5403","name":"Zhongchao Inc.","symbol":"ZCMD"},{"change":"-51.3514%","deltaIndicator":"down","lastSaleChange":"-0.0038","lastSalePrice":"$0.0036","name":"GDEV Inc.","symbol":"GDEVW"},{"change":"-44.0901%","deltaIndicator":"down","lastSaleChange":"-1.175","lastSalePrice":"$1.49","name":"SU Group Holdings Limited","symbol":"SUGP"}]}},"Nasdaq100Movers":{"dataAsOf":"Data as of May 28, 2026 4:00 PM ET","lastTradeTimestamp":"May 28, 2026 4:00 PM ET","table":{"asOf":null,"headers":{"change":"% Change","lastSaleChange":"Change","lastSalePrice":"Last","name":"Name","symbol":"Symbol"},"rows":[{"change":"+0.40%","deltaIndicator":"up","lastSaleChange":"+0.9500","lastSalePrice":"241.44","name":"Adobe Inc. Common Stock","symbol":"ADBE"},{"change":"+2.82%","deltaIndicator":"up","lastSaleChange":"+14.2000","lastSalePrice":"518.09","name":"Advanced Micro Devices, Inc. Common Stock","symbol":"AMD"},{"change":"+1.37%","deltaIndicator":"up","lastSaleChange":"+1.8200","lastSalePrice":"134.5","name":"Airbnb, Inc. Class A Common Stock","symbol":"ABNB"}]}}}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:29.083Z","max_age_seconds":120,"stale":false},"generated_at":"2026-05-28T20:59:29.083Z","provider":"nasdaq","route":"market_movers","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"market_movers"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"market_movers"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/news/press-center":{"get":{"tags":["News"],"operationId":"getNewsPressCenter","summary":"Press Center News","description":"Nasdaq press-center news items and announcements.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Press center news response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsPressCenterResponse"},"examples":{"success":{"summary":"News Press Center success","value":{"data":{"data":{"message":null,"rows":[{"ago":"1 hour ago","created":"May 28, 2026","id":27674341,"image":"","imagedomain":"https://www.nasdaq.com/sites/acquia.prod/files","primarysymbol":"","primarytopic":"","publisher":"","related_symbols":[],"title":"Nasdaq Executives to Present at Upcoming Investor Conferences","url":"/press-release/nasdaq-executives-present-upcoming-investor-conferences-2026-05-28"},{"ago":"1 day ago","created":"May 27, 2026","id":27665026,"image":"","imagedomain":"https://www.nasdaq.com/sites/acquia.prod/files","primarysymbol":"","primarytopic":"","publisher":"","related_symbols":[],"title":"Nasdaq Announces Mid-Month Open Short Interest Positions in Nasdaq Stocks as of Settlement Date May 15, 2026","url":"/press-release/nasdaq-announces-mid-month-open-short-interest-positions-nasdaq-stocks-settlement-5"},{"ago":"May 19, 2026","created":"May 19, 2026","id":27614451,"image":"","imagedomain":"https://www.nasdaq.com/sites/acquia.prod/files","primarysymbol":"","primarytopic":"","publisher":"","related_symbols":[],"title":"Nasdaq Halts TJGC Group Limited","url":"/press-release/nasdaq-halts-tjgc-group-limited-2026-05-19"}],"totalrecords":359},"message":null,"status":{"BCodeMessage":null,"DeveloperMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:30.273Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:30.273Z","provider":"nasdaq","route":"news_press_center","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"news_press_center"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"news_press_center"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/news/topic/{topic}":{"get":{"tags":["News"],"operationId":"getNewsTopic","summary":"Topic News","description":"Nasdaq news items for a topic slug.","parameters":[{"name":"topic","in":"path","required":true,"schema":{"type":"string"},"description":"Nasdaq news topic slug."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Topic news response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsTopicResponse"},"examples":{"success":{"summary":"News Topic success","value":{"data":{"data":{"message":null,"rows":[{"ago":"46 minutes ago","created":"May 28, 2026","description":"SailGP, the most exciting race on water, visits the Nasdaq MarketSite in Times Square ahead of the Mubadala New York Sail Grand Prix. This weekend, SailGP brings its global racing championshipto New York Harbor, where national teams from around the world will battle it out in identical high-tech, high-speed 50-foot foiling catamarans on the iconic waterfront. In honor of the occasion, Sir Russell Coutts, CEO and Co-Founder rings the Closing Bell.","id":27674661,"image":"","imagedomain":"https://www.nasdaq.com/sites/acquia.prod/files","primarysymbol":"","primarytopic":"Bell Ceremonies|7946","primarytopic_url":"/topic/bell-ceremonies","publisher":"","publisher_logo":"","related_symbols":[],"title":"SailGP Rings the Nasdaq Stock Market Closing Bell","url":"/videos/sailgp-rings-nasdaq-stock-market-closing-bell"},{"ago":"2 hours ago","created":"May 28, 2026","description":"\"Where the game is at today globally, I'm jealous, I wish I could've played at this time!\"\n\nIn this episode of Nasdaq's The Winning Formula, MLB Network Analysts Harold Reynolds and Al Leiter talk about the start of the network, the impact of teaching the game to the next generation, how analytics have always been apart of baseball and the growth of the MLB to becoming the global game it is today.","id":27673896,"image":"","imagedomain":"https://www.nasdaq.com/sites/acquia.prod/files","primarysymbol":"","primarytopic":"","primarytopic_url":"","publisher":"","publisher_logo":"","related_symbols":[],"title":"The Winning Formula: Harold Reynolds & Al Leiter ","url":"/videos/winning-formula-harold-reynolds-al-leiter"},{"ago":"4 hours ago","created":"May 28, 2026","description":"Evestment Hedge Fund Demo Demo: Hedge Fund Investigate a Hedge Fund Fund . Demo is a demonstration of the fund's ability to invest in a hedge fund . Demo will take place at the end of the month at the start of the new year . Demo includes a presentation of the hedge fund investment firm's new investment strategy .","id":27672706,"image":"","imagedomain":"https://www.nasdaq.com/sites/acquia.prod/files","primarysymbol":"","primarytopic":"","primarytopic_url":"","publisher":"","publisher_logo":"","related_symbols":[],"title":"Evestment Hedge Fund Demo","url":"/videos/evestment-hedge-fund-demo"}],"totalrecords":500},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:30.986Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:30.986Z","provider":"nasdaq","route":"news_topic","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"news_topic"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"news_topic"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/instruments/{order_book_id}/info":{"get":{"tags":["Nordic"],"operationId":"getNordicInstrumentInfo","summary":"Nordic Instrument Info","description":"Nasdaq Nordic instrument reference data for one order book ID.","parameters":[{"name":"order_book_id","in":"path","required":true,"schema":{"type":"string"},"description":"Nasdaq Nordic order book ID."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic instrument info response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicInstrumentInfoResponse"},"examples":{"success":{"summary":"Nordic Instrument Info success","value":{"data":{"data":{"qdHeader":{"companyName":"Ericsson B","currency":"SEK","exchange":"Nasdaq Stockholm","isin":"SE0000108656","keyStats":{"ask":{"label":"Ask:","value":"SEK 119.15 x 22"},"bid":{"label":"Bid:","value":"SEK 119.10 x 2,551"},"dayRange":{"label":"Day Range:","value":"118.50-121.35"},"fiftyTwoWeekHighLow":{"label":"52 Week Range:","value":"69.90-127.45"},"volume":{"label":"Volume:","value":"7,540,254"}},"marketStatus":"Closed","notifications":null,"primaryData":{"deltaIndicator":"down","lastSalePrice":"SEK 119.00","lastTradeTimestamp":"2026-05-28 18:00:00 CET","netChange":"-2.25","percentageChange":"-1.85%"},"segment":"Large Cap","symbol":"ERIC B"}},"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:59:31+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:31.491Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:31.491Z","provider":"nasdaq","route":"nordic_instrument_info","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_instrument_info"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_instrument_info"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/instruments/{order_book_id}/price-info":{"get":{"tags":["Nordic"],"operationId":"getNordicInstrumentPriceInfo","summary":"Nordic Instrument Price Info","description":"Nasdaq Nordic instrument price information for one order book ID.","parameters":[{"name":"order_book_id","in":"path","required":true,"schema":{"type":"string"},"description":"Nasdaq Nordic order book ID."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic instrument price info response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicInstrumentPriceInfoResponse"},"examples":{"success":{"summary":"Nordic Instrument Price Info success","value":{"data":{"data":{"trades":{"headers":{"attribute":"Attribute","date":"Date","value":"Value"},"rows":[{"attribute":"Open price","date":"2026-05-28","value":"120.90"},{"attribute":"Close price/Indicative price","date":"2026-05-27","value":"121.25"},{"attribute":"Intraday Nasdaq CPH Consolidated reference price","date":"","value":""}]}},"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:59:31+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:31.990Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:31.990Z","provider":"nasdaq","route":"nordic_instrument_price_info","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_instrument_price_info"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_instrument_price_info"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/instruments/{order_book_id}/summary":{"get":{"tags":["Nordic"],"operationId":"getNordicInstrumentSummary","summary":"Nordic Instrument Summary","description":"Nasdaq Nordic instrument summary data for one order book ID.","parameters":[{"name":"order_book_id","in":"path","required":true,"schema":{"type":"string"},"description":"Nasdaq Nordic order book ID."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic instrument summary response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicInstrumentSummaryResponse"},"examples":{"success":{"summary":"Nordic Instrument Summary success","value":{"data":{"data":{"summaryData":{"fiftyTwoWeekHighLow":{"label":"52 Week","value":"69.90/127.45"},"greenEquityDesignation":{"label":"Green Equity Designation","value":"No"},"greenEquityTransitionDesignation":{"label":"Green Equity Transition Designation","value":"No"},"icbCode":{"label":"ICB Code","value":"1510"},"insExecutionVenue":{"label":"Venue of execution","value":"XSTO"},"insPublicationVenue":{"label":"Venue of publication","value":"XSTO"},"insSegment":{"label":"Segment","value":"Large Cap"},"isin":{"label":"ISIN","value":"SE0000108656"},"liquidityProvider":{"label":"Liquidity Provider","value":"No"},"marketCap":{"label":"Market Cap of Share Series","value":"370,041,894,488"},"marketName":{"label":"Market","value":"Nasdaq Stockholm"},"noOfTrades":{"label":"No. of trades","value":"8,329"},"note":{"label":"Note","value":""},"openingPrice":{"label":"Opening price","value":"120.90"},"priceNotation":{"label":"Price notation","value":"MONE"},"sectorName":{"label":"Sector","value":"Telecommunications"},"sharePriceChange3Month":{"label":"3 Month","value":"+13.82%"},"sharePriceChange6Month":{"label":"6 Month","value":"+30.13%"},"sharePriceChangeMonth":{"label":"Month","value":"+14.42%"},"sharePriceChangeWeek":{"label":"Week","value":"-0.99%"},"sharePriceChangeYTD":{"label":"Year start change","value":"+31.34%"},"sharePriceChangeYear":{"label":"Year Change","value":"+41.59%"},"shares":{"label":"Shares","value":"3,109,595,752"},"todayHighLow":{"label":"Day Range","value":"118.50/121.35"},"volume":{"label":"Vol.","value":"7,540,254"},"yearHighLow":{"label":"Year","value":"84.56/127.45"}}},"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:59:32+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:32.591Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:32.591Z","provider":"nasdaq","route":"nordic_instrument_summary","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_instrument_summary"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_instrument_summary"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/instruments/{order_book_id}/trades":{"get":{"tags":["Nordic"],"operationId":"getNordicInstrumentTrades","summary":"Nordic Instrument Trades","description":"Recent Nasdaq Nordic trades for one order book ID.","parameters":[{"name":"order_book_id","in":"path","required":true,"schema":{"type":"string"},"description":"Nasdaq Nordic order book ID."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic instrument trades response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicInstrumentTradesResponse"},"examples":{"success":{"summary":"Nordic Instrument Trades success","value":{"data":{"data":{"trades":{"headers":{"buyer":"Buyer","price":"Price","seller":"Seller","time":"Time (CET)","volume":"Volume"},"rows":[{"agreementTime":"","buyer":"","cancelled":"","market":"OMX","mmtFlag":"5K-------PH---","name":"ERIC B","orderbook":"","price":"119.00","seller":"","time":"17:29:43","tradeType":"","volume":"1,132"},{"agreementTime":"","buyer":"","cancelled":"","market":"OMX","mmtFlag":"5K-------PH---","name":"ERIC B","orderbook":"","price":"119.00","seller":"","time":"17:29:43","tradeType":"","volume":"1"},{"agreementTime":"","buyer":"","cancelled":"","market":"OMX","mmtFlag":"5K-------PH---","name":"ERIC B","orderbook":"","price":"119.00","seller":"","time":"17:29:43","tradeType":"","volume":"400"}]}},"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:59:32+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:32.995Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:32.995Z","provider":"nasdaq","route":"nordic_instrument_trades","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_instrument_trades"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_instrument_trades"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/listing":{"get":{"tags":["Nordic"],"operationId":"getNordicListing","summary":"Nordic Listing","description":"Nasdaq Nordic listing data, optionally filtered by one or more instrument IDs.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"instrument_id","in":"query","required":false,"schema":{"type":"string"},"description":"One or more Nordic instrument IDs. Aliases: instrumentIds and order_book_id."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic listing response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicListingResponse"},"examples":{"success":{"summary":"Nordic Listing success","value":{"data":{"data":{"dataAsOf":"May 28, 2026 22:44 CET","tableView":{"headers":{"fullName":"Name","lastSalePrice":"Last Sale","netChange":"Change","percentageChange":"% Change","symbol":"Symbol","volume":"Share Volume"},"rows":[{"assetClass":"SHARES","deltaIndicator":"up","fullName":"A.P. Møller - Mærsk A","lastSalePrice":"DKK 15,130.00","netChange":"+110.00","orderbookId":"TX2195","percentageChange":"+0.73%","symbol":"MAERSK A","volume":"4,834"}]}},"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:59:33+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:33.442Z","max_age_seconds":60,"stale":false},"generated_at":"2026-05-28T20:59:33.442Z","provider":"nasdaq","route":"nordic_listing","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_listing"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_listing"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/markets/movers":{"get":{"tags":["Nordic"],"operationId":"getNordicMarketMovers","summary":"Nordic Market Movers","description":"Nasdaq Nordic market movers data.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic market movers response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicMarketMoversResponse"},"examples":{"success":{"summary":"Nordic Market Movers success","value":{"data":{"data":{"marketMovers":{"TURNOVER_IND_ACT":{"headers":{"askPrice":"Ask","bidPrice":"Bid","ccy":"CCY","fullName":"Fullname","lastSalePrice":"Last","netChange":"+/-","percentageChange":"%","time":"Updated (CET)","turnover":"Turnover","turnoverEUR":"Turnover €","volume":"Volume"},"rows":[{"askPrice":"13.28","assetClass":"SHARES","bidPrice":"13.265","ccy":"EUR","contractSize":"","deltaIndicator":"down","direction":"unch","expiryDate":"","fullName":"Nokia Oyj","isin":"FI0009000681","lastSalePrice":"13.325","netChange":"-0.145","numTrades":"","orderbookId":"TX50063","percentageChange":"-1.07%","percentageChangeEtf":"","symbol":"NOKIA","time":"18:00:00","totalExpenseRatio":"","turnover":"261,855,572","turnoverEUR":"261,855,572","volume":"19,737,674","volumePercentageChange":""},{"askPrice":"295.65","assetClass":"SHARES","bidPrice":"295.60","ccy":"DKK","contractSize":"","deltaIndicator":"up","direction":"unch","expiryDate":"","fullName":"Novo Nordisk B","isin":"DK0062498333","lastSalePrice":"293.60","netChange":"+3.50","numTrades":"","orderbookId":"TX2178","percentageChange":"+1.20%","percentageChangeEtf":"","symbol":"NOVO B","time":"17:20:00","totalExpenseRatio":"","turnover":"1,579,319,234","turnoverEUR":"211,686,333","volume":"5,437,865","volumePercentageChange":""},{"askPrice":"577.00","assetClass":"SHARES","bidPrice":"576.70","ccy":"SEK","contractSize":"","deltaIndicator":"up","direction":"unch","expiryDate":"","fullName":"SAAB B","isin":"SE0021921269","lastSalePrice":"576.20","netChange":"+39.50","numTrades":"","orderbookId":"TX240","percentageChange":"+7.35%","percentageChangeEtf":"","symbol":"SAAB B","time":"18:00:00","totalExpenseRatio":"","turnover":"1,459,976,027","turnoverEUR":"131,375,508","volume":"2,583,498","volumePercentageChange":""}]}}},"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:59:33+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:34.012Z","max_age_seconds":60,"stale":false},"generated_at":"2026-05-28T20:59:34.012Z","provider":"nasdaq","route":"nordic_market_movers","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_market_movers"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_market_movers"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/screener/{type}":{"get":{"tags":["Nordic"],"operationId":"getNordicScreener","summary":"Nordic Screener","description":"Nasdaq Nordic screener rows for a screener type path parameter.","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string"},"description":"Screener type."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic screener response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicScreenerResponse"},"examples":{"success":{"summary":"Nordic Screener success","value":{"data":{"data":{"filters":[{"displayName":"Market","key":"market","options":[{"default":true,"displayName":"Nordic","value":""},{"default":false,"displayName":"CPH","value":"CPH"},{"default":false,"displayName":"STO","value":"STO"}]},{"displayName":"Segment","key":"segment","options":[{"default":true,"displayName":"Large Cap","value":"LARGE_CAP"},{"default":false,"displayName":"Mid Cap","value":"MID_CAP"},{"default":false,"displayName":"Small Cap","value":"SMALL_CAP"}]},{"displayName":"Other","key":"other","options":[{"default":false,"displayName":"Auction Trading","value":"AUCTION_TRADING"},{"default":false,"displayName":"Observation Status","value":"OBSERVATION_STATUS"},{"default":false,"displayName":"External List","value":"EXTERNAL_LIST"}]}],"instrumentListing":{"headers":{"askPrice":"Ask","bidPrice":"Bid","currency":"CCY","fullName":"Name","greenEquityDesignation":"Green Equity Designation","lastSalePrice":"Last","netChange":"Net Change","percentageChange":"% Change","sector":"Sector","turnover":"Turnover","volume":"Volume"},"rows":[{"allTradesAvgPrice":"","askPrice":"15,190.00","assetClass":"SHARES","bidPrice":"15,160.00","contractSize":"","couponRate":"","currency":"DKK","deltaIndicator":"up","exchangeSymbol":"","expirationDate":"","fullName":"A.P. Møller - Mærsk A","greenEquityDesignation":"","high":"","isin":"DK0010244425","issuerFullName":"","lastSalePrice":"15,130.00","lastTraded":"","low":"","micCode":"","navUpdatedTime":"","netAssetValue":"","netChange":"+110.00","noteCode":"","noteDescription":"","openInterest":"","orderbookId":"TX2195","percentageChange":"+0.73%","priceNotation":"","reportedVolume":"","sector":"Industrials","settlementPrice":"","strikePrice":"","symbol":"MAERSK A","time":"","totalExpenseRatio":"","totalVolume":"","tradesCount":"","turnover":"73,161,185","type":"","volume":"4,834"},{"allTradesAvgPrice":"","askPrice":"15,585.00","assetClass":"SHARES","bidPrice":"15,565.00","contractSize":"","couponRate":"","currency":"DKK","deltaIndicator":"up","exchangeSymbol":"","expirationDate":"","fullName":"A.P. Møller - Mærsk B","greenEquityDesignation":"","high":"","isin":"DK0010244508","issuerFullName":"","lastSalePrice":"15,510.00","lastTraded":"","low":"","micCode":"","navUpdatedTime":"","netAssetValue":"","netChange":"+170.00","noteCode":"","noteDescription":"","openInterest":"","orderbookId":"TX2196","percentageChange":"+1.10%","priceNotation":"","reportedVolume":"","sector":"Industrials","settlementPrice":"","strikePrice":"","symbol":"MAERSK B","time":"","totalExpenseRatio":"","totalVolume":"","tradesCount":"","turnover":"227,000,539","type":"","volume":"14,622"},{"allTradesAvgPrice":"","askPrice":"247.80","assetClass":"SHARES","bidPrice":"247.40","contractSize":"","couponRate":"","currency":"SEK","deltaIndicator":"down","exchangeSymbol":"","expirationDate":"","fullName":"AAK","greenEquityDesignation":"","high":"","isin":"SE0011337708","issuerFullName":"","lastSalePrice":"247.80","lastTraded":"","low":"","micCode":"","navUpdatedTime":"","netAssetValue":"","netChange":"-6.60","noteCode":"","noteDescription":"","openInterest":"","orderbookId":"TX209114","percentageChange":"-2.59%","priceNotation":"","reportedVolume":"","sector":"Consumer Staples","settlementPrice":"","strikePrice":"","symbol":"AAK","time":"","totalExpenseRatio":"","totalVolume":"","tradesCount":"","turnover":"109,290,113","type":"","volume":"439,617"}]},"pagination":{"page":1,"paginationId":"","size":1000,"total":251,"totalPages":1}},"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:59:34+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:34.730Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:34.730Z","provider":"nasdaq","route":"nordic_screener","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_screener"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_screener"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/search":{"get":{"tags":["Nordic"],"operationId":"getNordicSearch","summary":"Nordic Search","description":"Search Nasdaq Nordic instruments by text query.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Nasdaq Nordic search text. Aliases: query and searchText."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic search response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicSearchResponse"},"examples":{"success":{"summary":"Nordic Search success","value":{"data":{"data":[{"group":"Shares Main Market","instruments":[{"assetClass":"SHARES","currency":"SEK","fullName":"Ericsson A","isin":"SE0000108649","orderbookId":"TX68","symbol":"ERIC A"},{"assetClass":"SHARES","currency":"EUR","fullName":"Ericsson B","isin":"SE0000108656","orderbookId":"TX50143","symbol":"ERIBR"},{"assetClass":"SHARES","currency":"SEK","fullName":"Ericsson B","isin":"SE0000108656","orderbookId":"TX69","symbol":"ERIC B"}]},{"group":"Warrants","instruments":[{"assetClass":"LEVERAGE_CERTIFICATES","currency":"SEK","fullName":"BEAR ERICSSON X10 NDA S3","isin":"SE0027612029","orderbookId":"TX6729820","symbol":"BEAR ERICSSON X10 NDA S3"},{"assetClass":"LEVERAGE_CERTIFICATES","currency":"SEK","fullName":"BEAR ERICSSON X10 NDA S4","isin":"SE0028786012","orderbookId":"TX7167394","symbol":"BEAR ERICSSON X10 NDA S4"},{"assetClass":"LEVERAGE_CERTIFICATES","currency":"SEK","fullName":"BEAR ERICSSON X10 NORDNET SE3","isin":"DE000JZ7LKZ7","orderbookId":"TX6733602","symbol":"BEAR ERICSSON X10 NORDNET SE3"}]}],"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:54:19+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:35.300Z","max_age_seconds":60,"stale":false},"generated_at":"2026-05-28T20:59:35.300Z","provider":"nasdaq","route":"nordic_search","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"nordic_search requires q=, query=, or searchText=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_search"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_search"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/nordic/star/{order_book_id}/key-stats":{"get":{"tags":["Nordic"],"operationId":"getNordicStarKeyStats","summary":"Nordic Star Key Stats","description":"Nasdaq Nordic Star key statistics for one order book ID.","parameters":[{"name":"order_book_id","in":"path","required":true,"schema":{"type":"string"},"description":"Nasdaq Nordic order book ID."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Nordic Star key stats response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NordicStarKeyStatsResponse"},"examples":{"success":{"summary":"Nordic Star Key Stats success","value":{"data":{"data":[{"metric":"Price/Earning TTM","value":"14.54"},{"metric":"Price/Book","value":"3.57"},{"metric":"Price/Sales TTM","value":"1.59"}],"messages":null,"status":{"bCodeMessage":null,"developerMessage":"","rCode":200,"timestamp":"2026-05-28T22:54:23+0200"}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:35.640Z","max_age_seconds":21600,"stale":false},"generated_at":"2026-05-28T20:59:35.640Z","provider":"nasdaq","route":"nordic_star_key_stats","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_star_key_stats"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"nordic_star_key_stats"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quotes/basic":{"get":{"tags":["Quotes"],"operationId":"getQuoteBasic","summary":"Batch Quotes","description":"Current Nasdaq quote rows for one or more symbols.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"symbols","in":"query","required":true,"schema":{"type":"string"},"description":"Comma-separated symbols. Aliases: symbol, ticker, and tickers."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Batch quotes response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteBasicResponse"},"examples":{"success":{"summary":"Quote Basic success","value":{"data":{"data":{"date":"Data as of May 28, 2026 4:59 PM ET","records":[{"assetclass":"STOCKS","change":"-0.25","deltaIndicator":"down","key":"AAPL|STOCKS","lastSale":"$312.26","pctChange":"-0.08%","ticker":["AAPL","Apple Inc. Common Stock"],"url":"/market-activity/stocks/aapl","volume":"50,431,118"},{"assetclass":"STOCKS","change":"+0.99","deltaIndicator":"up","key":"MSFT|STOCKS","lastSale":"$427.98","pctChange":"+0.23%","ticker":["MSFT","Microsoft Corporation Common Stock"],"url":"/market-activity/stocks/msft","volume":"28,901,596"}]},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:36.117Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:36.117Z","provider":"nasdaq","route":"quote_basic","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_basic requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_basic"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_basic"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/chart":{"get":{"tags":["Quotes"],"operationId":"getQuoteChart","summary":"Quote Chart","description":"Chart-ready price series for one Nasdaq symbol.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Quote chart response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteChartResponse"},"examples":{"success":{"summary":"Quote Chart success","value":{"data":{"data":{"chart":[{"x":1779940800000,"y":310.7512,"z":{"dateTime":"4:00 AM ET","value":"310.7512"}},{"x":1779940860000,"y":310.8,"z":{"dateTime":"4:01 AM ET","value":"310.80"}},{"x":1779940920000,"y":310.7512,"z":{"dateTime":"4:02 AM ET","value":"310.7512"}}],"company":"Apple Inc. Common Stock","deltaIndicator":"down","events":null,"exchange":"NASDAQ-GS","isNasdaq100":false,"lastSalePrice":"$312.26","netChange":"-0.25","percentageChange":"-0.08%","previousClose":"$308.33","symbol":"AAPL","timeAsOf":"May 28, 2026 4:59 PM ET","volume":"50,431,118","volumeChart":[{"x":1779940800000,"y":310.7512,"z":{"dateTime":"4:00 AM ET","value":"310.7512"}},{"x":1779940860000,"y":310.8,"z":{"dateTime":"4:01 AM ET","value":"310.80"}},{"x":1779940920000,"y":310.7512,"z":{"dateTime":"4:02 AM ET","value":"310.7512"}}]},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:36.622Z","max_age_seconds":60,"stale":false},"generated_at":"2026-05-28T20:59:36.622Z","provider":"nasdaq","route":"quote_chart","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_chart requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_chart"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_chart"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/dividends":{"get":{"tags":["Quotes"],"operationId":"getQuoteDividends","summary":"Quote Dividends","description":"Dividend rows and dividend summary data for one Nasdaq symbol.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Quote dividends response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteDividendsResponse"},"examples":{"success":{"summary":"Quote Dividends success","value":{"data":{"data":{"annualizedDividend":"1.08","dividendHeaderValues":[{"label":"Ex-Dividend Date","value":"05/11/2026"},{"label":"Dividend Yield","value":"0.35%"},{"label":"Annual Dividend","value":"$1.08"}],"dividendPaymentDate":"05/14/2026","dividends":{"asOf":null,"headers":{"amount":"Cash Amount","declarationDate":"Declaration Date","exOrEffDate":"Ex/EFF Date","paymentDate":"Payment Date","recordDate":"Record Date","type":"Type"},"rows":[{"amount":"$0.27","currency":"USD","declarationDate":"04/30/2026","exOrEffDate":"05/11/2026","paymentDate":"05/14/2026","recordDate":"05/11/2026","type":"Cash"},{"amount":"$0.26","currency":"USD","declarationDate":"01/29/2026","exOrEffDate":"02/09/2026","paymentDate":"02/12/2026","recordDate":"02/09/2026","type":"Cash"},{"amount":"$0.26","currency":"USD","declarationDate":"10/30/2025","exOrEffDate":"11/10/2025","paymentDate":"11/13/2025","recordDate":"11/10/2025","type":"Cash"}]},"exDividendDate":"05/11/2026","payoutRatio":"50.79","yield":"0.35%"},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:37.270Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:37.270Z","provider":"nasdaq","route":"quote_dividends","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_dividends requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_dividends"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_dividends"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/eps":{"get":{"tags":["Quotes"],"operationId":"getQuoteEps","summary":"Quote EPS","description":"EPS and earnings-per-share data for one Nasdaq symbol.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Quote EPS response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteEpsResponse"},"examples":{"success":{"summary":"Quote EPS success","value":{"data":{"data":{"earningsPerShare":[{"consensus":1.42,"earnings":1.57,"period":"Jun 2025","type":"PreviousQuarter"},{"consensus":1.73,"earnings":1.85,"period":"Sep 2025","type":"PreviousQuarter"},{"consensus":2.65,"earnings":2.84,"period":"Dec 2025","type":"PreviousQuarter"}],"symbol":"aapl"},"message":{},"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:37.625Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:37.625Z","provider":"nasdaq","route":"quote_eps","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_eps requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_eps"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_eps"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/extended-trading":{"get":{"tags":["Quotes"],"operationId":"getQuoteExtended","summary":"Extended Trading","description":"Pre-market and after-hours trading data for one Nasdaq symbol when available.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Extended trading response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteExtendedResponse"},"examples":{"success":{"summary":"Quote Extended success","value":{"data":{"data":{"filterList":[{"name":"Last 100 Trades","value":0},{"name":"4:00 - 4:29","value":1},{"name":"4:30 - 4:59","value":2}],"infoTable":{"asOf":null,"headers":{"consolidated":"Pre-Market Consolidated Last Trade","highPrice":"Pre-Market High","lowPrice":"Pre-Market Low","volume":"Pre-Market Share Volume"},"rows":[{"consolidated":"$310.79 -0.06 (-0.02%)","delta":"down","highPrice":"$311.58 (04:59:08 AM)","lowPrice":"$309.08 (09:27:40 AM)","volume":"502,528"}]},"lastUpdateInfo":["Data last updated May 28, 2026 09:30 AM ET.","This page will resume updating on May 29, 2026 04:00 AM ET."],"previousInfo":" Market Close: $310.85","sessionText":"","tradeDetailTable":{"asOf":null,"headers":{"price":"Pre-Market Price","shareVolume":"Pre-Market Share Volume","time":"Pre-Market Time (ET)"},"rows":[{"price":"$310.79","shareVolume":"81","time":"09:30:01"},{"price":"$310.79","shareVolume":"40","time":"09:30:01"},{"price":"$310.83","shareVolume":"20","time":"09:30:01"}]}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:38.462Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:38.462Z","provider":"nasdaq","route":"quote_extended_trading","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_extended requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_extended"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_extended"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/historical":{"get":{"tags":["Quotes"],"operationId":"getQuoteHistorical","summary":"Historical Prices","description":"Historical Nasdaq price rows for one symbol, with optional date range and limit controls.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"from_date","in":"query","required":false,"schema":{"type":"string"},"description":"Start date as YYYY-MM-DD. Maps to Nasdaq fromDate/fromdate."},{"name":"to_date","in":"query","required":false,"schema":{"type":"string"},"description":"End date as YYYY-MM-DD. Maps to Nasdaq toDate/todate."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1},"description":"Maximum number of historical rows when Nasdaq supports a limit parameter."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Historical prices response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteHistoricalResponse"},"examples":{"success":{"summary":"Quote Historical success","value":{"data":{"data":{"symbol":"AAPL","totalRecords":124,"tradesTable":{"asOf":null,"headers":{"close":"Close/Last","date":"Date","high":"High","low":"Low","open":"Open","volume":"Volume"},"rows":[{"close":"$280.14","date":"05/01/2026","high":"$287.22","low":"$278.37","open":"$278.855","volume":"79,915,440"},{"close":"$271.35","date":"04/30/2026","high":"$276.00","low":"$268.14","open":"$270.50","volume":"91,848,230"},{"close":"$270.17","date":"04/29/2026","high":"$271.04","low":"$267.04","open":"$267.55","volume":"30,047,870"}]}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:38.787Z","max_age_seconds":60,"stale":false},"generated_at":"2026-05-28T20:59:38.787Z","provider":"nasdaq","route":"quote_historical","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_historical requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_historical"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_historical"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quotes/indices":{"get":{"tags":["Quotes"],"operationId":"getQuoteIndices","summary":"Index Quotes","description":"Current Nasdaq index quote rows.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Index quotes response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteIndicesResponse"},"examples":{"success":{"summary":"Quote Indices success","value":{"data":{"data":[{"chartCloseTime":1779984059000,"chartOpenTime":1779960600000,"companyName":"ABA Community Bank NASDAQ Index","datetime":"2026-05-28T16:58:57","deltaIndicator":"up","high":439.96,"indexCharts":null,"lastSalePrice":"439.91","low":435.3,"netChange":"+0.55","percentageChange":"+0.13%","previousClose":"439.36","symbol":"ABAQ","timeStamp":"May 28, 2026","volume":"0"},{"chartCloseTime":1779984059000,"chartOpenTime":1779960600000,"companyName":"KBW Bank Index","datetime":"2026-05-28T16:58:57","deltaIndicator":"down","high":168.57,"indexCharts":null,"lastSalePrice":"168.21","low":167.06,"netChange":"-0.13","percentageChange":"-0.08%","previousClose":"168.34","symbol":"BKX","timeStamp":"May 28, 2026","volume":"0"},{"chartCloseTime":1703865659000,"chartOpenTime":1703842200000,"companyName":"NASDAQ BulletShares USD Corporate Bond 2024 Index","datetime":"2023-12-29T17:30:00","deltaIndicator":"unch","high":134.88,"indexCharts":null,"lastSalePrice":"134.88","low":0,"netChange":"0.00","percentageChange":"0.00%","previousClose":"134.88","symbol":"BSCBO","timeStamp":"Dec 29, 2023","volume":"0"}],"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:39.452Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:39.452Z","provider":"nasdaq","route":"quote_indices","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_indices requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_indices"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_indices"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/info":{"get":{"tags":["Quotes"],"operationId":"getQuoteInfo","summary":"Quote Info","description":"Company and instrument metadata for one Nasdaq symbol.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Quote info response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteInfoResponse"},"examples":{"success":{"summary":"Quote Info success","value":{"data":{"data":{"assetClass":"STOCKS","companyName":"Apple Inc. Common Stock","exchange":"NASDAQ-GS","isHeld":false,"isNasdaq100":true,"isNasdaqListed":true,"keyStats":{"dayrange":{"label":"High/Low:","value":"309.57 - 312.76"},"fiftyTwoWeekHighLow":{"label":"52 Week Range:","value":"195.07 - 313.26"}},"marketStatus":"After-Hours","notifications":[{"eventTypes":[{"eventName":"High Technical Attribute","id":"tech_attribute","message":"AAPL has a High Technical Rating by Nasdaq Dorsey Wright. Discover why technical analysis matters","url":{"label":"Discover why technical analysis matters","value":"https://www.nasdaq.com/solutions/nasdaq-dorsey-wright/technical-analysis"}}],"headline":"HIGH TECHNICAL ATTRIBUTE"}],"primaryData":{"askPrice":"$312.34","askSize":"500","bidPrice":"$312.20","bidSize":"112","currency":null,"deltaIndicator":"down","isRealTime":true,"lastSalePrice":"$310.45","lastTradeTimestamp":"May 28, 2026 4:59 PM ET","netChange":"-2.06","percentageChange":"-0.66%","volume":"47,382,671.782616"},"secondaryData":{"askPrice":"","askSize":"","bidPrice":"","bidSize":"","currency":null,"deltaIndicator":"up","isRealTime":false,"lastSalePrice":"$312.51","lastTradeTimestamp":"Closed at May 28, 2026 4:00 PM ET","netChange":"+1.66","percentageChange":"+0.53%","volume":""},"stockType":"Common Stock","symbol":"AAPL"},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:39.803Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:39.803Z","provider":"nasdaq","route":"quote_info","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_info requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_info"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_info"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/options":{"get":{"tags":["Options"],"operationId":"getQuoteOptions","summary":"Options Chain","description":"Nasdaq option chain data for one symbol.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Options chain response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteOptionsResponse"},"examples":{"success":{"summary":"Quote Options success","value":{"data":{"data":{"filterlist":{"callput":{"filter":[{"label":"Calls & Puts","value":"callput"},{"label":"Calls","value":"call"},{"label":"Puts","value":"put"}],"filterid":"callput","filtertitle":"Strategy","filtertype":"dropdown"},"excode":{"filter":[{"label":"Composite","value":"oprac"},{"label":"CBO","value":"cbo"},{"label":"AOE","value":"aoe"}],"filterid":"excode","filtertitle":"Option","filtertype":"dropdown"},"fromdate":{"filter":[{"label":"May 2026","value":"2026-05-29|2026-05-29"},{"label":"June 2026","value":"2026-06-01|2026-06-26"},{"label":"July 2026","value":"2026-07-02|2026-07-17"}],"filterid":"fromdate","filtertitle":"Expiration Dates","filtertype":"dropdown"},"money":{"filter":[{"label":"Near the Money","value":"at"},{"label":"In the Money","value":"in"},{"label":"Out of the Money","value":"out"}],"filterid":"money","filtertitle":"Moneyness","filtertype":"dropdown"},"type":{"filter":[{"label":"All (Types)","value":"all"},{"label":"Weekly","value":"week"},{"label":"Monthly","value":"stad"}],"filterid":"type","filtertitle":"Type","filtertype":"dropdown"}},"lastTrade":"LAST TRADE: $214.25 (AS OF MAY 28, 2026)","table":{"asOf":null,"headers":{"c_Ask":"Ask","c_Bid":"Bid","c_Change":"Change","c_Last":"Last","c_Openinterest":"Open Int.","c_Volume":"Volume","expiryDate":"Exp. Date","p_Ask":"Ask","p_Bid":"Bid","p_Change":"Change","p_Last":"Last","p_Openinterest":"Open Int.","p_Volume":"Volume","strike":"Strike"},"rows":[{"c_Ask":null,"c_Bid":null,"c_Change":null,"c_Last":null,"c_Openinterest":null,"c_Volume":null,"c_colour":false,"drillDownURL":null,"expiryDate":null,"expirygroup":"May 29, 2026","p_Ask":null,"p_Bid":null,"p_Change":null,"p_Last":null,"p_Openinterest":null,"p_Volume":null,"p_colour":false,"strike":null},{"c_Ask":"166.70","c_Bid":"161.70","c_Change":"1.26","c_Last":"164.15","c_Openinterest":"13","c_Volume":"29","c_colour":true,"drillDownURL":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529c00050000","expiryDate":"May 29","expirygroup":"","p_Ask":"0.01","p_Bid":"--","p_Change":"--","p_Last":"0.01","p_Openinterest":"841","p_Volume":"--","p_colour":false,"strike":"50.00"},{"c_Ask":"161.60","c_Bid":"156.75","c_Change":"1.48","c_Last":"159.47","c_Openinterest":"17","c_Volume":"37","c_colour":true,"drillDownURL":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529c00055000","expiryDate":"May 29","expirygroup":"","p_Ask":"0.01","p_Bid":"--","p_Change":"--","p_Last":"0.01","p_Openinterest":"1247","p_Volume":"--","p_colour":false,"strike":"55.00"}]},"totalRecord":104},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:42.118Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:42.118Z","provider":"nasdaq","route":"quote_options","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_options requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_options"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_options"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/options/greeks":{"get":{"tags":["Options"],"operationId":"getQuoteOptionsGreeks","summary":"Options Greeks","description":"Nasdaq option greeks for one symbol.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Options greeks response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteOptionsGreeksResponse"},"examples":{"success":{"summary":"Quote Options Greeks success","value":{"data":{"data":{"filters":[{"label":"May 29, 2026","value":"2026-05-29"},{"label":"Jun 1, 2026","value":"2026-06-01"},{"label":"Jun 3, 2026","value":"2026-06-03"}],"pageTitle":"NVDA Options Greeks","table":{"asOf":null,"headers":{"Strike":"Strike","cDelta":"Delta","cGamma":"Gamma","cIV":"IV","cRho":"Rho","cTheta":"Theta","cVega":"Vega","pDelta":"Delta","pGamma":"Gamma","pIV":"IV","pRho":"Rho","pTheta":"Theta","pVega":"Vega"},"rows":[{"cDelta":-0.00865,"cGamma":0.00275,"cIV":0,"cRho":-0.00005,"cTheta":-0.10168,"cVega":0.00261,"pDelta":0,"pGamma":0,"pIV":0,"pRho":0,"pTheta":0,"pVega":0,"strike":195,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529p00195000"},{"cDelta":0.96916,"cGamma":0.00635,"cIV":0,"cRho":0.00509,"cTheta":-0.40232,"cVega":0.00775,"pDelta":-0.00865,"pGamma":0.00275,"pIV":0,"pRho":-0.00005,"pTheta":-0.10168,"pVega":0.00261,"strike":195,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529c00195000"},{"cDelta":-0.00972,"cGamma":0.00345,"cIV":0,"cRho":-0.00006,"cTheta":-0.09909,"cVega":0.0029,"pDelta":0,"pGamma":0,"pIV":0,"pRho":0,"pTheta":0,"pVega":0,"strike":197.5,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529p00197500"}]}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:43.359Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:43.359Z","provider":"nasdaq","route":"quote_options_greeks","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_options_greeks requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_options_greeks"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_options_greeks"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/options/most-active":{"get":{"tags":["Options"],"operationId":"getQuoteOptionsMostActive","summary":"Most Active Options","description":"Most-active Nasdaq options for one symbol.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Most active options response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteOptionsMostActiveResponse"},"examples":{"success":{"summary":"Quote Options Most Active success","value":{"data":{"data":{"pageTitle":"NVDA Most Active Options","tableDataCalls":{"tableData":{"asOf":null,"headers":{"ask":"Ask","bid":"Bid","callPut":"Call","change":"Change","expiryDate":"Exp. Date","last":"Last","openINT":"Open Int","pctChange":"% Change","strike":"Strike","volume":"Volume"},"rows":[{"ask":1.38,"bid":1.36,"callPut":"Call","change":"-0.15","expiryDate":"May 29, 2026","last":"1.37","openINT":"41043","pctChange":"-9.8684","strike":215,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529c00215000","volume":302268},{"ask":0.26,"bid":0.24,"callPut":"Call","change":"-0.25","expiryDate":"May 29, 2026","last":"0.25","openINT":"57137","pctChange":"-50","strike":220,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529c00220000","volume":209037},{"ask":0.62,"bid":0.61,"callPut":"Call","change":"-0.26","expiryDate":"May 29, 2026","last":"0.61","openINT":"30990","pctChange":"-29.8851","strike":217.5,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529c00217500","volume":162588}]},"title":"Most Active Calls","type":"Calls"},"tableDataLeaps":{"tableData":{"asOf":null,"headers":{"ask":"Ask","bid":"Bid","callPut":"Call or Put","change":"Change","expiryDate":"Exp. Date","last":"Last","openINT":"Open Int","pctChange":"% Change","strike":"Strike","volume":"Volume"},"rows":[{"ask":25.25,"bid":25,"callPut":"Put","change":"-0.9","expiryDate":"Jan 21, 2028","last":"25.15","openINT":"12621","pctChange":"-3.4549","strike":180,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--280121p00180000","volume":1531},{"ask":40.4,"bid":39.8,"callPut":"Put","change":"-1.95","expiryDate":"Jun 17, 2027","last":"39.65","openINT":"1061","pctChange":"-4.6875","strike":225,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--270617p00225000","volume":971},{"ask":22.6,"bid":22.25,"callPut":"Put","change":"-0.54","expiryDate":"Jun 17, 2027","last":"22.46","openINT":"6500","pctChange":"-2.3478","strike":190,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--270617p00190000","volume":957}]},"title":"Most Active LEAPS","type":"LEAPS"},"tableDataPuts":{"tableData":{"asOf":null,"headers":{"ask":"Ask","bid":"Bid","callPut":"Put","change":"Change","expiryDate":"Exp. Date","last":"Last","openINT":"Open Int","pctChange":"% Change","strike":"Strike","volume":"Volume"},"rows":[{"ask":0.36,"bid":0.35,"callPut":"Put","change":"-0.98","expiryDate":"May 29, 2026","last":"0.35","openINT":"30922","pctChange":"-73.6842","strike":210,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529p00210000","volume":74072},{"ask":0.9,"bid":0.89,"callPut":"Put","change":"-1.47","expiryDate":"May 29, 2026","last":"0.89","openINT":"12970","pctChange":"-62.2881","strike":212.5,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529p00212500","volume":64275},{"ask":0.15,"bid":0.14,"callPut":"Put","change":"-0.58","expiryDate":"May 29, 2026","last":"0.15","openINT":"23795","pctChange":"-79.4521","strike":207.5,"url":"/market-activity/stocks/nvda/option-chain/call-put-options/nvda--260529p00207500","volume":36990}]},"title":"Most Active Puts","type":"Puts"}},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:44.458Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:44.458Z","provider":"nasdaq","route":"quote_options_most_active","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_options_most_active requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_options_most_active"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_options_most_active"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/realtime-trades":{"get":{"tags":["Quotes"],"operationId":"getQuoteRealtimeTrades","summary":"Realtime Trades","description":"Recent realtime trade rows for one Nasdaq symbol when Nasdaq publishes them.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Realtime trades response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRealtimeTradesResponse"},"examples":{"success":{"summary":"Quote Realtime Trades success","value":{"data":{"data":{"description":{"message":"*Today’s High/Low is only updated during regular trading hours; and does not include trades occurring in pre-market or after-hours.","url":null},"headers":null,"limit":50,"message":["This page refreshes every 30 seconds.","Data last updated May 28, 2026 04:59 PM ET"],"offset":0,"rows":[],"symbol":"tsla","topTable":{"asOf":null,"headers":{"fiftyTwoWeekHighLow":"52 Week High / Low","nlsVolume":"Nasdaq Last Sale (NLS) Plus Volume","previousClose":"Previous Close","todayHighLow":"Today's High / Low*"},"rows":[{"fiftyTwoWeekHighLow":"$498.83/$273.21","nlsVolume":"32,190,941","previousClose":"$440.36","todayHighLow":"$443.96/$436.30"}]},"totalRecords":0},"message":"Real-Time trades not available","status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:44.904Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:44.904Z","provider":"nasdaq","route":"quote_realtime_trades","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_realtime_trades requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_realtime_trades"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_realtime_trades"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/short-interest":{"get":{"tags":["Quotes"],"operationId":"getQuoteShortInterest","summary":"Short Interest","description":"Short-interest rows and summary data for one Nasdaq symbol.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Short interest response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteShortInterestResponse"},"examples":{"success":{"summary":"Quote Short Interest success","value":{"data":{"data":{"shortInterestTable":{"headers":{"avgDailyShareVolume":"Avg. Daily Share Volume","daysToCover":"Days to Cover","interest":"Short Interest","settlementDate":"Settlement Date"},"rows":[{"avgDailyShareVolume":"58,768,194","daysToCover":1.279447,"interest":"75,190,815","settlementDate":"05/15/2026"},{"avgDailyShareVolume":"63,433,412","daysToCover":1.208717,"interest":"76,673,071","settlementDate":"04/30/2026"},{"avgDailyShareVolume":"70,796,421","daysToCover":1.004386,"interest":"71,106,902","settlementDate":"04/15/2026"}]},"symbol":"tsla"},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:45.277Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:45.277Z","provider":"nasdaq","route":"quote_short_interest","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_short_interest requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_short_interest"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_short_interest"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quote/{symbol}/summary":{"get":{"tags":["Quotes"],"operationId":"getQuoteSummary","summary":"Quote Summary","description":"Current quote summary for one Nasdaq symbol, including summary data, bid/ask, key stats, and related table fields when available.","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Ticker or fund symbol, for example AAPL or FXAIX."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Quote summary response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteSummaryResponse"},"examples":{"success":{"summary":"Quote Summary success","value":{"data":{"data":{"additionalData":null,"assetClass":"STOCKS","bidAsk":{"Ask * Size":{"label":"Ask * Size","value":"$312.34 * 500"},"Bid * Size":{"label":"Bid * Size","value":"$312.20 * 112"}},"summaryData":{"AnnualizedDividend":{"label":"Annualized Dividend","value":"$1.08"},"AverageVolume":{"label":"Average Volume","value":"44,768,712"},"DividendPaymentDate":{"label":"Dividend Pay Date","value":"May 14, 2026"},"ExDividendDate":{"label":"Ex Dividend Date","value":"May 11, 2026"},"Exchange":{"label":"Exchange","value":"NASDAQ-GS"},"FiftTwoWeekHighLow":{"label":"52 Week High/Low","value":"$313.26/$195.07"},"Industry":{"label":"Industry","value":"Computer Manufacturing"},"MarketCap":{"label":"Market Cap","value":"4,589,945,623,560"},"OneYrTarget":{"label":"1 Year Target","value":"$310.00"},"PreviousClose":{"label":"Previous Close","value":"$310.85"},"Sector":{"label":"Sector","value":"Technology"},"ShareVolume":{"label":"Share Volume","value":"47,382,722.782616"},"TodayHighLow":{"label":"Today's High/Low","value":"$312.76/$309.57"},"Yield":{"label":"Current Yield","value":"0.35%"}},"symbol":"AAPL"},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:45.725Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:45.725Z","provider":"nasdaq","route":"quote_summary","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_summary requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_summary"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_summary"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/quotes/watchlist":{"get":{"tags":["Quotes"],"operationId":"getQuoteWatchlist","summary":"Watchlist Quotes","description":"Current quote rows for one or more watchlist symbols.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"symbols","in":"query","required":true,"schema":{"type":"string"},"description":"Comma-separated symbols. Aliases: symbol, ticker, and tickers."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Watchlist quotes response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteWatchlistResponse"},"examples":{"success":{"summary":"Quote Watchlist success","value":{"data":{"data":[{"assetClass":"STOCKS","companyName":"Apple Inc. Common Stock","deltaIndicator":"down","lastSalePrice":"$312.2601","lastTradeTimestamp":"May 28, 2026 4:59 PM ET","lastTradeTimestampDateTime":"2026-05-28T16:59:46.2325264-04:00","marketStatus":"After Hours","netChange":"-0.2499","openingPrice":308.33,"percentageChange":"-0.08%","previousClosePrice":308.33,"symbol":"AAPL","volume":"50,431,118"},{"assetClass":"STOCKS","companyName":"Microsoft Corporation Common Stock","deltaIndicator":"up","lastSalePrice":"$428.00","lastTradeTimestamp":"May 28, 2026 4:59 PM ET","lastTradeTimestampDateTime":"2026-05-28T16:59:46.2325762-04:00","marketStatus":"After Hours","netChange":"+1.01","openingPrice":411,"percentageChange":"+0.24%","previousClosePrice":416.03,"symbol":"MSFT","volume":"28,901,596"},{"assetClass":"STOCKS","companyName":"NVIDIA Corporation Common Stock","deltaIndicator":"down","lastSalePrice":"$213.999","lastTradeTimestamp":"May 28, 2026 4:59 PM ET","lastTradeTimestampDateTime":"2026-05-28T16:59:46.2326016-04:00","marketStatus":"After Hours","netChange":"-0.251","openingPrice":214,"percentageChange":"-0.12%","previousClosePrice":214.86,"symbol":"NVDA","volume":"167,603,468"}],"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:46.267Z","max_age_seconds":15,"stale":false},"generated_at":"2026-05-28T20:59:46.267Z","provider":"nasdaq","route":"quote_watchlist","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"quote_watchlist requires a symbol path segment or symbol=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_watchlist"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"quote_watchlist"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/screener/{type}":{"get":{"tags":["Screeners"],"operationId":"getScreener","summary":"Screener","description":"Nasdaq screener rows for a screener type path parameter.","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string"},"description":"Screener type."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"asset_class","in":"query","required":false,"schema":{"type":"string","examples":["stocks","etf","mutualfunds"]},"description":"Asset class alias. Maps to Nasdaq assetclass/assetClass. Common values include stocks, etf, mutualfunds, and indexes."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Screener response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenerResponse"},"examples":{"success":{"summary":"Screener success","value":{"data":{"data":{"asof":"Last price as of Sep 26, 2026","filters":null,"table":{"asOf":null,"headers":{"lastsale":"Last Sale","marketCap":"Market Cap","name":"Name","netchange":"Net Change","pctchange":"% Change","symbol":"Symbol"},"rows":[{"lastsale":"$214.25","marketCap":"5,184,850,000,000","name":"NVIDIA Corporation Common Stock","netchange":"1.65","pctchange":"0.776%","symbol":"NVDA","url":"/market-activity/stocks/nvda"},{"lastsale":"$390.13","marketCap":"4,726,815,080,000","name":"Alphabet Inc. Class A Common Stock","netchange":"1.30","pctchange":"0.334%","symbol":"GOOGL","url":"/market-activity/stocks/googl"},{"lastsale":"$386.12","marketCap":"4,678,229,920,000","name":"Alphabet Inc. Class C Capital Stock","netchange":"1.29","pctchange":"0.335%","symbol":"GOOG","url":"/market-activity/stocks/goog"}]},"totalrecords":7165},"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:46.699Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:46.699Z","provider":"nasdaq","route":"screener","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"Invalid request parameters."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"screener"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"screener"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}},"/v1/search":{"get":{"tags":["Search"],"operationId":"getSearch","summary":"Symbol Search","description":"Search Nasdaq symbols, companies, ETFs, funds, and other instruments by text query.","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available. Cached reads remain the default."},{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Search query. Aliases: query and term."},{"name":"X-Nfin-Contact","in":"header","required":false,"schema":{"type":"string"},"description":"Optional contact value for support and abuse analysis. This does not authenticate the request."},{"name":"X-Nfin-Key","in":"header","required":false,"schema":{"type":"string"},"description":"API key created through the email verification flow. Authorization: Bearer is also supported."}],"responses":{"200":{"description":"Symbol search response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"examples":{"success":{"summary":"Search success","value":{"data":{"data":[{"asset":"STOCKS","count":"","exchange":"NASDAQ-GS","flag":"","industry":"Technology Hardware & Equipment","mrktCategory":"NGS","name":"Apple Inc. Common Stock","nasdaq100":"Y","region":"North America","score":null,"subCategory":"Common Stock","symbol":"AAPL"},{"asset":"STOCKS","count":"","exchange":"NYSE","flag":"","industry":"Real Estate","mrktCategory":"","name":"Apple Hospitality REIT, Inc. Common Shares","nasdaq100":null,"region":"North America","score":null,"subCategory":"Common Shares","symbol":"APLE"},{"asset":"ETF","count":"","exchange":"BAT","flag":"","industry":"","mrktCategory":"","name":"T-Rex 2X Long Apple Daily Target ETF","nasdaq100":"","region":null,"score":null,"subCategory":"","symbol":"AAPX"}],"message":null,"status":{"bCodeMessage":null,"developerMessage":null,"rCode":200}},"meta":{"freshness":{"as_of":"2026-05-28T20:59:47.114Z","max_age_seconds":300,"stale":false},"generated_at":"2026-05-28T20:59:47.114Z","provider":"nasdaq","route":"search","status":"ok"}}}}}}},"400":{"description":"Invalid request parameters.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"bad_request":{"summary":"Invalid request","value":{"ok":false,"error":{"code":"bad_request","message":"search requires q=, query=, or term=."}}}}}}},"401":{"description":"API key is invalid, inactive, expired, or missing for the requested operation.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_api_key":{"summary":"The supplied nfin API key is not valid.","value":{"ok":false,"error":{"code":"invalid_api_key","message":"The supplied nfin API key is not valid."}}},"api_key_inactive":{"summary":"API key is no longer active. Create or rotate a key to continue.","value":{"ok":false,"error":{"code":"api_key_inactive","message":"API key is no longer active. Create or rotate a key to continue."}}}}}}},"404":{"description":"Unknown route or endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"not_found":{"summary":"Unknown route","value":{"ok":false,"error":{"code":"not_found","message":"Unknown nfin route."}}},"endpoint_not_found":{"summary":"Unknown endpoint","value":{"ok":false,"error":{"code":"endpoint_not_found","message":"Endpoint is not available in nfin v1."}}}}}}},"405":{"description":"HTTP method is not allowed for this endpoint.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"method_not_allowed":{"summary":"Method not allowed","value":{"ok":false,"error":{"code":"method_not_allowed","message":"nfin v1 exposes read-only GET routes."},"allow":["GET"]}}}}}},"429":{"description":"Request limit exceeded. Retry-After is included when the client should wait before retrying.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitResponse"},"examples":{"rate_limited":{"summary":"Request limit exceeded","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"anonymous","retry_after_seconds":42,"upgrade":{"message":"Verify an email to create an API key with higher free limits.","request_otp":"/v1/auth/otp","verify_otp":"/v1/auth/verify","api_key_header":"Authorization: Bearer <api_key>"}}}},"enterprise_limit":{"summary":"API key needs higher custom limits","value":{"ok":false,"error":{"code":"rate_limited","message":"Request budget exhausted."},"rate_limit":{"scope":"request","tier":"key","retry_after_seconds":42,"upgrade":{"message":"Request Enterprise/custom limits for this API key.","limit_request":"/v1/auth/limits/requests","api_key_header":"Authorization: Bearer <api_key>","support_email":"sam@nfin.dev"}}}}}}}},"502":{"description":"The Nasdaq data request could not be completed.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"data_request_failed":{"summary":"Data request failed","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"search"},"error":{"code":"data_request_failed","message":"The service could not complete the Nasdaq request. Retry shortly."}}}}}}},"503":{"description":"The service is temporarily unavailable or busy.","headers":{"x-nfin-error-code":{"description":"Stable nfin error code.","schema":{"type":"string"}},"x-nfin-error-message":{"description":"Short human-readable error message.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"service_busy":{"summary":"Service busy","value":{"ok":false,"error":{"code":"service_busy","message":"The service is temporarily busy. Retry shortly."}}},"data_service_unavailable":{"summary":"Data service unavailable","value":{"ok":false,"meta":{"provider":"nasdaq","generated_at":"2026-05-28T18:00:00.000Z","route":"search"},"error":{"code":"data_service_unavailable","message":"The service is temporarily unavailable. Retry shortly."}}}}}}}}}}},"externalDocs":{"description":"Nasdaq source docs","url":"https://bluedoor.sh/apis/financial-data/sources/nfin"}}