Earnings
https://api.tickerbot.io/ v2/ events?kind=earningsQuarterly earnings reports, one event per report, timestamped at the date the results were announced.
Query parameters
stringrequiredfixed by this pageFix to earnings for this view (comma-combine kinds to merge timelines).
stringSingle symbol. Beats tickers when both are passed.
string[]Comma-separated symbols, up to 50. Not combinable with universe; ticker wins when both are passed.
stringSystem or caller-owned universe slug.
stringYYYY-MM-DD or ISO timestamp (inclusive). since is accepted as an alias.
stringYYYY-MM-DD or ISO timestamp — a bare YYYY-MM-DD means through the end of that day; timestamps are exclusive. until is accepted as an alias.
stringSQL filter. This kind's payload fields are first-class typed columns here: reported_eps, estimated_eps, surprise, surprise_pct (numeric), fiscal_period_end (date), report_time (text) — e.g. surprise_pct > 10. payload->>'…' works too. Base columns: ticker, ts, kind, payload. See the signals catalog for columns + flags you can compose.
integerdefault 50Rows per page. Max 1000.
stringOpaque cursor from the previous response.
Returns
as_ofstringServer time this response was assembled (ISO 8601).
queryobjectYour filters, echoed.
countnumberRows in this page.
next_cursorstringOpaque token for the next page; `null` on the last page. Pass it back as `cursor`.
resultsarrayOne row per event, newest first.
tickerstringSymbol that reported.
tsstringReport date as an ISO timestamp — the event's timeline position.
kindstringAlways `earnings` on this view.
payloadobjectThe report.
fiscal_period_endstringLast day of the fiscal quarter the report covers (`YYYY-MM-DD`).
reported_epsnumberoptionalEPS as reported. `null` when the company hasn't disclosed a comparable figure.
estimated_epsnumberoptionalConsensus estimate going in; `null` for uncovered names.
surprisenumberoptionalreported − estimated, as the vendor computed it (stored, not re-derived).
surprise_pctnumberoptionalThe surprise as a percentage of the estimate; `null` when there was no estimate.
report_timestringoptionalWhen in the session the report landed — `pre-market` or `post-market`.
Notes
- This is
GET /v2/eventswithkind=earnings; it has its own page because the payload is its own contract. The full query grammar (q,group_by/select/having,join=state, cursor rules) lives there and applies here unchanged. - Reports only, not a calendar: events land when results are announced (timestamped at the report date), so there are no future-dated rows.
surpriseandsurprise_pctare the vendor's own arithmetic, stored as published — they are not recomputed from the two EPS fields.reported_eps/estimated_epsarenullwhere no comparable figure or estimate exists;fiscal_period_enddates the quarter the report covers. Latency: daily, via the evening ET ingestion pipeline. - To be pushed instead of polling, create an event-trigger webhook:
POST /v2/webhookswithtrigger.kinds=earnings. - For fundamentals as *state* — EPS and statement columns on an aligned quarterly grid rather than report events — use
GET /v2/seriesatinterval=1q.
More examples
curl "https://api.tickerbot.io/v2/events?kind=earnings&ticker=NVDA&from=2026-01-23" \
-H "Authorization: Bearer YOUR_KEY"// Same envelope — NVDA's reports, newest first.