---
title: "AlphaAI earnings reads for one ticker, plus its next report date"
method: GET
path: "/api/symbols/{ticker}/earnings/"
tags: ["symbols"]
---

# AlphaAI earnings reads for one ticker, plus its next report date

`GET /api/symbols/{ticker}/earnings/`

Every published AlphaAI earnings read for the ticker, newest first, and
the date of its next report when the company has confirmed one.

A read is produced from the company's own SEC filing — an 8-K item 2.02
for US filers, a 6-K earnings release for foreign private issuers —
within minutes of it reaching EDGAR, and every number in it is verified
against the filing text before publication. `/earnings/latest/` returns
just a pointer to the newest one; this endpoint returns the analyses
themselves.

Bridges share classes: a request for one class returns the reads filed
under the issuer's primary class, and each row's `ticker` names the
class it was actually filed under, which may differ from the one you
asked for.

Unpaginated and capped at 20 reads. Depth is currently shallow by
construction — AlphaAI's own filing history starts in mid-June 2026 and
reports arrive quarterly — so most tickers carry one or two.

## Path parameters

- `ticker` string, required

## Response `200`

The ticker's earnings reads. An empty `reports` array is a normal answer, not an error: it means no read has been published yet.

- TickerEarningsHistory
  - `ticker` string, required — The requested ticker, normalized to upper case.
  - `reports` TickerEarningsReport[], required — Newest first, capped at 20. Empty when no read exists yet.
    - `uid` string, required — Article uid; the same read is served inline by /api/news/{uid}/.
    - `time_published` string, date-time, required
    - `title` string, required — The filing's own title.
    - `source_type` 'sec_form8k' | 'sec_form6k', required — `sec_form8k` for a US filer's item 2.02, `sec_form6k` for a foreign private issuer's earnings release.
    - `ticker` string, required — The share class the filing was actually made under, which is not always the one requested — SEC-sourced rows tag one class per issuer, so a GOOGL request carries reads filed under GOOG.
    - `fiscal_period` string, required
    - `analysis` EarningsReport, required — AlphaAI's own structured analysis of an earnings release (SEC Form 8-K item 2.02, or Form 6-K for a foreign private issuer — half-year and full-year periods, IFRS and non-USD figures copied as reported). Every figure was cross-checked against the filing text before storage; consensus estimates and price targets are omitted because they are not in the filing.
      - `company` string, required
      - `ticker` string, required
      - `fiscal_period` string, required
      - `period_end` string, nullable
      - `headline` string, required
      - `verdict` 'strong' | 'solid' | 'mixed' | 'weak', required
      - `verdict_reason` string
      - `key_metrics` object[], required
        - `name` string
        - `value` string
        - `basis` 'GAAP' | 'non-GAAP' | 'other'
        - `prior_year` string, nullable
        - `prior_quarter` string, nullable
        - `yoy_change` string, nullable
        - `qoq_change` string, nullable
      - `segments` object[]
        - `name` string
        - `revenue` string
        - `yoy_change` string, nullable
        - `qoq_change` string, nullable
        - `driver` string
      - `guidance` object, nullable
        - `period` string
        - `revenue` string, nullable
        - `gross_margin` string, nullable
        - `operating_expenses` string, nullable
        - `tax_rate` string, nullable
        - `other` string[]
      - `vs_prior_guidance` object[] — Reported figure vs the company's own prior outlook, when available.
        - `metric` string
        - `prior_guidance` string
        - `actual` string
        - `verdict` 'above' | 'in line' | 'below' | 'n/a'
      - `capital_returns` string[]
      - `balance_sheet_cash_flow` string[]
      - `drivers` string[]
      - `concerns` string[]
      - `what_to_watch` string[]
      - `quotes` object[]
        - `speaker` string
        - `role` string, nullable
        - `text` string
      - `analysis` string, required — Several paragraphs of grounded analysis.
      - `missing_items` string[] — What the filing did NOT state, named rather than guessed.
      - `numbers_verified_from_document` boolean
  - `next_report_date` string, date, nullable — Same field, same rules, as `next_report_date` on the symbol detail response: the company-confirmed date of the next report in America/New_York, or `null` when AlphaAI holds no confirmed one. Never an estimate.

## Other responses

- `400` — Malformed ticker.
- `401` — Missing or invalid API key.
- `404` — Unknown symbol — no listing owns this string (error code `unknown_symbol`). Look tickers up via `/api/symbols/?search=`.
- `429` — Rate limit exceeded — either the per-minute burst cap or the per-day volume cap. The `Retry-After` header tells you how long to wait (a burst block is short, ≤60s; a day-cap block is capped at 3600s — the true reset is `X-RateLimit-Reset`). The `X-RateLimit-*` trio shows the daily volume budget. The body's `extra` names your tier, its `limit_per_minute` / `limit_per_day`, `retry_after_seconds`, and — below Pro — an `upgrade` block with the higher tiers' caps and the pricing URL. A rejected request does not itself consume quota, so retrying after `Retry-After` costs you nothing extra.

## Changes

- **2026-08-28** `da7f6abbd922` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/alphai/apis/alphai-rest-api/changes/api/symbols/:ticker/earnings/get.md)

---

[API](https://skmtc.dev/alphai/apis/alphai-rest-api.md) · [All operations](https://skmtc.dev/alphai/apis/alphai-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/alphai/alphai-rest-api/revisions/da7f6abbd922/schema)
