List a signal's occurrence events on one ticker
https://api.tickerbot.io/v2/signals/{signal}/{ticker}/eventsPer-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.
Query parameters
stringrequiredBuilt-in boolean flag name (e.g. `above_sma_50`, `golden_cross`). Numeric fields are not valid here; custom signals return 400.
stringrequiredTicker symbol (case-insensitive).
integerdefault 2000Max rows returned, newest first. Clamped to 5000.
integerdefault 0Interval-union: contiguous windows whose gap is ≤ N seconds collapse into one (de-overlaps the writer's per-tick fragmentation). Default 0 = no merge.
Status codes
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.400bad_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).503unavailable — the flag_events table is not present.