{
  "openapi": "3.0.3",
  "info": {
    "title": "ewfin API Reference",
    "version": "0.1.0",
    "description": "Earnings 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."
  },
  "servers": [
    {
      "url": "https://api.ewfin.bluedoor.sh",
      "description": "ewfin source API"
    }
  ],
  "externalDocs": {
    "description": "Earnings Whispers source API docs",
    "url": "https://bluedoor.sh/apis/financial-data/sources/ewfin"
  },
  "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"
}
