View as markdown
Endpoints · Signals

List a signal's occurrence events on one ticker

GEThttps://api.tickerbot.io/v2/signals/{signal}/{ticker}/events

Per-bar booleans (history) are useful for historical analysis; per-occurrence records are what you want for chart overlays and dashboards. This endpoint returns each *firing* of a signal on a ticker as a single row.

For state-style signals (above_sma_50, in_uptrend, at_52w_high, …) each row is a true-window: started_at is when the condition flipped false→true, ended_at is when it flipped back (or null if it's still true). start_price and end_price carry the price at the open/close of the window.

For event-style signals (golden_cross, gap_up, breakout, …) each row is a point firing: started_at is when the event fired and ended_at is the same value. start_price is the price at that bar.

This endpoint serves boolean flags only — occurrence spans come from the precomputed flag_events table, which exists only for built-in boolean flags. A numeric field (rsi_14, adx_14, …) has no on/off windows: to see it over time use …/history/{interval}; to find the days a numeric threshold held use /v2/scan?asof=. Custom (expression) signals have no precomputed spans and are rejected with 400.

Plan access

Included on every plan.

Rate limit

Hobby 600/min · Pro 6,000/min · Scale 60,000/min.

History

Replayable on every plan.

stringrequired

Built-in boolean flag name (e.g. `above_sma_50`, `golden_cross`). Numeric fields are not valid here; custom signals return 400.

stringrequired

Ticker symbol (case-insensitive).

integerdefault 2000

Max rows returned, newest first. Clamped to 5000.

integerdefault 0

Interval-union: contiguous windows whose gap is ≤ N seconds collapse into one (de-overlaps the writer's per-tick fragmentation). Default 0 = no merge.

200
{ as_of, ticker, signal, count, events: [...] }, newest-first. Each event carries started_at, ended_at (null while open), start_price, end_price, definition_version.
400
bad_request (invalid flag or ticker format), not_a_flag_signal (a numeric field like rsi_14 — use …/history or /v2/scan?asof=), or not_supported_for_custom_signal (custom signal name).
503
unavailable — the flag_events table is not present.