{"openapi":"3.0.3","info":{"title":"Earnings Whispers Adapter API","version":"0.1.0","description":"Earnings Whispers adapter contract for bluedoor.\n\nEarnings Whispers-backed earnings sentiment and calendar routes.\n\nEarnings Whispers source API for bluedoor Financial Data.\nEarnings-sentiment source that complements exchange and fundamentals calendars.\nCoverage: Whisper EPS context; Top beat previews; Articles and grades; Sentiment and strategy summaries.\nGenerated from the live source contract and representative live API responses on 2026-06-07T01:30:59.456Z.","x-bluedoor-adapter":{"slug":"earnings-whispers","source_id":"ewfin","upstream":"earningswhispers.com","docs_url":"https://bluedoor.sh/adapters/earnings-whispers/docs"}},"servers":[{"url":"https://api.bluedoor.sh/adapters/earnings-whispers","description":"bluedoor adapter namespace"},{"url":"https://api.ewfin.bluedoor.sh","description":"Current source API host"}],"externalDocs":{"description":"Earnings Whispers adapter docs","url":"https://bluedoor.sh/adapters/earnings-whispers/docs"},"tags":[{"name":"Preview"}],"paths":{"/v1/articles/summaries":{"get":{"operationId":"ewfin_get_articles_summaries","summary":"Article summaries","parameters":[{"name":"refresh","in":"query","schema":{"type":"boolean"},"description":"Bypass the edge cache when truthy."},{"name":"x-ewfin-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."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ewfin_get_articles_summariesResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"earningswhispers","route":"articles_summaries","contract":"earningswhispers.articles.summaries","cache":"miss","identity_tier":"contact","ttl_seconds":600,"generated_at":"2026-06-07T01:35:27.791Z"},"data":{"articles":[{"art_no":1099,"art_date":"2026-06-01T00:00:00","art_type":"WR","tickers":["PANW","FIVE","IOT"],"title":"Rolling Recovery","summary":"It was the second-best May for earnings guidance in the past 25 years, which tells us where we are in the cycle and aligns with current investor sentiment.","image_name":null},{"art_no":281,"art_date":"2026-05-26T11:54:55","art_type":"GV","tickers":["MRVL","CRM","SNOW"],"title":"The Most Anticipated Earnings Releases for the Week of May 25, 2026","summary":"The most anticipated earnings releases for the week of May 25, 2026, are Marvell Technology #MRVL, Salesforce #CRM, Snowflake #SNOW, Dell Technologies #DELL, UiPath #PATH, Zscaler #ZS, MongoDB #MDB, Costco Wholesale #COST, Best Buy #BBY, and Sociedad Química y Minera de Chile S.A. #SQM.","image_name":"topcal20260525b.png"}]}}}}}}},"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 limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin circuit open or origin failure detected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"EwfinApiKey":[]}],"description":"Returns article summaries with source-native fields and identifiers.","x-source-api":"ewfin","x-source-name":"Earnings Whispers","x-source-upstream":"earningswhispers.com","x-docs-example-url":"https://api.ewfin.bluedoor.sh/v1/articles/summaries","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:27.809Z"}},"/v1/grades/summary":{"get":{"operationId":"ewfin_get_grades_summary","summary":"Grade summary","parameters":[{"name":"refresh","in":"query","schema":{"type":"boolean"},"description":"Bypass the edge cache when truthy."},{"name":"x-ewfin-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."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ewfin_get_grades_summaryResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"earningswhispers","route":"grades_summary","contract":"earningswhispers.grades.summary","cache":"hit","identity_tier":"contact","ttl_seconds":21600,"generated_at":"2026-06-07T00:13:44.967Z"},"data":{"grades":[{"grade":0,"total":5950,"first_date":"2003-01-15T00:00:00","last_date":"2026-03-23T00:00:00","quarter_return":0.0045,"extended_return":-0.0027,"success":2931,"extended_success":2786,"avg_spy":0.022},{"grade":1,"total":6834,"first_date":"2002-12-17T00:00:00","last_date":"2026-03-17T00:00:00","quarter_return":0.0121,"extended_return":0.0098,"success":3527,"extended_success":3454,"avg_spy":0.0236},{"grade":2,"total":8537,"first_date":"2002-12-17T00:00:00","last_date":"2026-03-25T00:00:00","quarter_return":0.0164,"extended_return":0.0147,"success":4565,"extended_success":4439,"avg_spy":0.0241}]}}}}}}},"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 limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin circuit open or origin failure detected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"EwfinApiKey":[]}],"description":"Returns grade summary with source-native fields and identifiers.","x-source-api":"ewfin","x-source-name":"Earnings Whispers","x-source-upstream":"earningswhispers.com","x-docs-example-url":"https://api.ewfin.bluedoor.sh/v1/grades/summary","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:28.058Z"}},"/v1/popular/expected-eps":{"get":{"operationId":"ewfin_get_popular_expected_eps","summary":"Popular expected EPS","parameters":[{"name":"refresh","in":"query","schema":{"type":"boolean"},"description":"Bypass the edge cache when truthy."},{"name":"x-ewfin-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."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ewfin_get_popular_expected_epsResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"earningswhispers","route":"popular_expected_eps","contract":"earningswhispers.popular.expected_eps","cache":"miss","identity_tier":"contact","ttl_seconds":900,"generated_at":"2026-06-07T01:35:28.734Z"},"data":{"events":[{"ticker":"ORCL","next_eps_date":"2026-06-10T00:00:00","whisper":2.01,"release_time":3,"eps_time":"2026-03-10T16:05:00","total_followers":96,"eps_impact":0.132558030700112,"avg_eps_move":0.1317},{"ticker":"ADBE","next_eps_date":"2026-06-11T00:00:00","whisper":5.85,"release_time":3,"eps_time":"2026-03-12T16:05:00","total_followers":27,"eps_impact":0.100918708240535,"avg_eps_move":0.0715},{"ticker":"FCEL","next_eps_date":"2026-06-08T00:00:00","whisper":-0.41,"release_time":1,"eps_time":"2026-03-09T07:30:00","total_followers":24,"eps_impact":0.252452394691287,"avg_eps_move":0.1345}]}}}}}}},"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 limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin circuit open or origin failure detected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"EwfinApiKey":[]}],"description":"Returns popular expected EPS with source-native fields and identifiers.","x-source-api":"ewfin","x-source-name":"Earnings Whispers","x-source-upstream":"earningswhispers.com","x-docs-example-url":"https://api.ewfin.bluedoor.sh/v1/popular/expected-eps","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:28.749Z"}},"/v1/preview/top-beat":{"get":{"operationId":"ewfin_get_preview_top_beat","summary":"Top beats","parameters":[{"name":"refresh","in":"query","schema":{"type":"boolean"},"description":"Bypass the edge cache when truthy."},{"name":"x-ewfin-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."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ewfin_get_preview_top_beatResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"earningswhispers","route":"preview_top_beat","contract":"earningswhispers.preview.top_beat","cache":"miss","identity_tier":"contact","ttl_seconds":600,"generated_at":"2026-06-07T01:35:29.067Z"},"data":{"ticker":"ACN","name":"Accenture Ltd.","news_date":"2026-06-18T00:00:00","subject":"Accenture is Expected to Beat Estimates","eps_summary":"Accenture (ACN) is confirmed to report earnings on Thursday, June 18, 2026 at approximately 6:40 AM ET. The consensus earnings estimate is $3.72 per share on revenue of $18.82 billion, respresenting 6.2% year-over-year revenue growth, and the Earnings Whisper (R) number is $3.77 per share. Investors are 23.5% bearish g..."}}}}}}},"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 limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin circuit open or origin failure detected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"EwfinApiKey":[]}],"description":"Returns top beats with source-native fields and identifiers.","tags":["Preview"],"x-source-api":"ewfin","x-source-name":"Earnings Whispers","x-source-upstream":"earningswhispers.com","x-docs-example-url":"https://api.ewfin.bluedoor.sh/v1/preview/top-beat","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:29.083Z"}},"/v1/preview/top-news":{"get":{"operationId":"ewfin_get_preview_top_news","summary":"Top news","parameters":[{"name":"refresh","in":"query","schema":{"type":"boolean"},"description":"Bypass the edge cache when truthy."},{"name":"x-ewfin-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."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ewfin_get_preview_top_newsResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"earningswhispers","route":"preview_top_news","contract":"earningswhispers.preview.top_news","cache":"miss","identity_tier":"contact","ttl_seconds":600,"generated_at":"2026-06-07T01:35:29.457Z"},"data":{"ticker":"RBRK","name":"Rubrik, Inc.","news_date":"2026-06-04T16:05:00","subject":"Rubrik Beat Expectations","eps_summary":"Rubrik (RBRK) reported earnings of $0.16 per share on  revenue of $387.07 million for the  fiscal first quarter ended April 2026.  The consensus estimate was a loss of $0.03 per share on  revenue of $366.15 million. The Earnings Whisper number was $0.02 per share. The company beat expectations by 700.00%."}}}}}}},"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 limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin circuit open or origin failure detected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"EwfinApiKey":[]}],"description":"Returns top news with source-native fields and identifiers.","tags":["Preview"],"x-source-api":"ewfin","x-source-name":"Earnings Whispers","x-source-upstream":"earningswhispers.com","x-docs-example-url":"https://api.ewfin.bluedoor.sh/v1/preview/top-news","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:29.476Z"}},"/v1/sentiment/top-heat":{"get":{"operationId":"ewfin_get_sentiment_top_heat","summary":"Sentiment heatmap","parameters":[{"name":"refresh","in":"query","schema":{"type":"boolean"},"description":"Bypass the edge cache when truthy."},{"name":"x-ewfin-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."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ewfin_get_sentiment_top_heatResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"earningswhispers","route":"sentiment_top_heat","contract":"earningswhispers.sentiment.top_heat","cache":"miss","identity_tier":"contact","ttl_seconds":600,"generated_at":"2026-06-07T01:35:30.984Z"},"data":{"rows":[{"ticker":"ORCL","company":"Oracle Corp.","total_followers":96,"avg_sentiment":0.3193,"next_eps_date":"2026-06-10T00:00:00","release_time":3,"confirm_date":"2026-06-01T16:04:47.38","sentiment":"Bullish"},{"ticker":"MU","company":"Micron Technology, Inc.","total_followers":95,"avg_sentiment":-0.0303,"next_eps_date":"2026-06-24T00:00:00","release_time":3,"confirm_date":"2026-05-27T16:28:46.867","sentiment":"Bearish"},{"ticker":"VSXY","company":"Victoria's Secret & Co.","total_followers":32,"avg_sentiment":0.2126,"next_eps_date":"2026-09-01T00:00:00","release_time":1,"confirm_date":null,"sentiment":"Bullish"}]}}}}}}},"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 limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin circuit open or origin failure detected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"EwfinApiKey":[]}],"description":"Returns sentiment heatmap with source-native fields and identifiers.","x-source-api":"ewfin","x-source-name":"Earnings Whispers","x-source-upstream":"earningswhispers.com","x-docs-example-url":"https://api.ewfin.bluedoor.sh/v1/sentiment/top-heat","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:31.003Z"}},"/v1/strategy/summary":{"get":{"operationId":"ewfin_get_strategy_summary","summary":"Strategy summary","parameters":[{"name":"strat","in":"query","schema":{"type":"string","default":"passing"},"description":"Strategy identifier (e.g. passing)."},{"name":"refresh","in":"query","schema":{"type":"boolean"},"description":"Bypass the edge cache when truthy."},{"name":"x-ewfin-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."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ewfin_get_strategy_summaryResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"earningswhispers","route":"strategy_summary","contract":"earningswhispers.strategy.summary","cache":"hit","identity_tier":"contact","ttl_seconds":21600,"generated_at":"2026-06-07T00:13:46.559Z"},"data":{"strategy":"passing","total":64308,"first_date":"2002-12-18T00:00:00","last_date":"2026-04-01T00:00:00","avg_move":0.0474,"success":37200,"success_rate":0.5784}}}}}}},"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 limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin circuit open or origin failure detected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"EwfinApiKey":[]}],"description":"Returns strategy summary with source-native fields and identifiers.","x-source-api":"ewfin","x-source-name":"Earnings Whispers","x-source-upstream":"earningswhispers.com","x-docs-example-url":"https://api.ewfin.bluedoor.sh/v1/strategy/summary","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:31.249Z"}},"/v1/tickers/{symbol}/chart":{"get":{"operationId":"ewfin_get_tickers_symbol_chart","summary":"Ticker chart","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","example":"NVDA"},"description":"Ticker symbol as used by Earnings Whispers."},{"name":"refresh","in":"query","schema":{"type":"boolean"},"description":"Bypass the edge cache when truthy."},{"name":"x-ewfin-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."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ewfin_get_tickers_symbol_chartResponse"},"examples":{"live":{"summary":"Live response","value":{"meta":{"provider":"earningswhispers","route":"ticker_chart","contract":"earningswhispers.ticker.chart","cache":"miss","identity_tier":"contact","ttl_seconds":900,"generated_at":"2026-06-07T01:35:31.841Z"},"data":{"symbol":"NVDA","rows":[{"quote_date":"2025-03-14T00:00:00","ticker":"NVDA","name":"NVIDIA Corp.","previous_close":121.67,"previous_open":118.61,"high":121.88,"low":118.15,"volume":277593400,"forward_eps":null,"arrow":null,"short_shares":null,"sentiment":null,"trader_status":null,"investor_status":null,"eps_open_date":null,"avwap":null},{"quote_date":"2025-03-17T00:00:00","ticker":"NVDA","name":"NVIDIA Corp.","previous_close":119.53,"previous_open":122.74,"high":122.89,"low":118.03,"volume":255501400,"forward_eps":null,"arrow":null,"short_shares":null,"sentiment":null,"trader_status":null,"investor_status":null,"eps_open_date":null,"avwap":null},{"quote_date":"2025-03-18T00:00:00","ticker":"NVDA","name":"NVIDIA Corp.","previous_close":115.43,"previous_open":118,"high":119.02,"low":114.54,"volume":299686900,"forward_eps":null,"arrow":null,"short_shares":null,"sentiment":null,"trader_status":null,"investor_status":null,"eps_open_date":null,"avwap":null}]}}}}}}},"400":{"description":"Bad request. A required parameter is missing, malformed, or outside the supported range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 400 error","value":{"ok":false,"error":{"code":"bad_request","message":"Required query parameter is missing or invalid."}}}}}}},"401":{"description":"Unauthorized. API-key authenticated tiers use an Authorization bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 401 error","value":{"ok":false,"error":{"code":"unauthorized","message":"A valid API key is required for this tier."}}}}}}},"404":{"description":"Not found. The requested route, resource, or symbol could not be resolved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 404 error","value":{"ok":false,"error":{"code":"not_found","message":"The requested resource was not found."}}}}}}},"405":{"description":"Method not allowed. Source API routes are documented as HTTP GET unless otherwise specified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 405 error","value":{"ok":false,"error":{"code":"method_not_allowed","message":"This route does not support the requested HTTP method."}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 429 error","value":{"ok":false,"error":{"code":"rate_limited","message":"Too many requests. Retry after the rate-limit reset."}}}}}}},"502":{"description":"Upstream source error. The source service rejected or failed the upstream request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 502 error","value":{"ok":false,"error":{"code":"upstream_error","message":"The upstream source returned an error."}}}}}}},"503":{"description":"Origin circuit open or origin failure detected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 503 error","value":{"ok":false,"error":{"code":"service_unavailable","message":"The service is temporarily unavailable."}}}}}}},"504":{"description":"Upstream timeout. The upstream source did not return within the source API timeout window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"default":{"summary":"HTTP 504 error","value":{"ok":false,"error":{"code":"upstream_timeout","message":"The upstream source timed out."}}}}}}}},"security":[{},{"ContactEmail":[]},{"BearerAuth":[]},{"EwfinApiKey":[]}],"description":"Returns ticker chart with source-native fields and identifiers.","x-source-api":"ewfin","x-source-name":"Earnings Whispers","x-source-upstream":"earningswhispers.com","x-docs-example-url":"https://api.ewfin.bluedoor.sh/v1/tickers/NVDA/chart","x-docs-example-status":200,"x-docs-captured-at":"2026-06-07T01:35:31.871Z"}}},"components":{"securitySchemes":{"ContactEmail":{"type":"apiKey","in":"header","name":"X-Ewfin-Contact"},"BearerAuth":{"type":"http","scheme":"bearer","description":"API keys are available by emailing sam@bluedoor.sh."},"EwfinApiKey":{"type":"apiKey","in":"header","name":"X-Ewfin-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}}},"ewfin_get_articles_summariesResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"cache":{"type":"string"},"identity_tier":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["cache","contract","generated_at","identity_tier","provider","route","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"articles":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"art_no":{"type":"integer"},"art_date":{"type":"string"},"art_type":{"type":"string"},"tickers":{"type":"array","items":{"type":"string"}},"title":{"type":"string"},"summary":{"type":"string"},"image_name":{"oneOf":[{"nullable":true},{"type":"string"}]}},"required":["art_date","art_no","art_type","image_name","summary","tickers","title"]}}},"required":["articles"]}},"required":["data","meta"]},"ewfin_get_grades_summaryResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"cache":{"type":"string"},"identity_tier":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["cache","contract","generated_at","identity_tier","provider","route","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"grades":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"grade":{"type":"integer"},"total":{"type":"integer"},"first_date":{"type":"string"},"last_date":{"type":"string"},"quarter_return":{"type":"number"},"extended_return":{"type":"number"},"success":{"type":"integer"},"extended_success":{"type":"integer"},"avg_spy":{"type":"number"}},"required":["avg_spy","extended_return","extended_success","first_date","grade","last_date","quarter_return","success","total"]}}},"required":["grades"]}},"required":["data","meta"]},"ewfin_get_popular_expected_epsResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"cache":{"type":"string"},"identity_tier":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["cache","contract","generated_at","identity_tier","provider","route","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"events":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"ticker":{"type":"string"},"next_eps_date":{"type":"string"},"whisper":{"type":"number"},"release_time":{"type":"integer"},"eps_time":{"type":"string"},"total_followers":{"type":"integer"},"eps_impact":{"type":"number"},"avg_eps_move":{"type":"number"}},"required":["avg_eps_move","eps_impact","eps_time","next_eps_date","release_time","ticker","total_followers","whisper"]}}},"required":["events"]}},"required":["data","meta"]},"ewfin_get_preview_top_beatResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"cache":{"type":"string"},"identity_tier":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["cache","contract","generated_at","identity_tier","provider","route","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"ticker":{"type":"string"},"name":{"type":"string"},"news_date":{"type":"string"},"subject":{"type":"string"},"eps_summary":{"type":"string"}},"required":["eps_summary","name","news_date","subject","ticker"]}},"required":["data","meta"]},"ewfin_get_preview_top_newsResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"cache":{"type":"string"},"identity_tier":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["cache","contract","generated_at","identity_tier","provider","route","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"ticker":{"type":"string"},"name":{"type":"string"},"news_date":{"type":"string"},"subject":{"type":"string"},"eps_summary":{"type":"string"}},"required":["eps_summary","name","news_date","subject","ticker"]}},"required":["data","meta"]},"ewfin_get_sentiment_top_heatResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"cache":{"type":"string"},"identity_tier":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["cache","contract","generated_at","identity_tier","provider","route","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"ticker":{"type":"string"},"company":{"type":"string"},"total_followers":{"type":"integer"},"avg_sentiment":{"type":"number"},"next_eps_date":{"type":"string"},"release_time":{"type":"integer"},"confirm_date":{"oneOf":[{"type":"string"},{"nullable":true}]},"sentiment":{"type":"string"}},"required":["avg_sentiment","company","confirm_date","next_eps_date","release_time","sentiment","ticker","total_followers"]}}},"required":["rows"]}},"required":["data","meta"]},"ewfin_get_strategy_summaryResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"cache":{"type":"string"},"identity_tier":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["cache","contract","generated_at","identity_tier","provider","route","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"strategy":{"type":"string"},"total":{"type":"integer"},"first_date":{"type":"string"},"last_date":{"type":"string"},"avg_move":{"type":"number"},"success":{"type":"integer"},"success_rate":{"type":"number"}},"required":["avg_move","first_date","last_date","strategy","success","success_rate","total"]}},"required":["data","meta"]},"ewfin_get_tickers_symbol_chartResponse":{"type":"object","additionalProperties":true,"properties":{"meta":{"type":"object","additionalProperties":true,"properties":{"provider":{"type":"string"},"route":{"type":"string"},"contract":{"type":"string"},"cache":{"type":"string"},"identity_tier":{"type":"string"},"ttl_seconds":{"type":"integer"},"generated_at":{"type":"string"}},"required":["cache","contract","generated_at","identity_tier","provider","route","ttl_seconds"]},"data":{"type":"object","additionalProperties":true,"properties":{"symbol":{"type":"string"},"rows":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"quote_date":{"type":"string"},"ticker":{"type":"string"},"name":{"type":"string"},"previous_close":{"oneOf":[{"type":"number"},{"type":"integer"}]},"previous_open":{"oneOf":[{"type":"number"},{"type":"integer"}]},"high":{"oneOf":[{"type":"number"},{"type":"integer"}]},"low":{"oneOf":[{"type":"number"},{"type":"integer"}]},"volume":{"type":"integer"},"forward_eps":{"nullable":true},"arrow":{"oneOf":[{"nullable":true},{"type":"string"}]},"short_shares":{"nullable":true},"sentiment":{"nullable":true},"trader_status":{"nullable":true},"investor_status":{"nullable":true},"eps_open_date":{"nullable":true},"avwap":{"nullable":true}},"required":["arrow","avwap","eps_open_date","forward_eps","high","investor_status","low","name","previous_close","previous_open","quote_date","sentiment","short_shares","ticker","trader_status","volume"]}}},"required":["rows","symbol"]}},"required":["data","meta"]}}},"x-generated-at":"2026-06-07T01:30:59.456Z","x-source-api":"ewfin","x-source-base-url":"https://api.ewfin.bluedoor.sh"}