{"openapi":"3.1.0","info":{"title":"tvfin TradingView API","version":"0.2.0","description":"Hosted TradingView data API with product-native routes for symbols, screeners, news, calendars, options, ideas, scripts, Pine metadata, and alerts."},"servers":[{"url":"https://api.tvfin.bluedoor.sh"}],"tags":[{"name":"Symbols","description":"Symbol search and instrument discovery."},{"name":"Screeners","description":"TradingView scanner queries and metadata."},{"name":"News","description":"Headlines and news flow."},{"name":"Calendar","description":"Economic calendar data."},{"name":"Events","description":"Earnings and dividend event tables."},{"name":"Options","description":"Option chains, IV, and strategy chart data."},{"name":"Ideas","description":"Public TradingView ideas."},{"name":"Scripts","description":"Public TradingView scripts."},{"name":"Pine","description":"Pine source utilities and reference metadata."},{"name":"Alerts","description":"Price-alert service status."},{"name":"Auth","description":"Email verification, API keys, and limit requests."},{"name":"System","description":"Service metadata."},{"name":"Advanced","description":"Raw source contract compatibility."}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Email-verified API key returned by /v1/auth/verify."},"TvfinKey":{"type":"apiKey","in":"header","name":"X-Tvfin-Key","description":"Alternative API-key header. Authorization: Bearer is also supported."}},"schemas":{"TvfinResponse":{"type":"object","required":["meta","data"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"description":"Endpoint-specific TradingView data payload."},"error":{"$ref":"#/components/schemas/TvfinError"}},"additionalProperties":true},"ResponseMeta":{"type":"object","required":["provider","route","status","generated_at"],"properties":{"provider":{"type":"string","enum":["tradingview"]},"route":{"type":"string"},"status":{"type":"string","enum":["ok","error"]},"generated_at":{"type":"string","format":"date-time"},"freshness":{"type":"object","properties":{"as_of":{"type":"string","format":"date-time"},"max_age_seconds":{"type":"integer","minimum":0},"stale":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":true},"ErrorResponse":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","const":false},"error":{"$ref":"#/components/schemas/TvfinError"}},"additionalProperties":true},"TvfinError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"additionalProperties":true},"HealthResponse":{"type":"object","required":["ok","name","version"],"properties":{"ok":{"type":"boolean"},"name":{"type":"string"},"version":{"type":"string"},"shipped_rest_contracts":{"type":"integer"},"shipped_websocket_methods":{"type":"integer"},"websocket_policy":{"type":"string"},"identity":{"type":"object","additionalProperties":true},"rate_limits":{"type":"object","additionalProperties":true}},"additionalProperties":true},"EndpointCatalogResponse":{"type":"object","required":["shipped_route_count","routes"],"properties":{"shipped_route_count":{"type":"integer"},"shipped_rest_contract_count":{"type":"integer"},"shipped_websocket_method_count":{"type":"integer"},"routes":{"type":"object","additionalProperties":true},"advanced":{"type":"object","additionalProperties":true}},"additionalProperties":true},"OpenApiDocument":{"type":"object","required":["openapi","info","paths"],"properties":{"openapi":{"type":"string"},"info":{"type":"object","additionalProperties":true},"servers":{"type":"array","items":{"type":"object","additionalProperties":true}},"paths":{"type":"object","additionalProperties":true}},"additionalProperties":true},"AuthResponse":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true},"error":{"$ref":"#/components/schemas/TvfinError"}},"additionalProperties":true},"AuthOtpRequest":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}},"additionalProperties":false},"AuthVerifyRequest":{"type":"object","required":["email","code"],"properties":{"email":{"type":"string","format":"email"},"code":{"type":"string"},"create_key":{"type":"boolean","default":true},"label":{"type":"string"}},"additionalProperties":false},"ApiKeyCreateRequest":{"type":"object","properties":{"label":{"type":"string"}},"additionalProperties":false},"LimitRequest":{"type":"object","properties":{"requested_rps":{"type":"integer","minimum":1},"requested_origin_rps":{"type":"integer","minimum":1},"use_case":{"type":"string"},"message":{"type":"string"}},"additionalProperties":false},"GenericTradingViewRequest":{"type":"object","description":"Endpoint-specific TradingView request payload. Prefer product route parameters where available.","additionalProperties":true},"ScannerRequest":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"string"}},"range":{"type":"array","items":{"type":"integer"},"minItems":2,"maxItems":2},"sort":{"type":"object","properties":{"sortBy":{"type":"string"},"sortOrder":{"type":"string","enum":["asc","desc"]}},"additionalProperties":true},"filter":{"type":"array","items":{"type":"object","additionalProperties":true}},"options":{"type":"object","additionalProperties":true}},"additionalProperties":true},"OptionsStrategyRequest":{"type":"object","properties":{"underlying":{"type":"string"},"legs":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":true},"PineSourceRequest":{"type":"object","required":["source"],"properties":{"source":{"type":"string"},"inputs":{"type":"string"}},"additionalProperties":true}}},"paths":{"/v1/auth/otp":{"post":{"tags":["Auth"],"summary":"Request Email Code","operationId":"requestAuthOtp","description":"Starts the email verification flow. tvfin sends a short-lived one-time code to the requested email address when email delivery is configured.","requestBody":{"required":false,"description":"Email address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOtpRequest"},"example":{"email":"you@example.com"}}}},"responses":{"200":{"description":"OTP request response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"api_key":"tvfin_live_example","management_token":"tvfin_mgmt_example"}}}}}}},"202":{"description":"Accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"accepted":true,"message":"Verification email queued."}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Unauthorized.","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key or management token is required."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}}}}},"/v1/auth/verify":{"post":{"tags":["Auth"],"summary":"Verify Email Code","operationId":"verifyAuthOtp","description":"Verifies an email one-time code and optionally creates an API key. Successful responses include a short-lived management token for key administration.","requestBody":{"required":false,"description":"Email verification code.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthVerifyRequest"},"example":{"email":"you@example.com","code":"123456","create_key":true,"label":"production"}}}},"responses":{"200":{"description":"OTP verification response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"api_key":"tvfin_live_example","management_token":"tvfin_mgmt_example"}}}}}}},"202":{"description":"Accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"accepted":true,"message":"Verification email queued."}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Unauthorized.","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key or management token is required."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}}}}},"/v1/auth/keys":{"get":{"tags":["Auth"],"summary":"List API Keys","operationId":"listApiKeys","description":"Lists API keys associated with the verified email session. Requires the management token returned by /v1/auth/verify.","parameters":[{"name":"X-Tvfin-Management-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Short-lived management token returned by /v1/auth/verify."}],"responses":{"200":{"description":"API key list response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"api_key":"tvfin_live_example","management_token":"tvfin_mgmt_example"}}}}}}},"202":{"description":"Accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"accepted":true,"message":"Verification email queued."}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Unauthorized.","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key or management token is required."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}}}},"post":{"tags":["Auth"],"summary":"Create API Key","operationId":"createApiKey","description":"Creates an additional API key for the verified email session. Requires the management token returned by /v1/auth/verify.","parameters":[{"name":"X-Tvfin-Management-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Short-lived management token returned by /v1/auth/verify."}],"requestBody":{"required":false,"description":"API key options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"},"example":{"label":"production"}}}},"responses":{"200":{"description":"API key creation response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"api_key":"tvfin_live_example","management_token":"tvfin_mgmt_example"}}}}}}},"202":{"description":"Accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"accepted":true,"message":"Verification email queued."}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Unauthorized.","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key or management token is required."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}}}}},"/v1/auth/keys/{keyId}":{"delete":{"tags":["Auth"],"summary":"Revoke API Key","operationId":"revokeApiKey","description":"Revokes an API key for the verified email session. Requires the management token returned by /v1/auth/verify.","parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string"},"description":"API key identifier returned by the key management endpoints."},{"name":"X-Tvfin-Management-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Short-lived management token returned by /v1/auth/verify."}],"responses":{"200":{"description":"API key revocation response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"api_key":"tvfin_live_example","management_token":"tvfin_mgmt_example"}}}}}}},"202":{"description":"Accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"accepted":true,"message":"Verification email queued."}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Unauthorized.","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key or management token is required."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}}}}},"/v1/auth/keys/{keyId}/rotate":{"post":{"tags":["Auth"],"summary":"Rotate API Key","operationId":"rotateApiKey","description":"Revokes an existing API key and returns a replacement key. Requires the management token returned by /v1/auth/verify.","parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string"},"description":"API key identifier returned by the key management endpoints."},{"name":"X-Tvfin-Management-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Short-lived management token returned by /v1/auth/verify."}],"requestBody":{"required":false,"description":"Replacement key options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"},"example":{"label":"production"}}}},"responses":{"200":{"description":"API key rotation response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"api_key":"tvfin_live_example","management_token":"tvfin_mgmt_example"}}}}}}},"202":{"description":"Accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"accepted":true,"message":"Verification email queued."}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Unauthorized.","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key or management token is required."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}}}}},"/v1/auth/limits/requests":{"post":{"tags":["Auth"],"summary":"Request Higher Limits","operationId":"requestHigherLimits","description":"Submit a custom RPS request for an authenticated API key. Limited to 1 request per minute per key.","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."}],"requestBody":{"required":false,"description":"Requested rate limits and use case.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitRequest"},"example":{"requested_rps":100,"requested_origin_rps":25,"use_case":"production agent workflow","message":"Short description of traffic pattern and data needed."}}}},"responses":{"200":{"description":"Custom limit request response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"api_key":"tvfin_live_example","management_token":"tvfin_mgmt_example"}}}}}}},"202":{"description":"Accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"data":{"accepted":true,"message":"Verification email queued."}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Unauthorized.","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key or management token is required."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}}}}},"/v1/health":{"get":{"tags":["System"],"summary":"Service Health","operationId":"getHealth","description":"Returns service status, shipped contract counts, WebSocket policy, identity tiers, and current public rate limits. Use this endpoint for uptime checks and client capability discovery.","responses":{"200":{"description":"Service health response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"},"examples":{"success":{"summary":"Success","value":{"ok":true,"name":"tvfin","version":"0.2.0","shipped_rest_contracts":30,"shipped_websocket_methods":17,"websocket_policy":"REST is hosted by tvfin; WebSocket opens directly from the SDK to TradingView.","rate_limits":{"anonymous":{"requestsPerMinute":1200,"originPerMinute":120},"key":{"requestsPerMinute":30000,"originPerMinute":3000}}}}}}}}}}},"/v1/endpoints":{"get":{"tags":["System"],"summary":"Endpoint Catalog","operationId":"getEndpointCatalog","description":"Returns the machine-readable tvfin endpoint catalog, including route names, paths, methods, source contracts, freshness windows, and advanced raw-contract metadata.","responses":{"200":{"description":"Endpoint catalog response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointCatalogResponse"},"examples":{"success":{"summary":"Success","value":{"shipped_route_count":22,"shipped_rest_contract_count":30,"routes":{"symbols_search":{"path":"/v1/symbols/search","endpoint_id":"symbol.search","methods":["GET"],"tag":"Symbols","summary":"Search Symbols","description":"Search TradingView's public symbol catalog by company, ticker, exchange, country, or asset type."},"news_headlines":{"path":"/v1/news/headlines","endpoint_id":"news.headlines.v2","methods":["GET"],"tag":"News","summary":"News Headlines","description":"Return current TradingView news headlines with language, market, provider, and symbol filters."}}}}}}}}}}},"/v1/openapi.json":{"get":{"tags":["System"],"summary":"OpenAPI Document","operationId":"getOpenApiDocument","description":"Returns the live OpenAPI 3.1 document used by docs.tvfin.bluedoor.sh and by SDK/tooling generators.","responses":{"200":{"description":"OpenAPI document.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDocument"},"examples":{"success":{"summary":"Success","value":{"openapi":"3.1.0","info":{"title":"tvfin TradingView API","version":"0.2.0"},"servers":[{"url":"https://api.tvfin.bluedoor.sh"}]}}}}}}}}},"/v1/raw/{endpointId}":{"get":{"tags":["Advanced"],"summary":"Raw Source Contract","operationId":"getRawSourceContract","description":"Advanced compatibility route for calling a shipped TradingView source contract by ID. Product routes are preferred.","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"},"description":"Shipped TradingView source contract ID, for example news.headlines.v2."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Raw source-contract response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"raw_source_contract","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"endpoint_id":"news.headlines.v2","result":{}}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}}},"post":{"tags":["Advanced"],"summary":"Raw Source Contract POST","operationId":"postRawSourceContract","description":"Advanced compatibility route for POST source contracts. Product routes are preferred.","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"endpointId","in":"path","required":true,"schema":{"type":"string"},"description":"Shipped TradingView source contract ID."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"requestBody":{"required":false,"description":"Source contract JSON payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericTradingViewRequest"},"example":{"columns":["name","close"],"range":[0,10]}}}},"responses":{"200":{"description":"Raw source-contract response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"raw_source_contract","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"endpoint_id":"scanner.scan","result":{}}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}}}},"/v1/symbols/search":{"get":{"tags":["Symbols"],"summary":"Search Symbols","description":"Search TradingView's public symbol catalog by company, ticker, exchange, country, or asset type.","operationId":"getSymbolsSearch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Search query. Aliases: query, text."}],"responses":{"200":{"description":"Search Symbols response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"symbols_search","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":[{"symbol":"AAPL","description":"Apple Inc.","type":"stock","exchange":"NASDAQ","country":"US","currency_code":"USD"}]}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"symbol.search"}},"/v1/news/headlines":{"get":{"tags":["News"],"summary":"News Headlines","description":"Return current TradingView news headlines with language, market, provider, and symbol filters.","operationId":"getNewsHeadlines","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"News Headlines response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"news_headlines","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"id":"tradingview:example","title":"Example market headline","source":"TradingView","published":1779984000,"relatedSymbols":[{"symbol":"NASDAQ:AAPL"}]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"news.headlines.v2"}},"/v1/news/latest":{"get":{"tags":["News"],"summary":"Latest News","description":"Return the latest TradingView news headlines.","operationId":"getNewsLatest","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Latest News response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"news_latest","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"id":"tradingview:example","title":"Example market headline","source":"TradingView","published":1779984000,"relatedSymbols":[{"symbol":"NASDAQ:AAPL"}]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"news.headlines.latest"}},"/v1/news/flow":{"get":{"tags":["News"],"summary":"News Flow","description":"Return TradingView's news flow feed. Use version=v1 or version=v2 when a specific feed version is needed.","operationId":"getNewsFlow","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"version","in":"query","required":false,"schema":{"type":"string","enum":["v1","v2"]}}],"responses":{"200":{"description":"News Flow response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"news_flow","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"id":"tradingview:example","title":"Example market headline","source":"TradingView","published":1779984000,"relatedSymbols":[{"symbol":"NASDAQ:AAPL"}]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"news.flow.v2"}},"/v1/symbols/{symbol}/news":{"get":{"tags":["News"],"summary":"Symbol News","description":"Return news for a TradingView symbol such as NASDAQ:AAPL or AAPL with exchange=NASDAQ.","operationId":"getSymbolNews","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"symbol","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Symbol News response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"symbol_news","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"id":"tradingview:example","title":"Example market headline","source":"TradingView","published":1779984000,"relatedSymbols":[{"symbol":"NASDAQ:AAPL"}]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"news.headlines.v2.symbol-view"}},"/v1/calendar/economic":{"get":{"tags":["Calendar"],"summary":"Economic Calendar","description":"Return upcoming and recent economic calendar events.","operationId":"getCalendarEconomic","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Economic Calendar response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"calendar_economic","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"country":"US","title":"Example event","actual":null,"forecast":null,"previous":null}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"calendar.economic"}},"/v1/calendar/economic/reuters":{"get":{"tags":["Calendar"],"summary":"Reuters Economic Calendar","description":"Return the Reuters-backed economic calendar feed exposed in TradingView.","operationId":"getCalendarReuters","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Reuters Economic Calendar response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"calendar_reuters","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"country":"US","title":"Example event","actual":null,"forecast":null,"previous":null}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"calendar.economic.reuters"}},"/v1/events/earnings":{"get":{"tags":["Events"],"summary":"Earnings Events","description":"Return earnings calendar rows from TradingView scanner data.","operationId":"getEventsEarnings","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Earnings Events response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"events_earnings","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"country":"US","title":"Example event","actual":null,"forecast":null,"previous":null}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"calendar.earnings"},"post":{"tags":["Events"],"summary":"Earnings Events","description":"Return earnings calendar rows from TradingView scanner data.","operationId":"postEventsEarnings","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Earnings Events response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"events_earnings","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"country":"US","title":"Example event","actual":null,"forecast":null,"previous":null}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"calendar.earnings","requestBody":{"required":false,"description":"Earnings Events request options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScannerRequest"},"example":{"columns":["name","close","volume"],"range":[0,25],"sort":{"sortBy":"market_cap_basic","sortOrder":"desc"}}}}}}},"/v1/events/dividends":{"get":{"tags":["Events"],"summary":"Dividend Events","description":"Return dividend calendar rows from TradingView scanner data.","operationId":"getEventsDividends","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Dividend Events response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"events_dividends","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"country":"US","title":"Example event","actual":null,"forecast":null,"previous":null}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"calendar.dividends"},"post":{"tags":["Events"],"summary":"Dividend Events","description":"Return dividend calendar rows from TradingView scanner data.","operationId":"postEventsDividends","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Dividend Events response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"events_dividends","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"country":"US","title":"Example event","actual":null,"forecast":null,"previous":null}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"calendar.dividends","requestBody":{"required":false,"description":"Dividend Events request options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScannerRequest"},"example":{"columns":["name","close","volume"],"range":[0,25],"sort":{"sortBy":"market_cap_basic","sortOrder":"desc"}}}}}}},"/v1/screeners/{market}/metadata":{"get":{"tags":["Screeners"],"summary":"Screener Metadata","description":"Return available columns and metadata for a TradingView market screener.","operationId":"getScreenersMetadata","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"market","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Screener Metadata response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"screeners_metadata","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"totalCount":1,"data":[{"s":"NASDAQ:AAPL","d":["AAPL",310.61,-0.08,21395391]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"scanner.metainfo"}},"/v1/screeners/{market}/search":{"get":{"tags":["Screeners"],"summary":"Run Screener","description":"Run a TradingView market screener using friendly query parameters or a scanner JSON body.","operationId":"getScreenersSearch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"market","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Run Screener response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"screeners_search","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"totalCount":1,"data":[{"s":"NASDAQ:AAPL","d":["AAPL",310.61,-0.08,21395391]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"scanner.scan"},"post":{"tags":["Screeners"],"summary":"Run Screener","description":"Run a TradingView market screener using friendly query parameters or a scanner JSON body.","operationId":"postScreenersSearch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"market","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Run Screener response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"screeners_search","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"totalCount":1,"data":[{"s":"NASDAQ:AAPL","d":["AAPL",310.61,-0.08,21395391]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"scanner.scan","requestBody":{"required":false,"description":"Run Screener request options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScannerRequest"},"example":{"columns":["name","close","volume"],"range":[0,25],"sort":{"sortBy":"market_cap_basic","sortOrder":"desc"}}}}}}},"/v1/screeners/global/search":{"get":{"tags":["Screeners"],"summary":"Run Global Screener","description":"Run a cross-market TradingView scanner query.","operationId":"getScreenersGlobal","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Run Global Screener response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"screeners_global","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"totalCount":1,"data":[{"s":"NASDAQ:AAPL","d":["AAPL",310.61,-0.08,21395391]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"scanner.scan.global"},"post":{"tags":["Screeners"],"summary":"Run Global Screener","description":"Run a cross-market TradingView scanner query.","operationId":"postScreenersGlobal","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Run Global Screener response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"screeners_global","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"totalCount":1,"data":[{"s":"NASDAQ:AAPL","d":["AAPL",310.61,-0.08,21395391]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"scanner.scan.global","requestBody":{"required":false,"description":"Run Global Screener request options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScannerRequest"},"example":{"columns":["name","close","volume"],"range":[0,25],"sort":{"sortBy":"market_cap_basic","sortOrder":"desc"}}}}}}},"/v1/options/{symbol}/chain":{"get":{"tags":["Options"],"summary":"Options Chain","description":"Return option contracts for an underlying symbol, including strikes, expirations, prices, volume, Greeks, and IV fields when available.","operationId":"getOptionsChain","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"symbol","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Options Chain response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"options_chain","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"totalCount":1,"data":[{"s":"NASDAQ:AAPL","d":["AAPL",310.61,-0.08,21395391]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"scanner.scan.options"},"post":{"tags":["Options"],"summary":"Options Chain","description":"Return option contracts for an underlying symbol, including strikes, expirations, prices, volume, Greeks, and IV fields when available.","operationId":"postOptionsChain","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"symbol","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated scanner columns."}],"responses":{"200":{"description":"Options Chain response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"options_chain","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"totalCount":1,"data":[{"s":"NASDAQ:AAPL","d":["AAPL",310.61,-0.08,21395391]}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"scanner.scan.options","requestBody":{"required":false,"description":"Options Chain request options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScannerRequest"},"example":{"columns":["name","close","strike","expiration","option-type","iv"],"range":[0,50]}}}}}},"/v1/options/{symbol}/implied-volatility":{"get":{"tags":["Options"],"summary":"Implied Volatility","description":"Return TradingView's in-time implied volatility series for an underlying symbol.","operationId":"getOptionsImpliedVolatility","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"symbol","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Implied Volatility response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"options_implied_volatility","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"symbol":"NASDAQ:AAPL","values":[{"time":1779984000,"value":0.28}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"OptionsCharting.GetInTimeIV"}},"/v1/options/{symbol}/underlying-aggregates":{"get":{"tags":["Options"],"summary":"Underlying Aggregates","description":"Return aggregate option-underlying metrics for a symbol.","operationId":"getOptionsUnderlyingAggregates","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"symbol","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Underlying Aggregates response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"options_underlying_aggregates","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"symbol":"NASDAQ:AAPL","values":[{"time":1779984000,"value":0.28}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"OptionsCharting.GetUnderlyingAggregates"}},"/v1/options/strategy-chart":{"get":{"tags":["Options"],"summary":"Strategy Chart","description":"Return strategy charting data for an options strategy payload.","operationId":"getOptionsStrategyChart","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Strategy Chart response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"options_strategy_chart","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"symbol":"NASDAQ:AAPL","values":[{"time":1779984000,"value":0.28}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"OptionsCharting.PostStrategiesChart"},"post":{"tags":["Options"],"summary":"Strategy Chart","description":"Return strategy charting data for an options strategy payload.","operationId":"postOptionsStrategyChart","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Strategy Chart response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"options_strategy_chart","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"symbol":"NASDAQ:AAPL","values":[{"time":1779984000,"value":0.28}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"OptionsCharting.PostStrategiesChart","requestBody":{"required":false,"description":"Strategy Chart request options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptionsStrategyRequest"},"example":{"underlying":"NASDAQ:AAPL","legs":[{"side":"buy","option_type":"call","strike":300,"expiration":"2026-06-19"}]}}}}}},"/v1/ideas":{"get":{"tags":["Ideas"],"summary":"Ideas","description":"Return public TradingView ideas, optionally filtered by symbol.","operationId":"getIdeas","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Ideas response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"ideas","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"id":"example","title":"Example public item","author":"TradingView"}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"ideas.list"}},"/v1/scripts":{"get":{"tags":["Scripts"],"summary":"Scripts","description":"Return public TradingView scripts, optionally filtered by symbol.","operationId":"getScripts","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Scripts response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"scripts","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"items":[{"id":"example","title":"Example public item","author":"TradingView"}]}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"scripts.list"}},"/v1/pine/builtins":{"get":{"tags":["Pine"],"summary":"Pine Built-ins","description":"Return Pine built-in reference metadata.","operationId":"getPineBuiltins","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Pine Built-ins response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"pine_builtins","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"result":{"title":"Example indicator"}}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"PineFacade.ListBuiltins"}},"/v1/pine/title":{"get":{"tags":["Pine"],"summary":"Parse Pine Title","description":"Parse a Pine source snippet and return the script title metadata.","operationId":"getPineParseTitle","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Parse Pine Title response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"pine_parse_title","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"result":{"title":"Example indicator"}}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"PineFacade.ParseTitle"},"post":{"tags":["Pine"],"summary":"Parse Pine Title","description":"Parse a Pine source snippet and return the script title metadata.","operationId":"postPineParseTitle","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Parse Pine Title response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"pine_parse_title","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"result":{"title":"Example indicator"}}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"PineFacade.ParseTitle","requestBody":{"required":false,"description":"Parse Pine Title request options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PineSourceRequest"},"example":{"source":"//@version=5\nindicator(\"Example\")\nplot(close)"}}}}}},"/v1/pine/translate":{"get":{"tags":["Pine"],"summary":"Translate Pine Source","description":"Translate Pine source between supported Pine versions.","operationId":"getPineTranslateSource","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"version","in":"query","required":false,"schema":{"type":"string"},"description":"Pine version segment used by TradingView. Defaults to 5."},{"name":"source","in":"query","required":false,"schema":{"type":"string"},"description":"Pine source for GET calls. POST JSON body is preferred for larger scripts."}],"responses":{"200":{"description":"Translate Pine Source response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"pine_translate_source","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"result":{"title":"Example indicator"}}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"PineFacade.TranslateSource"},"post":{"tags":["Pine"],"summary":"Translate Pine Source","description":"Translate Pine source between supported Pine versions.","operationId":"postPineTranslateSource","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."},{"name":"version","in":"query","required":false,"schema":{"type":"string"},"description":"Pine version segment used by TradingView. Defaults to 5."},{"name":"source","in":"query","required":false,"schema":{"type":"string"},"description":"Pine source for GET calls. POST JSON body is preferred for larger scripts."}],"responses":{"200":{"description":"Translate Pine Source response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"pine_translate_source","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"result":{"title":"Example indicator"}}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"PineFacade.TranslateSource","requestBody":{"required":false,"description":"Translate Pine Source request options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PineSourceRequest"},"example":{"source":"//@version=5\nindicator(\"Example\")\nplot(close)"}}}}}},"/v1/alerts/status":{"get":{"tags":["Alerts"],"summary":"Alerts Status","description":"Return the TradingView price-alert backend health signal.","operationId":"getAlertsStatus","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string"},"description":"Bearer API key from /v1/auth/verify. X-Tvfin-Key is also supported."},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"},"description":"Request fresh source data when available."}],"responses":{"200":{"description":"Alerts Status response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TvfinResponse"},"examples":{"success":{"summary":"Success","value":{"meta":{"provider":"tradingview","route":"alerts_status","status":"ok","generated_at":"2026-05-28T18:30:00.000Z","freshness":{"as_of":"2026-05-28T18:30:00.000Z","max_age_seconds":120,"stale":false}},"data":{"alive":true}}}}}}},"400":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Bad request.","value":{"ok":false,"error":{"code":"invalid_request","message":"The request could not be validated."}}}}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Invalid API key.","value":{"ok":false,"error":{"code":"unauthorized","message":"The API key is missing or invalid."}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Rate limited.","value":{"ok":false,"error":{"code":"rate_limited","message":"Request limit exceeded."}}}}}}},"502":{"description":"Origin error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"error":{"summary":"Origin error.","value":{"ok":false,"error":{"code":"origin_error","message":"TradingView origin request failed."}}}}}}}},"x-tvfin-source-contract":"PriceAlerts.IsAlive"}}},"x-tvfin-websocket-policy":"REST is hosted by tvfin; WebSocket opens directly from the SDK to TradingView."}