{"openapi":"3.1.0","info":{"title":"Slickcharts Adapter API","version":"0.1.0","description":"Slickcharts adapter contract for bluedoor.\n\nSlickcharts-backed index composition, weighting, ETF, ARK, and simple quote helper routes.\n\nSlickcharts source API for bluedoor Financial Data.\nIndex composition and weighting source with ETF/ARK and simple quote helpers.\nCoverage: Index constituents; Index view tables; Returns history; ARK ETF holdings and treasury yield views.\nGenerated from the live source contract and representative live API responses on 2026-06-07T01:30:59.456Z.","x-bluedoor-adapter":{"slug":"slickcharts","source_id":"scfin","upstream":"slickcharts.com","docs_url":"https://bluedoor.sh/adapters/slickcharts/docs"}},"servers":[{"url":"https://api.bluedoor.sh/adapters/slickcharts","description":"bluedoor adapter namespace"},{"url":"https://api.scfin.bluedoor.sh","description":"Current source API host"}],"externalDocs":{"description":"Slickcharts adapter docs","url":"https://bluedoor.sh/adapters/slickcharts/docs"},"tags":[{"name":"Indices"},{"name":"Symbol"}],"paths":{"/v1/companies":{"get":{"summary":"Companies","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_companiesResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":1780796145203,"route":"companies","total":0,"companies":[]},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/companies/__data.json","route":"companies","generated_at":"2026-06-07T01:35:45.440Z","cache":{"hit":false,"age_s":0},"request_id":"eff84c9c-e585-40ce-9c4a-d62b79cddf5b"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_companies","description":"Returns companies with source-native fields and identifiers.","x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/companies","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:45.737Z"}},"/v1/comparison/{pair}":{"get":{"summary":"Comparison","parameters":[{"name":"pair","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_comparison_pairResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":1780796147390,"route":"comparison","slug":"goog-vs-googl","content":{"googPrice":365.76,"googlPrice":368.53,"priceDelta":-2.769999999999982,"priceDeltas":[[1396497600000,-0.08800000000000097],[1396584000000,-0.10549999999999926],[1396843200000,-0.12400000000000233]],"indexEtfList":[{"symbol":"SPY","name":"S&P 500 ETF","lastPrice":737.55,"netChange":-19.540000000000077,"changePercent":-2.5809348954549782,"prevClose":757.09},{"symbol":"QQQ","name":"Nasdaq 100 ETF","lastPrice":705.06,"netChange":-35.55000000000007,"changePercent":-4.8000972171588385,"prevClose":740.61},{"symbol":"DIA","name":"Dow Jones ETF","lastPrice":509.7,"netChange":-7.000000000000057,"changePercent":-1.354751306367341,"prevClose":516.7}]}},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/goog-vs-googl/__data.json","route":"comparison","generated_at":"2026-06-07T01:35:47.413Z","cache":{"hit":false,"age_s":0},"request_id":"6e32bdb6-ccff-4241-ab08-c9d53b5577c5"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_comparison_pair","description":"Returns comparison with source-native fields and identifiers.","x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/comparison/goog-vs-googl","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:47.740Z"}},"/v1/marketing/{slug}":{"get":{"summary":"Marketing page","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_marketing_slugResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":1780796148233,"route":"marketing","slug":"berkshire-hathaway","content":{"holdingsList":[{"symbol":"AAPL","name":"Apple Inc.","lastPrice":307.34,"netChange":-3.890000000000043,"changePercent":-1.2498795103299987,"marketCap":70048259110.72,"shares":227917808,"float":0,"rank":1,"weight":24.64040438880925},{"symbol":"AXP","name":"American Express Company","lastPrice":310.66,"netChange":-1.8699999999999477,"changePercent":-0.5983425591143066,"marketCap":47099380062,"shares":151610700,"float":0,"rank":2,"weight":16.567831748045435},{"symbol":"KO","name":"Coca-Cola Company","lastPrice":79.48,"netChange":2.660000000000011,"changePercent":3.4626399375162764,"marketCap":31792000000,"shares":400000000,"float":0,"rank":3,"weight":11.183257746503212}],"indexEtfList":[{"symbol":"SPY","name":"S&P 500 ETF","lastPrice":737.55,"netChange":-19.540000000000077,"changePercent":-2.5809348954549782,"prevClose":757.09},{"symbol":"QQQ","name":"Nasdaq 100 ETF","lastPrice":705.06,"netChange":-35.55000000000007,"changePercent":-4.8000972171588385,"prevClose":740.61},{"symbol":"DIA","name":"Dow Jones ETF","lastPrice":509.7,"netChange":-7.000000000000057,"changePercent":-1.354751306367341,"prevClose":516.7}],"filingDate":"2026-05-15","reportDate":"2026-03-31","filingLink":"https://www.sec.gov/Archives/edgar/data/1067983/000119312526226661/0001193125-26-226661-index.htm"}},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/berkshire-hathaway/__data.json","route":"marketing","generated_at":"2026-06-07T01:35:48.237Z","cache":{"hit":false,"age_s":0},"request_id":"acef0d08-6a8c-425d-8c70-c0bad2a9bcc7"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_marketing_slug","description":"Returns marketing page with source-native fields and identifiers.","x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/marketing/berkshire-hathaway","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:48.476Z"}},"/v1/currency/{ticker}/quote":{"get":{"summary":"Currency quote","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_currency_ticker_quoteResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":1780796149079,"route":"currency_quote","ticker":"AAPL","quote":{"symbol":"AAPL","symbolId":null,"symbolName":null,"displayReturns":false,"loadTimestamp":1780796149079,"mobileDevice":false}},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/currency/AAPL/__data.json","route":"currency_quote","generated_at":"2026-06-07T01:35:49.085Z","cache":{"hit":false,"age_s":0},"request_id":"7780b9e0-9b09-4690-9bb9-7116bd9a8684"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_currency_ticker_quote","description":"Returns currency quote with source-native fields and identifiers.","x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/currency/AAPL/quote","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:49.334Z"}},"/v1/index/{index}/{view}":{"get":{"summary":"View","parameters":[{"name":"view","in":"path","required":true,"schema":{"type":"string"}},{"name":"index","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_index_index_viewResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":1780796149835,"route":"index_view","index":"sp500","view":"returns","primary_key":"returns","primary":[{"year":2026,"totalReturn":"8.43","negative":false},{"year":2025,"totalReturn":"17.88"},{"year":2024,"totalReturn":"25.02"}],"other_arrays":{"chartYears":["1926-01-02T00:00:00.000Z","1927-01-02T00:00:00.000Z","1928-01-02T00:00:00.000Z"],"chartReturns":["11.62","37.49","43.61"]},"meta":{"ytdYear":2026,"ytdDate":"2026-06-05","loadTimestamp":1780796149835,"mobileDevice":false}},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/sp500/returns/__data.json","route":"index_view","generated_at":"2026-06-07T01:35:49.844Z","cache":{"hit":false,"age_s":0},"request_id":"a305dbe1-255f-43c6-9dea-ee987ef5d711"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_index_index_view","description":"Returns view with index, constituent, weight, or comparison fields from the upstream data shape.","tags":["Indices"],"x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/index/sp500/returns","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:50.071Z"}},"/v1/index/{index}/constituents":{"get":{"summary":"Constituents","parameters":[{"name":"index","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_index_index_constituentsResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":1780796150633,"route":"index_constituents","index":"sp500","total":503,"constituents":[{"symbol":"NVDA","name":"NVIDIA Corp","lastPrice":205.1,"netChange":-13.560000000000002,"changePercent":-6.201408579529866,"marketCap":4967727100000,"shares":24221000000,"float":0,"rank":1,"weight":7.413044155292284},{"symbol":"AAPL","name":"Apple Inc","lastPrice":307.34,"netChange":-3.890000000000043,"changePercent":-1.2498795103299987,"marketCap":4514011993040,"shares":14687356000,"float":0,"rank":2,"weight":6.73599204391168},{"symbol":"MSFT","name":"Microsoft Corp","lastPrice":416.67,"netChange":-11.379999999999995,"changePercent":-2.6585679243079086,"marketCap":3095205888115.68,"shares":7428434704,"float":0,"rank":3,"weight":4.618791945781845}]},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/sp500/__data.json","route":"index_constituents","generated_at":"2026-06-07T01:35:50.646Z","cache":{"hit":false,"age_s":0},"request_id":"fa8f36dd-3414-4e42-8fe2-7ccf3f646a59"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_index_index_constituents","description":"Returns constituents with index, constituent, weight, or comparison fields from the upstream data shape.","tags":["Indices"],"x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/index/sp500/constituents","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:51.076Z"}},"/v1/symbol/{ticker}/{view}":{"get":{"summary":"View","parameters":[{"name":"view","in":"path","required":true,"schema":{"type":"string"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_symbol_ticker_viewResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":null,"route":"symbol_view","ticker":"AAPL","view":"chart","payload":{"symbol":"AAPL","symbolName":"Apple Inc.","displayEtfHoldings":false,"displayReturns":true,"mobileDevice":false}},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/symbol/AAPL/chart/__data.json","route":"symbol_view","generated_at":"2026-06-07T01:35:51.591Z","cache":{"hit":false,"age_s":0},"request_id":"3be68702-5908-4f6f-82ef-db6e3e0d2029"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_symbol_ticker_view","description":"Returns view with source-native fields and identifiers.","tags":["Symbol"],"x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/symbol/AAPL/chart","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:51.868Z"}},"/v1/symbol/{ticker}/quote":{"get":{"summary":"Quote","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_symbol_ticker_quoteResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":1780796152434,"route":"symbol_quote","ticker":"AAPL","quote":{"symbol":"AAPL","symbolName":"Apple Inc.","lastPrice":307.34,"netChange":-3.890000000000043,"changePercent":-1.2498795103299987,"prevClose":311.23,"trailingPe":"37.18","forwardPe":"31.93","dividendAmount":1.05,"dividendPercent":0.34164117915012693,"marketCap":"4514.01B","trailingEps":"8.27","forwardEps":"9.63","displayEtfHoldings":false,"displayReturns":true},"companion_etfs":[{"symbol":"SPY","name":"S&P 500 ETF","lastPrice":737.55,"netChange":-19.540000000000077,"changePercent":-2.5809348954549782,"prevClose":757.09},{"symbol":"QQQ","name":"Nasdaq 100 ETF","lastPrice":705.06,"netChange":-35.55000000000007,"changePercent":-4.8000972171588385,"prevClose":740.61},{"symbol":"DIA","name":"Dow Jones ETF","lastPrice":509.7,"netChange":-7.000000000000057,"changePercent":-1.354751306367341,"prevClose":516.7}]},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/symbol/AAPL/__data.json","route":"symbol_quote","generated_at":"2026-06-07T01:35:52.445Z","cache":{"hit":false,"age_s":0},"request_id":"3dfab842-28c7-4fbc-809a-007f78e26363"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_symbol_ticker_quote","description":"Returns quote with source-native fields and identifiers.","tags":["Symbol"],"x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/symbol/AAPL/quote","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:52.702Z"}},"/v1/treasury/{tenor}/yield":{"get":{"summary":"Treasury yield","parameters":[{"name":"tenor","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_treasury_tenor_yieldResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":1780796153390,"route":"treasury_yield","tenor":"10-year","current_yield":4.55,"treasury_yield_date":"2026-06-05","treasury_list":[{"treasuryType":"1 Mo","shortSymbol":"1M","symbol":"1-month","title":"1 Month","category":"bill","weeks":4,"active":false},{"treasuryType":"1.5 Month","shortSymbol":"1.5M","symbol":"1.5-month","title":"1.5 Month","category":"bill","weeks":6,"active":false},{"treasuryType":"2 Mo","shortSymbol":"2M","symbol":"2-month","title":"2 Month","category":"bill","weeks":8,"active":false}],"chart_data":[{"x":"1990-01-02","y":7.94},{"x":"1990-01-03","y":7.99},{"x":"1990-01-04","y":7.98}],"companion_etfs":[{"symbol":"SPY","name":"S&P 500 ETF","lastPrice":737.55,"netChange":-19.540000000000077,"changePercent":-2.5809348954549782,"prevClose":757.09},{"symbol":"QQQ","name":"Nasdaq 100 ETF","lastPrice":705.06,"netChange":-35.55000000000007,"changePercent":-4.8000972171588385,"prevClose":740.61},{"symbol":"DIA","name":"Dow Jones ETF","lastPrice":509.7,"netChange":-7.000000000000057,"changePercent":-1.354751306367341,"prevClose":516.7}]},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/treasury/10-year/__data.json","route":"treasury_yield","generated_at":"2026-06-07T01:35:53.441Z","cache":{"hit":false,"age_s":0},"request_id":"ff18bb62-592b-4bd7-a433-7e90f4345f08"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_treasury_tenor_yield","description":"Returns treasury yield from official Treasury tables with source-native date and amount fields.","x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/treasury/10-year/yield","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:53.916Z"}},"/v1/etf/ark/{ticker}/holdings":{"get":{"summary":"ARK ETF holdings","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_etf_ark_ticker_holdingsResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"as_of":"06/05/2026","route":"etf_ark_holdings","ticker":"ARKK","total":0,"holdings":[]},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/etf/ark-invest/ARKK/__data.json","route":"etf_ark_holdings","generated_at":"2026-06-07T01:35:54.534Z","cache":{"hit":false,"age_s":0},"request_id":"130224b0-db0a-49d9-8a9d-4bfca691ba3d"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_etf_ark_ticker_holdings","description":"Returns ARK ETF holdings with source-native fund identifiers, holdings, profile, or performance fields.","x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/etf/ark/ARKK/holdings","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:54.789Z"}},"/v1/index/sp500/returns/history":{"get":{"summary":"S&P 500 returns history","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"x-scfin-contact","in":"header","required":false,"schema":{"type":"string","format":"email"},"description":"Optional contact email for higher public rate limits and support diagnostics."},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","example":"Bearer <key>"},"description":"Optional API-key authorization for higher-volume access tiers."}],"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"ScfinApiKey":[]}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/scfin_get_index_sp500_returns_historyResponse"},"examples":{"live":{"summary":"Live response","value":{"ok":true,"data":{"rows":[{"year":1926,"total_return":11.62},{"year":1927,"total_return":37.49},{"year":1928,"total_return":43.61}],"total":100,"first_year":1926,"last_year":2025},"meta":{"source":"slickcharts","source_url":"https://www.slickcharts.com/sp500/returns/history.json","route":"sp500_returns_history","generated_at":"2026-06-07T00:13:57.333Z","cache":{"hit":true,"state":"kv","age_s":4917},"request_id":"98608336-aa6f-4e86-8f93-23c47ef3b40f"}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limited. Retry after the limit reset or include the documented contact/API-key headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Service unavailable. The source API or an upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"operationId":"scfin_get_index_sp500_returns_history","description":"Returns S&P 500 returns history with index, constituent, weight, or comparison fields from the upstream data shape.","tags":["Indices"],"x-source-api":"scfin","x-source-name":"Slickcharts","x-source-upstream":"slickcharts.com","x-docs-example-url":"https://api.scfin.bluedoor.sh/v1/index/sp500/returns/history","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:55.179Z"}}},"components":{"securitySchemes":{"ContactEmail":{"type":"apiKey","in":"header","name":"X-Scfin-Contact"},"BearerAuth":{"type":"http","scheme":"bearer","description":"API keys are available by emailing sam@bluedoor.sh."},"ScfinApiKey":{"type":"apiKey","in":"header","name":"X-Scfin-Key"}},"schemas":{"ErrorEnvelope":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean","example":false},"error":{"type":"object","additionalProperties":true,"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true}}},"scfin_get_companiesResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"integer"},"route":{"type":"string"},"total":{"type":"integer"},"companies":{"type":"array","items":{}}},"required":["as_of","companies","route","total"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_comparison_pairResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"integer"},"route":{"type":"string"},"slug":{"type":"string"},"content":{"type":"object","additionalProperties":true,"properties":{"googPrice":{"type":"number"},"googlPrice":{"type":"number"},"priceDelta":{"type":"number"},"priceDeltas":{"type":"array","items":{"type":"array","items":{"oneOf":[{"type":"integer"},{"type":"number"}]}}},"indexEtfList":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"name":{"type":"string"},"lastPrice":{"type":"number"},"netChange":{"type":"number"},"changePercent":{"type":"number"},"prevClose":{"type":"number"}},"required":["changePercent","lastPrice","name","netChange","prevClose","symbol"]}}},"required":["googPrice","googlPrice","indexEtfList","priceDelta","priceDeltas"]}},"required":["as_of","content","route","slug"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_marketing_slugResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"integer"},"route":{"type":"string"},"slug":{"type":"string"},"content":{"type":"object","additionalProperties":true,"properties":{"holdingsList":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"name":{"type":"string"},"lastPrice":{"type":"number"},"netChange":{"type":"number"},"changePercent":{"type":"number"},"marketCap":{"oneOf":[{"type":"number"},{"type":"integer"}]},"shares":{"type":"integer"},"float":{"type":"integer"},"rank":{"type":"integer"},"weight":{"type":"number"}},"required":["changePercent","float","lastPrice","marketCap","name","netChange","rank","shares","symbol","weight"]}},"indexEtfList":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"name":{"type":"string"},"lastPrice":{"type":"number"},"netChange":{"type":"number"},"changePercent":{"type":"number"},"prevClose":{"type":"number"}},"required":["changePercent","lastPrice","name","netChange","prevClose","symbol"]}},"filingDate":{"type":"string"},"reportDate":{"type":"string"},"filingLink":{"type":"string"}},"required":["filingDate","filingLink","holdingsList","indexEtfList","reportDate"]}},"required":["as_of","content","route","slug"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_currency_ticker_quoteResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"integer"},"route":{"type":"string"},"ticker":{"type":"string"},"quote":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"symbolId":{"nullable":true},"symbolName":{"nullable":true},"displayReturns":{"type":"boolean"},"loadTimestamp":{"type":"integer"},"mobileDevice":{"type":"boolean"}},"required":["displayReturns","loadTimestamp","mobileDevice","symbol","symbolId","symbolName"]}},"required":["as_of","quote","route","ticker"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_index_index_viewResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"integer"},"route":{"type":"string"},"index":{"type":"string"},"view":{"type":"string"},"primary_key":{"type":"string"},"primary":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"year":{"type":"integer"},"totalReturn":{"type":"string"},"negative":{"type":"boolean"}},"required":["negative","totalReturn","year"]}},"other_arrays":{"type":"object","additionalProperties":true,"properties":{"chartYears":{"type":"array","items":{"type":"string"}},"chartReturns":{"type":"array","items":{"type":"string"}}},"required":["chartReturns","chartYears"]},"meta":{"type":"object","additionalProperties":true,"properties":{"ytdYear":{"type":"integer"},"ytdDate":{"type":"string"},"loadTimestamp":{"type":"integer"},"mobileDevice":{"type":"boolean"}},"required":["loadTimestamp","mobileDevice","ytdDate","ytdYear"]}},"required":["as_of","index","meta","other_arrays","primary","primary_key","route","view"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_index_index_constituentsResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"integer"},"route":{"type":"string"},"index":{"type":"string"},"total":{"type":"integer"},"constituents":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"name":{"type":"string"},"lastPrice":{"oneOf":[{"type":"number"},{"type":"integer"}]},"netChange":{"oneOf":[{"type":"number"},{"type":"integer"}]},"changePercent":{"type":"number"},"marketCap":{"oneOf":[{"type":"integer"},{"type":"number"}]},"shares":{"type":"integer"},"float":{"type":"integer"},"rank":{"type":"integer"},"weight":{"type":"number"}},"required":["changePercent","float","lastPrice","marketCap","name","netChange","rank","shares","symbol","weight"]}}},"required":["as_of","constituents","index","route","total"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_symbol_ticker_viewResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"nullable":true},"route":{"type":"string"},"ticker":{"type":"string"},"view":{"type":"string"},"payload":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"symbolName":{"type":"string"},"displayEtfHoldings":{"type":"boolean"},"displayReturns":{"type":"boolean"},"mobileDevice":{"type":"boolean"}},"required":["displayEtfHoldings","displayReturns","mobileDevice","symbol","symbolName"]}},"required":["as_of","payload","route","ticker","view"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_symbol_ticker_quoteResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"integer"},"route":{"type":"string"},"ticker":{"type":"string"},"quote":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"symbolName":{"type":"string"},"lastPrice":{"type":"number"},"netChange":{"type":"number"},"changePercent":{"type":"number"},"prevClose":{"type":"number"},"trailingPe":{"type":"string"},"forwardPe":{"type":"string"},"dividendAmount":{"type":"number"},"dividendPercent":{"type":"number"},"marketCap":{"type":"string"},"trailingEps":{"type":"string"},"forwardEps":{"type":"string"},"displayEtfHoldings":{"type":"boolean"},"displayReturns":{"type":"boolean"}},"required":["changePercent","displayEtfHoldings","displayReturns","dividendAmount","dividendPercent","forwardEps","forwardPe","lastPrice","marketCap","netChange","prevClose","symbol","symbolName","trailingEps","trailingPe"]},"companion_etfs":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"name":{"type":"string"},"lastPrice":{"type":"number"},"netChange":{"type":"number"},"changePercent":{"type":"number"},"prevClose":{"type":"number"}},"required":["changePercent","lastPrice","name","netChange","prevClose","symbol"]}}},"required":["as_of","companion_etfs","quote","route","ticker"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_treasury_tenor_yieldResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"integer"},"route":{"type":"string"},"tenor":{"type":"string"},"current_yield":{"type":"number"},"treasury_yield_date":{"type":"string"},"treasury_list":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"treasuryType":{"type":"string"},"shortSymbol":{"type":"string"},"symbol":{"type":"string"},"title":{"type":"string"},"category":{"type":"string"},"weeks":{"type":"integer"},"active":{"type":"boolean"}},"required":["active","category","shortSymbol","symbol","title","treasuryType","weeks"]}},"chart_data":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"x":{"type":"string"},"y":{"oneOf":[{"type":"number"},{"type":"integer"}]}},"required":["x","y"]}},"companion_etfs":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"name":{"type":"string"},"lastPrice":{"type":"number"},"netChange":{"type":"number"},"changePercent":{"type":"number"},"prevClose":{"type":"number"}},"required":["changePercent","lastPrice","name","netChange","prevClose","symbol"]}}},"required":["as_of","chart_data","companion_etfs","current_yield","route","tenor","treasury_list","treasury_yield_date"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_etf_ark_ticker_holdingsResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"as_of":{"type":"string"},"route":{"type":"string"},"ticker":{"type":"string"},"total":{"type":"integer"},"holdings":{"type":"array","items":{}}},"required":["as_of","holdings","route","ticker","total"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"age_s":{"type":"integer"}},"required":["age_s","hit"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]},"scfin_get_index_sp500_returns_historyResponse":{"type":"object","additionalProperties":true,"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"year":{"type":"integer"},"total_return":{"oneOf":[{"type":"number"},{"type":"integer"}]}},"required":["total_return","year"]}},"total":{"type":"integer"},"first_year":{"type":"integer"},"last_year":{"type":"integer"}},"required":["first_year","last_year","rows","total"]},"meta":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string"},"source_url":{"type":"string"},"route":{"type":"string"},"generated_at":{"type":"string"},"cache":{"type":"object","additionalProperties":true,"properties":{"hit":{"type":"boolean"},"state":{"type":"string"},"age_s":{"type":"integer"}},"required":["age_s","hit","state"]},"request_id":{"type":"string"}},"required":["cache","generated_at","request_id","route","source","source_url"]}},"required":["data","meta","ok"]}}},"x-generated-at":"2026-06-07T01:30:59.456Z","x-source-api":"scfin","x-source-base-url":"https://api.scfin.bluedoor.sh"}