{"openapi":"3.1.0","info":{"title":"Stooq Adapter API","version":"0.1.0","description":"Stooq adapter contract for bluedoor.\n\nStooq-backed static and CSV-style market data routes for quotes, historical data, news, and symbol lookup.\n\nStooq source API for bluedoor Financial Data.\nStable static/CSV market data source with low-friction historical and quote access.\nCoverage: CSV quotes; Search; RSS; Market stats and economic calendar.\nGenerated from the live source contract and representative live API responses on 2026-06-07T01:30:59.456Z.","x-bluedoor-adapter":{"slug":"stooq","source_id":"stfin","upstream":"stooq.com","docs_url":"https://bluedoor.sh/adapters/stooq/docs"}},"servers":[{"url":"https://api.bluedoor.sh/adapters/stooq","description":"bluedoor adapter namespace"},{"url":"https://api.stfin.bluedoor.sh","description":"Current source API host"}],"externalDocs":{"description":"Stooq adapter docs","url":"https://bluedoor.sh/adapters/stooq/docs"},"tags":[{"name":"Calendars"},{"name":"News"},{"name":"Quotes"}],"paths":{"/v1/constituents":{"get":{"operationId":"stfin_get_constituents","summary":"Constituents","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_constituentsResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"constituents","contract":"html_constituents:q_i","transport":"html","ttl_seconds":3600,"generated_at":"2026-06-07T01:28:13.204Z"},"data":{"title":"","constituents":[],"empty_reason":null,"source_table_count":0,"source_headers":[],"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns constituents with source-native fields and identifiers.","x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"^spx","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/constituents?symbol=^spx","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:09.996Z"}},"/v1/corporate-actions":{"get":{"operationId":"stfin_get_corporate_actions","summary":"Corporate actions","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_corporate_actionsResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"corporate_actions","contract":"html_corporate_actions:q_m","transport":"html","ttl_seconds":3600,"generated_at":"2026-06-07T01:28:14.676Z"},"data":{"title":"","actions":[],"empty_reason":null,"source_table_count":0,"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns corporate actions with source-native dates, amounts, and security identifiers.","x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"aapl.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/corporate-actions?symbol=aapl.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:10.544Z"}},"/v1/group-quotes":{"get":{"operationId":"stfin_get_group_quotes","summary":"Groups","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_group_quotesResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"group_quotes","contract":"html_group_quotes:t_group","transport":"html","ttl_seconds":300,"generated_at":"2026-06-07T01:35:11.972Z"},"data":{"title":"","sections":[],"quotes":[],"empty_reason":null,"source_table_count":0,"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns groups with source-native price, change, volume, and instrument fields.","tags":["Quotes"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"group","in":"query","required":false,"schema":{"type":"string"},"example":"main_indices","description":"Query parameter `group`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/group-quotes?group=main_indices","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:12.230Z"}},"/v1/market-stats":{"get":{"operationId":"stfin_get_market_stats","summary":"Market stats","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_market_statsResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"market_stats","contract":"html_market_stats:t_s","transport":"html","ttl_seconds":300,"generated_at":"2026-06-07T01:35:13.426Z"},"data":{"title":"","market_statistics":null,"ranked_sections":[],"empty_reason":null,"source_table_count":0,"source_tables":[],"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns market stats with source-native fields and identifiers.","x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"market","in":"query","required":false,"schema":{"type":"string"},"example":"us","description":"Query parameter `market`."},{"name":"view","in":"query","required":false,"schema":{"type":"string"},"example":"summary","description":"Query parameter `view`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/market-stats?market=us&view=summary","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:13.664Z"}},"/v1/news":{"get":{"operationId":"stfin_get_news","summary":"Headlines","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_newsResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"news","contract":"html_news:n","transport":"html","ttl_seconds":300,"generated_at":"2026-06-07T01:35:14.402Z"},"data":{"title":"","articles":[],"source_table_count":0,"source_tables":[],"empty_reason":null,"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns headlines with headline, timestamp, symbol, and source fields where available.","tags":["News"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string"},"example":"business","description":"Query parameter `category`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/news?category=business","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:14.673Z"}},"/v1/profile":{"get":{"operationId":"stfin_get_profile","summary":"Profile","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_profileResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"profile","contract":"html_profile:q_p","transport":"html","ttl_seconds":3600,"generated_at":"2026-06-07T01:28:18.516Z"},"data":{"title":"","page":null,"messages":[],"no_data":false,"related_links":[],"empty_reason":null,"source_table_count":0,"source_tables":[],"text_preview":"","content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns profile with source-native fields and identifiers.","x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"aapl.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/profile?symbol=aapl.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:15.266Z"}},"/v1/quote-page":{"get":{"operationId":"stfin_get_quote_page","summary":"Quote page","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_quote_pageResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"quote_page","contract":"html_quote_page:q","transport":"html","ttl_seconds":60,"generated_at":"2026-06-07T01:35:15.966Z"},"data":{"title":"","page":null,"summary":{"last_price":null,"currency":null,"observed_at":null,"change":null,"change_percent":null,"day_high":null,"day_low":null,"fifty_two_week_change":null,"fifty_two_week_change_percent":null,"fifty_two_week_high":null,"fifty_two_week_low":null,"open":null,"previous_close":null,"bid":null,"ask":null,"volume":null,"turnover":null,"open_interest":null,"trades":null,"returns":{},"operations":[],"source_pairs":[]},"autoquote":null,"autoquote_symbol":null,"source_autoquote_fields":{},"empty_reason":null,"source_table_count":0,"source_tables":[],"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns quote page with source-native price, change, volume, and instrument fields.","tags":["Quotes"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"spy.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/quote-page?symbol=spy.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:16.197Z"}},"/v1/quotes":{"get":{"operationId":"stfin_get_quotes","summary":"Snapshots","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_quotesResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"quotes","contract":"quote_list_csv:q_l","transport":"csv","ttl_seconds":60,"generated_at":"2026-06-07T01:35:16.939Z"},"data":{"quotes":[{"this_site_requires_javascript_to_verify_your_browser_please_enable_javascript_and_reload":"(async()=>{const c=AAAAAGokytRKCFBxmYeXYfn0lWTIMC_WbKL1mlzizvTuK0kVNGPGofgur4I"},{"this_site_requires_javascript_to_verify_your_browser_please_enable_javascript_and_reload":null}],"source_headers":["This site requires JavaScript to verify your browser. Please enable JavaScript and reload."]}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns snapshots with source-native price, change, volume, and instrument fields.","tags":["Quotes"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbols","in":"query","required":false,"schema":{"type":"string"},"example":"spy.us,aapl.us","description":"Query parameter `symbols`."},{"name":"fields","in":"query","required":false,"schema":{"type":"string"},"example":"sd2t2ohlcv","description":"Query parameter `fields`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/quotes?symbols=spy.us,aapl.us&fields=sd2t2ohlcv","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:17.191Z"}},"/v1/rss":{"get":{"operationId":"stfin_get_rss","summary":"RSS feed","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_rssResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"rss","contract":"news_rss:rss","transport":"xml","ttl_seconds":300,"generated_at":"2026-06-07T01:35:19.003Z"},"data":{"title":"Stooq - Wiadomości Biznes","items":[{"title":"Boeing może zapewnić Chinom wsparcie posprzedażowe dla zamówienia na 200 samolotów, twierdzi przedstawiciel firmy","link":"https://stooq.pl/n/?f=1763394","guid":"","published_at":"Sun, 07 Jun 2026 00:27:27 GMT","description":""},{"title":"Konsorcjum z Bouygues podpisuje umowę wartą 23,44 mld USD na przejęcie SFR od Altice France","link":"https://stooq.pl/n/?f=1763393","guid":"","published_at":"Sun, 07 Jun 2026 00:19:00 GMT","description":""},{"title":"Kuba - Pięć firm zamknęło w czerwcu hotele na wyspie; łącznie blisko 100 obiektów","link":"https://stooq.pl/n/?f=1763392","guid":"","published_at":"Sun, 07 Jun 2026 00:01:26 GMT","description":""}]}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns RSS feed with source-native fields and identifiers.","x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"feed","in":"query","required":false,"schema":{"type":"string"},"example":"b","description":"Query parameter `feed`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/rss?feed=b","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:19.270Z"}},"/v1/search":{"get":{"operationId":"stfin_get_search","summary":"Search","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_searchResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"search","contract":"symbol_search:cmp","transport":"javascript","ttl_seconds":300,"generated_at":"2026-06-07T01:35:20.013Z"},"data":{"suggestions":[{"symbol":"This site requires JavaScript to verify your browser. Please enable JavaScript and reload. (async()=>{const c=\"AAAAAGokytaSNcQio7vAIEY874JRA-57bKL1myezFD7kGIgBcOhe8QsE2V8\",d=4,t=\"0\".repeat(d),e=new TextEncoder;let n=0;while(1){const h=await crypto.subtle.digest(\"SHA-256\",e.encode(c+n)),x=Array.from(new Uint8Array(h)).m...","name":"","exchange":"","last":null,"change_percent":null,"asset_type_code":null}]}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Searches Stooq data and returns source-native matches and identifiers.","x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"example":"aapl","description":"Query parameter `q`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/search?q=aapl","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:20.262Z"}},"/v1/ticker-rank":{"get":{"operationId":"stfin_get_ticker_rank","summary":"Ticker rank","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_ticker_rankResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"ticker_rank","contract":"html_ticker_rank:t_tr","transport":"html","ttl_seconds":300,"generated_at":"2026-06-07T01:35:21.019Z"},"data":{"title":"","rankings":[],"empty_reason":null,"source_table_count":0,"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns ticker rank with source-native fields and identifiers.","x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"spy.us","description":"Query parameter `symbol`."},{"name":"market","in":"query","required":false,"schema":{"type":"string"},"example":"us","description":"Query parameter `market`."},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"example":"1","description":"Query parameter `page`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/ticker-rank?symbol=spy.us&market=us&page=1","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:21.246Z"}},"/v1/calendar/company":{"get":{"operationId":"stfin_get_calendar_company","summary":"Company events","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_calendar_companyResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"company_calendar","contract":"html_company_calendar:kalendarium_c","transport":"html","ttl_seconds":300,"generated_at":"2026-06-07T01:35:21.954Z"},"data":{"title":"","days":[],"events":[],"empty_reason":null,"no_data":false,"source_table_count":0,"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns company events with source-native dates, event fields, and pagination where available.","tags":["Calendars"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"section","in":"query","required":false,"schema":{"type":"string"},"example":"all","description":"Query parameter `section`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/calendar/company?section=all","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:22.192Z"}},"/v1/calendar/economic":{"get":{"operationId":"stfin_get_calendar_economic","summary":"Economic events","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_calendar_economicResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"economic_calendar","contract":"html_calendar:kalendarium","transport":"html","ttl_seconds":300,"generated_at":"2026-06-07T01:35:22.975Z"},"data":{"title":"","time_zone":null,"days":[],"events":[],"empty_reason":null,"source_table_count":0,"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns economic events with source-native dates, event fields, and pagination where available.","tags":["Calendars"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string"},"example":"us","description":"Query parameter `region`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/calendar/economic?region=us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:23.251Z"}},"/v1/news/symbol":{"get":{"operationId":"stfin_get_news_symbol","summary":"Symbol news","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_news_symbolResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"symbol_news","contract":"html_symbol_news:q_n","transport":"html","ttl_seconds":300,"generated_at":"2026-06-07T01:35:23.974Z"},"data":{"title":"","articles":[],"source_table_count":0,"source_tables":[],"empty_reason":null,"content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns symbol news with headline, timestamp, symbol, and source fields where available.","tags":["News"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"aapl.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/news/symbol?symbol=aapl.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:24.198Z"}},"/v1/quote/calendar":{"get":{"operationId":"stfin_get_quote_calendar","summary":"Calendar","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_quote_calendarResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"quote_calendar","contract":"html_quote_subpage:q_c","transport":"html","ttl_seconds":3600,"generated_at":"2026-06-07T01:28:28.422Z"},"data":{"title":"","page":null,"messages":[],"no_data":false,"related_links":[],"empty_reason":null,"source_table_count":0,"source_tables":[],"text_preview":"","content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns calendar with source-native price, change, volume, and instrument fields.","tags":["Quotes"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"aapl.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/quote/calendar?symbol=aapl.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:24.737Z"}},"/v1/quote/earnings":{"get":{"operationId":"stfin_get_quote_earnings","summary":"Earnings","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_quote_earningsResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"quote_earnings","contract":"html_quote_subpage:q/e","transport":"html","ttl_seconds":3600,"generated_at":"2026-06-07T01:28:29.370Z"},"data":{"title":"","page":null,"messages":[],"no_data":false,"related_links":[],"empty_reason":null,"source_table_count":0,"source_tables":[],"text_preview":"","content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns earnings with source-native price, change, volume, and instrument fields.","tags":["Quotes"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"aapl.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/quote/earnings?symbol=aapl.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:25.307Z"}},"/v1/quote/financials":{"get":{"operationId":"stfin_get_quote_financials","summary":"Financials","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_quote_financialsResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"quote_financials","contract":"html_quote_subpage:q_f","transport":"html","ttl_seconds":3600,"generated_at":"2026-06-07T01:28:30.381Z"},"data":{"title":"","page":null,"messages":[],"no_data":false,"related_links":[],"empty_reason":null,"source_table_count":0,"source_tables":[],"text_preview":"","content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns financials with source-native price, change, volume, and instrument fields.","tags":["Quotes"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"aapl.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/quote/financials?symbol=aapl.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:25.812Z"}},"/v1/quote/holders":{"get":{"operationId":"stfin_get_quote_holders","summary":"Holders","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_quote_holdersResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"quote_holders","contract":"html_quote_subpage:q_h","transport":"html","ttl_seconds":3600,"generated_at":"2026-06-07T01:28:31.339Z"},"data":{"title":"","page":null,"messages":[],"no_data":false,"related_links":[],"empty_reason":null,"source_table_count":0,"source_tables":[],"text_preview":"","content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns holders with source-native price, change, volume, and instrument fields.","tags":["Quotes"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"aapl.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/quote/holders?symbol=aapl.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:26.359Z"}},"/v1/quote/ratios":{"get":{"operationId":"stfin_get_quote_ratios","summary":"Ratios","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/stfin_get_quote_ratiosResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"stooq","route":"quote_ratios","contract":"html_quote_subpage:q_g","transport":"html","ttl_seconds":3600,"generated_at":"2026-06-07T01:28:32.430Z"},"data":{"title":"","page":null,"messages":[],"no_data":false,"related_links":[],"empty_reason":null,"source_table_count":0,"source_tables":[],"text_preview":"","content_type":"text/html; charset=utf-8"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin unavailable or circuit open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"StfinApiKey":[]}],"description":"Returns ratios with source-native price, change, volume, and instrument fields.","tags":["Quotes"],"x-source-api":"stfin","x-source-name":"Stooq","x-source-upstream":"stooq.com","parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string"},"example":"spy.us","description":"Query parameter `symbol`."},{"name":"x-stfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"x-docs-example-url":"https://api.stfin.bluedoor.sh/v1/quote/ratios?symbol=spy.us","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:26.898Z"}}},"components":{"securitySchemes":{"ContactEmail":{"type":"apiKey","in":"header","name":"X-Stfin-Contact"},"BearerAuth":{"type":"http","scheme":"bearer","description":"API keys are available by emailing sam@bluedoor.sh."},"StfinApiKey":{"type":"apiKey","in":"header","name":"X-Stfin-Key"}},"schemas":{"ErrorEnvelope":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean","example":false},"error":{"type":"object","additionalProperties":true,"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true}}},"stfin_get_constituentsResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"constituents":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_headers":{"type":"array","items":{}},"content_type":{"type":"string"}},"required":["constituents","content_type","empty_reason","source_headers","source_table_count","title"]}},"required":["data","meta"]},"stfin_get_corporate_actionsResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"actions":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"content_type":{"type":"string"}},"required":["actions","content_type","empty_reason","source_table_count","title"]}},"required":["data","meta"]},"stfin_get_group_quotesResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"sections":{"type":"array","items":{}},"quotes":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"content_type":{"type":"string"}},"required":["content_type","empty_reason","quotes","sections","source_table_count","title"]}},"required":["data","meta"]},"stfin_get_market_statsResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"market_statistics":{"nullable":true},"ranked_sections":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"content_type":{"type":"string"}},"required":["content_type","empty_reason","market_statistics","ranked_sections","source_table_count","source_tables","title"]}},"required":["data","meta"]},"stfin_get_newsResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"articles":{"type":"array","items":{}},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"empty_reason":{"nullable":true},"content_type":{"type":"string"}},"required":["articles","content_type","empty_reason","source_table_count","source_tables","title"]}},"required":["data","meta"]},"stfin_get_profileResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"page":{"nullable":true},"messages":{"type":"array","items":{}},"no_data":{"type":"boolean"},"related_links":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"text_preview":{"type":"string"},"content_type":{"type":"string"}},"required":["content_type","empty_reason","messages","no_data","page","related_links","source_table_count","source_tables","text_preview","title"]}},"required":["data","meta"]},"stfin_get_quote_pageResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"page":{"nullable":true},"summary":{"type":"object","additionalProperties":true,"properties":{"last_price":{"nullable":true},"currency":{"nullable":true},"observed_at":{"nullable":true},"change":{"nullable":true},"change_percent":{"nullable":true},"day_high":{"nullable":true},"day_low":{"nullable":true},"fifty_two_week_change":{"nullable":true},"fifty_two_week_change_percent":{"nullable":true},"fifty_two_week_high":{"nullable":true},"fifty_two_week_low":{"nullable":true},"open":{"nullable":true},"previous_close":{"nullable":true},"bid":{"nullable":true},"ask":{"nullable":true},"volume":{"nullable":true},"turnover":{"nullable":true},"open_interest":{"nullable":true},"trades":{"nullable":true},"returns":{"type":"object","additionalProperties":true,"properties":{}},"operations":{"type":"array","items":{}},"source_pairs":{"type":"array","items":{}}},"required":["ask","bid","change","change_percent","currency","day_high","day_low","fifty_two_week_change","fifty_two_week_change_percent","fifty_two_week_high","fifty_two_week_low","last_price","observed_at","open","open_interest","operations","previous_close","returns","source_pairs","trades","turnover","volume"]},"autoquote":{"nullable":true},"autoquote_symbol":{"nullable":true},"source_autoquote_fields":{"type":"object","additionalProperties":true,"properties":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"content_type":{"type":"string"}},"required":["autoquote","autoquote_symbol","content_type","empty_reason","page","source_autoquote_fields","source_table_count","source_tables","summary","title"]}},"required":["data","meta"]},"stfin_get_quotesResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"quotes":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"this_site_requires_javascript_to_verify_your_browser_please_enable_javascript_and_reload":{"oneOf":[{"type":"string"},{"nullable":true}]}},"required":["this_site_requires_javascript_to_verify_your_browser_please_enable_javascript_and_reload"]}},"source_headers":{"type":"array","items":{"type":"string"}}},"required":["quotes","source_headers"]}},"required":["data","meta"]},"stfin_get_rssResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"items":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"link":{"type":"string"},"guid":{"type":"string"},"published_at":{"type":"string"},"description":{"type":"string"}},"required":["description","guid","link","published_at","title"]}}},"required":["items","title"]}},"required":["data","meta"]},"stfin_get_searchResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"suggestions":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"name":{"type":"string"},"exchange":{"type":"string"},"last":{"nullable":true},"change_percent":{"nullable":true},"asset_type_code":{"nullable":true}},"required":["asset_type_code","change_percent","exchange","last","name","symbol"]}}},"required":["suggestions"]}},"required":["data","meta"]},"stfin_get_ticker_rankResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"rankings":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"content_type":{"type":"string"}},"required":["content_type","empty_reason","rankings","source_table_count","title"]}},"required":["data","meta"]},"stfin_get_calendar_companyResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"days":{"type":"array","items":{}},"events":{"type":"array","items":{}},"empty_reason":{"nullable":true},"no_data":{"type":"boolean"},"source_table_count":{"type":"integer"},"content_type":{"type":"string"}},"required":["content_type","days","empty_reason","events","no_data","source_table_count","title"]}},"required":["data","meta"]},"stfin_get_calendar_economicResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"time_zone":{"nullable":true},"days":{"type":"array","items":{}},"events":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"content_type":{"type":"string"}},"required":["content_type","days","empty_reason","events","source_table_count","time_zone","title"]}},"required":["data","meta"]},"stfin_get_news_symbolResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"articles":{"type":"array","items":{}},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"empty_reason":{"nullable":true},"content_type":{"type":"string"}},"required":["articles","content_type","empty_reason","source_table_count","source_tables","title"]}},"required":["data","meta"]},"stfin_get_quote_calendarResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"page":{"nullable":true},"messages":{"type":"array","items":{}},"no_data":{"type":"boolean"},"related_links":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"text_preview":{"type":"string"},"content_type":{"type":"string"}},"required":["content_type","empty_reason","messages","no_data","page","related_links","source_table_count","source_tables","text_preview","title"]}},"required":["data","meta"]},"stfin_get_quote_earningsResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"page":{"nullable":true},"messages":{"type":"array","items":{}},"no_data":{"type":"boolean"},"related_links":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"text_preview":{"type":"string"},"content_type":{"type":"string"}},"required":["content_type","empty_reason","messages","no_data","page","related_links","source_table_count","source_tables","text_preview","title"]}},"required":["data","meta"]},"stfin_get_quote_financialsResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"page":{"nullable":true},"messages":{"type":"array","items":{}},"no_data":{"type":"boolean"},"related_links":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"text_preview":{"type":"string"},"content_type":{"type":"string"}},"required":["content_type","empty_reason","messages","no_data","page","related_links","source_table_count","source_tables","text_preview","title"]}},"required":["data","meta"]},"stfin_get_quote_holdersResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"page":{"nullable":true},"messages":{"type":"array","items":{}},"no_data":{"type":"boolean"},"related_links":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"text_preview":{"type":"string"},"content_type":{"type":"string"}},"required":["content_type","empty_reason","messages","no_data","page","related_links","source_table_count","source_tables","text_preview","title"]}},"required":["data","meta"]},"stfin_get_quote_ratiosResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"transport":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["contract","generated_at","provider","route","transport","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"title":{"type":"string"},"page":{"nullable":true},"messages":{"type":"array","items":{}},"no_data":{"type":"boolean"},"related_links":{"type":"array","items":{}},"empty_reason":{"nullable":true},"source_table_count":{"type":"integer"},"source_tables":{"type":"array","items":{}},"text_preview":{"type":"string"},"content_type":{"type":"string"}},"required":["content_type","empty_reason","messages","no_data","page","related_links","source_table_count","source_tables","text_preview","title"]}},"required":["data","meta"]}}},"x-generated-at":"2026-06-07T01:30:59.456Z","x-source-api":"stfin","x-source-base-url":"https://api.stfin.bluedoor.sh"}