Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

io.github.tickerbot/mcp-server

REMOTE · API.TICKERBOT.IO · 2 COMPONENTS · SCANNED AUG 3

The stock market, in SQL — scan, replay, or subscribe across ~12k US tickers and top 100 cryptos.

+7 this week 74 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability66
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6122 tokens (~170/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Capabilities20
  • Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · api.tickerbot.io

# add to Claude Code
claude mcp add --transport http tickerbot-mcp-server https://api.tickerbot.io/mcp
# ~/.codex/config.toml
[mcp_servers.tickerbot-mcp-server]
url = "https://api.tickerbot.io/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tickerbot-mcp-server": {
      "type": "remote",
      "url": "https://api.tickerbot.io/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add tickerbot-mcp-server --url https://api.tickerbot.io/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  tickerbot-mcp-server:
    url: "https://api.tickerbot.io/mcp"
// mcp.json
{
  "mcpServers": {
    "tickerbot-mcp-server": {
      "type": "http",
      "url": "https://api.tickerbot.io/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Aug 26 +5
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 31 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Jul 26 0
    • Schema quality: 135 → 170 functional
  • 27 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 67

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://api.tickerbot.io/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=api.tickerbot.io CN=YE1,O=Let's Encrypt,C=US 14 Jul 2026 12 Oct 2026 ECDSA 256 ECDSA-SHA384 5dc051e90017a104dbf91596709864a1b2a
SANs: api.tickerbot.io
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd
DNSSEC insecure

Validation of api.tickerbot.io. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
io. present 57355 8 Verified
tickerbot.io. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer realm="mcp", resource_metadata="https://api.tickerbot.io/.well-known/oauth-protected-resource"

Bearer realm="mcp", resource_metadata="https://api.tickerbot.io/.well-known/oauth-protected-resource"

Protected resource metadata

Document https://api.tickerbot.io/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://api.tickerbot.io/mcp
Authorisation server https://api.tickerbot.io
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.tickerbot.io/mcp Verified 200
http (plaintext) http://api.tickerbot.io/mcp HTTPS enforced 301 https://api.tickerbot.io/mcp
MCP tools — 36 exposed · ~6,122 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
tickerbot_create_custom_signal ~68

Save a SQL WHERE expression as a named custom signal the caller can reference by name in future scans.

NameTypeReqDescription
descriptionstringOptional human description.
exprstringyesSQL WHERE expression. Same grammar as scan `q`.
namestringyesSnake_case identifier.

No output schema declared.

No examples provided.

tickerbot_create_universe ~92

Create a new universe (named set of tickers) for scoping future scans.

NameTypeReqDescription
descriptionstringOptional free-form notes.
idstringOptional slug (lowercase letters, digits, underscore). Auto-generated from name if omitted. Must be unique within the account.
namestringyesHuman-readable name.
tickersarrayyesList of ticker symbols.

No output schema declared.

No examples provided.

tickerbot_delete_custom_signal ~97

Delete one of the caller's custom signals. Cascade-safe by default: refused with 409 if another custom signal references it (the error lists the referencing signals). Pass `force: true` to delete anyway — existing references will break on next recompile. Available on every plan.

NameTypeReqDescription
forcebooleanWhen true, skip the reference check and delete anyway. Default false.
namestringyesCustom signal slug.

No output schema declared.

No examples provided.

tickerbot_delete_universe ~67

Delete one of the caller's universes. System universes (`top_10`/`top_100`) cannot be deleted. Webhooks that reference the deleted universe will fail on their next eval, so clean those up first.

NameTypeReqDescription
idstringyesUniverse slug.

No output schema declared.

No examples provided.

tickerbot_delete_webhook ~50

Delete a webhook subscription by id. Use after listing webhooks when the user wants to remove an alert.

NameTypeReqDescription
idstringyesWebhook id (looks like `wh_…`).

No output schema declared.

No examples provided.

tickerbot_enable_webhook ~68

Re-enable a disabled webhook — flips it back to `active` and clears its match-state so the next eval treats every currently-matching ticker as new. Use after fixing whatever caused auto-disable. No-op on an already-active webhook.

NameTypeReqDescription
idstringyesWebhook id.

No output schema declared.

No examples provided.

tickerbot_explain_scan ~195

Dry-run a scan query WITHOUT executing it: validates the SQL, shows the compiled predicate after custom-signal expansion, resolves universe scope and (for asof) the serving tier, and returns the planner cost/row estimate. Always returns 200 — failures come back as { valid: false, stage, error, message }. Use before subscribing a query or to debug invalid_query errors.

NameTypeReqDescription
asofstringOptional — explain the point-in-time form; reports the serving tier.
fieldsstringExtra columns to validate.
group_bystringOptional — explain aggregate mode.
havingstringAggregate filter (with group_by).
orderstringSort column to validate.
qstringyesThe scan predicate to explain.
selectstringAggregate output items (with group_by).
universestringOptional universe slug to resolve.

No output schema declared.

No examples provided.

tickerbot_get_signal_history ~116

Get the time series of one signal for one ticker at a chosen interval (1m, 1h, 1d, 1w).

NameTypeReqDescription
cursorstringOpaque cursor.
fromstringEarliest bar timestamp.
intervalstringyesBar interval (`1q` = quarterly, for fundamentals).
limitintegerPage size.
signalstringyesColumn name.
tickerstringyesSymbol.
tostringLatest bar timestamp.

No output schema declared.

No examples provided.

tickerbot_get_signals_match ~194

Find tickers that match a single signal right now (or at a past moment with `asof`). Booleans need no condition. Numerics need a `condition` like ">70" or "<=200". Sorted by signal value desc for numerics.

NameTypeReqDescription
asofstringOptional YYYY-MM-DD or ISO timestamp. Date-only matches daily state; a timestamp matches the finest intraday state covering the query.
conditionstringRequired for numerics. Single bound: <op><value>, ops in (>, >=, =, !=, <, <=).
cursorstringOpaque cursor.
limitintegerPage size. Max 200. Default 50.
signalstringyesColumn name on ticker (e.g. golden_cross_today, rsi_14, market_cap).
universestringOptional universe slug.

No output schema declared.

No examples provided.

tickerbot_get_ticker ~190

Get the full current row for one ticker — every column on the schema (price, change, indicators like rsi_14, every boolean flag like above_sma_50, fundamentals like pe_ratio). Pass `asof` (YYYY-MM-DD or ISO timestamp like 2026-07-20T15:30:00Z) for the row as it stood at that past moment — date-only gives the close of that day.

NameTypeReqDescription
asofstringOptional YYYY-MM-DD or ISO timestamp. Date-only returns the row at close of that day; a timestamp returns the row as of that moment (finest tier covering each column).
tickerstringyesSymbol. Case-insensitive. Equities: bare symbol (AAPL). Crypto: X-prefixed pair (X:BTCUSD) — bare BTC/ETH are US-listed ETFs, not spot crypto.

No output schema declared.

No examples provided.

tickerbot_get_ticker_bars ~242

Get OHLCV (open/high/low/close/volume) bars for one or more symbols at a given interval, oldest-first. Pass a comma-separated `ticker` list (up to 50) for a bulk response keyed by symbol. Use `asof` for a single point-in-time bar, or `before`+`limit` to back-page. `1d`/`1h` cover the full universe with full history; sub-hour intervals back-fill on demand.

NameTypeReqDescription
asofstringReturn a single bar as of this date/timestamp (point-in-time).
beforestringReturn the N bars ending strictly before this date/timestamp (YYYY-MM-DD or epoch-ms) — back-paging.
cursorstringContinuation token from a prior response's `next_cursor` (sugar for `before`).
intervalstringyesBar interval.
limitintegerMost-recent N bars. Default 100.
tickerstringyesSymbol, or comma-separated list (up to 50) for a bulk response keyed by symbol.

No output schema declared.

No examples provided.

tickerbot_get_ticker_events ~140

Get the discrete corporate-event log for one ticker — dividends, splits, and insider transactions — merged newest-first. (Analyst rating changes are NOT here; they are a separate feed.) Optional `kind` filter and `before` back-paging.

NameTypeReqDescription
beforestringReturn events strictly before this date (YYYY-MM-DD) — back-paging. Pass the previous response's `next_cursor`.
kindstringFilter by event kind. Omit for all three merged into one timeline.
limitintegerPage size. Max 1000. Default 100.
tickerstringyesSymbol.

No output schema declared.

No examples provided.

tickerbot_get_ticker_history ~104

Time-travel SNAPSHOT: the full wide row for one ticker as it stood at a past date (one row, not a series — for a multi-column time SERIES use tickerbot_get_ticker_history_series). Returns indicators, boolean flags, and the most-recent fundamentals known on that date. Unlimited depth on every plan.

NameTypeReqDescription
asofstringyesTarget date as YYYY-MM-DD or full ISO timestamp.
tickerstringyesSymbol.

No output schema declared.

No examples provided.

tickerbot_get_ticker_history_series ~232

Multi-column time SERIES for one ticker: pick up to 25 columns and get one flat row per interval step ({t, price, rsi_14, …}), chronological, cursor-paged backward. The transpose of tickerbot_get_signal_history (one column, one ticker → that; many columns, one ticker → this). All-time on every plan. Replaces looping asof snapshots per date.

NameTypeReqDescription
cursorstringOpaque cursor from a prior response — pages older.
fieldsstringComma list of columns (max 25). Defaults to a small set intersected with the interval's schema (intraday tiers carry fewer columns than daily — e.g. market_cap is daily-only).
fromstringEarliest timestamp (inclusive), YYYY-MM-DD or ISO.
intervalstringyesSeries granularity.
limitintegerRows per page. Max 1000. Default 252.
tickerstringyesTicker symbol, e.g. NVDA.
tostringLatest timestamp (inclusive).

No output schema declared.

No examples provided.

tickerbot_get_ticker_holdings ~107

Get an ETF's constituent holdings and their weights, heaviest first. When the ticker is not an ETF, `is_etf` is false and `holdings` is empty. (The reverse lookup "which ETFs hold NVDA" is a scan filter on the `etf_holders` column, not this tool.)

NameTypeReqDescription
limitintegerMax holdings returned. Max 5000. Default 500.
tickerstringyesETF symbol.

No output schema declared.

No examples provided.

tickerbot_get_ticker_sectors ~59

Get an ETF's sector allocation (sector weights, heaviest first). When the ticker is not an ETF, `is_etf` is false and `sectors` is empty.

NameTypeReqDescription
tickerstringyesETF symbol.

No output schema declared.

No examples provided.

tickerbot_get_universe ~31

Get one universe by slug, including its ticker list.

NameTypeReqDescription
idstringyesUniverse slug.

No output schema declared.

No examples provided.

tickerbot_get_webhook ~63

Fetch one webhook subscription by id (current state, match-set, schedule). Account-scoped: any key on the account can read any of the account's webhooks.

NameTypeReqDescription
idstringyesWebhook id (looks like `wh_…`).

No output schema declared.

No examples provided.

tickerbot_list_analyst_events ~300

List per-event analyst rating history (upgrades, downgrades, initiations, price-target changes) from the analyst_events archive (history back to 2012). Available on every plan. Filters are AND-combined and at least one of `ticker`, `tickers`, `since`, `until`, `firm`, or `action` is required (an unfiltered full scan is rejected). Results are newest-first; page older with `cursor` (which ignores every filter except `limit`). Each row has ticker, timestamp, firm, analyst, action, rating, previous_rating, price_target, previous_price_target, price_target_action, importance.

NameTypeReqDescription
actionstringExact rating-action filter.
cursorstringOpaque cursor from a prior response. Ignores all filters except `limit`.
firmstringCase-insensitive analyst-firm match, e.g. "Morgan Stanley".
limitintegerPage size. Max 1000 on every plan.
sincestringEvents at or after this ISO date/datetime.
tickerstringSingle-ticker filter, e.g. AAPL. Takes precedence over `tickers`.
tickersstringComma-separated tickers, max 50, e.g. AAPL,NVDA,MSFT.
untilstringEvents strictly before this ISO date/datetime.

No output schema declared.

No examples provided.

tickerbot_list_events ~570

One timeline over every event log, cross-ticker: dividends, splits, insider transactions, and analyst actions ("all splits this month", "every analyst action in my universe this week"). Rows are { ticker, ts, kind, payload }, newest first; payloads match the per-ticker events and analyst-events tools. Speaks the SQL grammar over exactly (ticker, ts, kind, payload jsonb): optional `q` filters (e.g. kind='analyst' AND payload->>'action'='downgrades'), and `group_by`/`select`/`having` roll the stream up (e.g. group_by=payload->>'firm' AS firm — aggregates return `truncated: true` instead of paginating). Requires at least one bound: a ticker scope (ticker/tickers/universe) or a time window (since/until) — q alone is not a bound. For single-ticker history prefer tickerbot_get_ticker_events; for simple firm/action filtering prefer tickerbot_list_analyst_events.

NameTypeReqDescription
cursorstringOpaque cursor from a prior response — carries the original filters, pass it alone (long q values must be resent alongside it).
dirstringAggregate-mode sort direction.
group_bystringComma list of rollup keys — switches to aggregate rows, e.g. payload->>'firm' AS firm, or kind.
havingstringPost-aggregation filter (requires group_by), e.g. COUNT(*) > 5.
kindstringComma list of kinds to include (default all): dividend, split, insider, analyst.
limitintegerPage size. Max 1000.
orderstringAggregate-mode sort column/alias. Default: events.
qstringSQL WHERE over (ticker, ts, kind, payload jsonb) — ONLY those four identifiers. Payload fields via jsonb operators: payload->>'firm' = 'Goldman Sachs', (payload->>'shares')::numeric > 1e6.
selectstringAggregate-mode output columns (requires group_by). Default: group keys + COUNT(*) AS events.
sincestringEvents at or after this ISO date/datetime.
tickerstringSingle-ticker filter, e.g. AAPL.
tickersstringComma-separated tickers, max 50. Mutually exclusive with `universe`.
universestringUniverse slug (top_10, top_100, or a saved one) to scope the stream. Mutually exclusive with `tickers`.
untilstringEvents strictly before this ISO date/datetime.

No output schema declared.

No examples provided.

tickerbot_list_signal_events ~84

Discrete firings of a boolean signal for one ticker, newest-first.

NameTypeReqDescription
cursorstringOpaque cursor.
fromstringEarliest event timestamp.
limitintegerPage size.
signalstringyesBoolean signal column.
tickerstringyesSymbol.
tostringLatest event timestamp.

No output schema declared.

No examples provided.

tickerbot_list_signals_catalog ~146

List the unified signal catalog: every built-in column on the schema (`kind: builtin`) plus the caller's custom signals (`kind: expression`). Built-in rows carry the audited spec metadata — description, category, update cadence, ticker coverage (`ticker_scope`), history depth (`history`/`history_since`), queryable resolutions, and asset classes. Use to discover what `q=` clauses and signal names are available before composing a scan.

NameTypeReqDescription
cursorstringOpaque cursor.
kindstringFilter by kind. Omit for both.
limitintegerPage size for custom slice. Max 200. Default 50.

No output schema declared.

No examples provided.

tickerbot_list_system_universes ~81

List the built-in system universes (`top_10`, `top_100` — the most-actively-traded tickers by 30-day trailing dollar volume, rebalanced monthly). Available to every account regardless of plan. Use these slugs as `universe` in scans/signals or `universe_id` when subscribing.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

tickerbot_list_tickers ~247

List active tickers from the Tickerbot universe (~12,000 US equities + top 100 crypto). Use `tickers` for bulk lookup of named symbols (returns full rows); otherwise walks the universe alphabetically with `cursor` pagination. Supports filters: search, asset_type, exchange, sector, min_market_cap.

NameTypeReqDescription
asset_typestringFilter by asset type (e.g. "equity", "crypto").
cursorstringOpaque cursor from a prior response.
exchangestringFilter by exchange (e.g. "XNYS", "XNAS", "BATS").
limitintegerPage size. Max 1000. Default 50.
min_market_capnumberMinimum market cap in USD. Orders results by market_cap desc.
searchstringCase-insensitive substring filter on ticker/name. Orders results by market_cap desc.
sectorstringExact-match sector filter (e.g. "Technology").
tickersstringComma-separated symbols (max 50). When set, returns full rows for these symbols and pagination params are ignored.

No output schema declared.

No examples provided.

tickerbot_list_universes ~137

List universes — your saved ones and/or the built-in system universes (top_10, top_100). Filter with `owner` (like the signals catalog's `kind`): `me` (default, your own), `system` (built-ins), or `all` (both). Each row carries `system: true|false`.

NameTypeReqDescription
cursorstringOpaque cursor.
limitintegerPage size (applies to your own; system universes are a small fixed set returned in full on the first page).
ownerstringWhich universes to list.

No output schema declared.

No examples provided.

tickerbot_list_webhook_deliveries ~102

List recent deliveries (pings and fires) for a webhook, newest-first — for diagnosing failures. Returns metadata only (status, attempt, response code, error); the POST body is not stored.

NameTypeReqDescription
cursorstringOpaque cursor.
idstringyesWebhook id.
limitintegerPage size. Max 100. Default 50.
statusstringFilter by delivery status.

No output schema declared.

No examples provided.

tickerbot_list_webhooks ~82

List the caller's webhook subscriptions (rules created via the subscribe tools), newest-first. Use `status` to filter to active or disabled rules.

NameTypeReqDescription
cursorstringOpaque cursor.
limitintegerPage size. Max 100. Default 50.
statusstringFilter by status. Omit for all.

No output schema declared.

No examples provided.

tickerbot_scan ~433

Run a SQL WHERE clause against the live ticker universe (or against a past moment with `asof` — unlimited depth on every plan). Returns matching tickers sorted by chosen column, OR — with `group_by` — aggregate rollups instead of rows (breadth stats: "count of tickers above their 200dma by sector", "median RSI by sector on 2026-03-03"). The `q` grammar is a flat WHERE: column names from the schema, AND/OR/NOT, comparison operators, numeric/string literals. No JOIN or subqueries. Example: `gap_up AND market_cap < 2000000000 AND NOT earnings_this_week`.

NameTypeReqDescription
asofstringOptional YYYY-MM-DD or ISO timestamp for a historical scan. Unlimited depth on every plan.
cursorstringOpaque cursor (row mode only).
dirstringSort direction.
fieldsstringComma-separated extra columns to include (row mode only).
group_bystringAGGREGATE MODE: 1–6 comma-separated group keys (columns or expressions, e.g. `sector`). Results become rollup rows instead of tickers.
havingstringAggregate filter (requires group_by). Example: `COUNT(*) >= 10`.
limitintegerPage size. Max 100. Default 50. Aggregate mode does not paginate — response sets `truncated: true` when groups were cut.
orderstringSort column. Default day_change_pct (rows) / tickers (aggregate).
qstringyesSQL WHERE expression. Max 4000 chars.
selectstringAggregate output items (requires group_by). Default: group keys + COUNT(*) AS tickers. Aggregates: count/avg/sum/min/max/stddev/string_agg + FILTER (WHERE …). Alias items with AS. Example: `sector, C…
universestringOptional universe slug.

No output schema declared.

No examples provided.

tickerbot_search_news ~274

Search the news archive (back to 2015) with a SQL WHERE clause. Available on every plan. Columns on news_article include `time_published`, `title`, `summary`, `source`, `source_domain`, `category`, `authors`, `topics`, `tickers` (array), `overall_sentiment_score`, `overall_sentiment_label`, `url`. To filter to one ticker use `'NVDA' = ANY(tickers)` or the auto-unnest alias `tk = 'NVDA'`. Example: `q=tk='NVDA' AND time_published >= NOW() - INTERVAL '1 day'`. Supports group_by + having for aggregation (e.g. count of articles per day).

NameTypeReqDescription
cursorstringOpaque cursor.
dirstringSort direction.
group_bystringComma-separated columns for aggregation.
havingstringWHERE-style filter on aggregates. Requires group_by.
limitintegerPage size.
orderstringSort column or SELECT alias. Default time_published (non-aggregate) or volume (aggregate).
qstringyesSQL WHERE on news_article. Required.
selectstringComma-separated columns to include. Defaults to a slim set.

No output schema declared.

No examples provided.

tickerbot_subscribe_events ~412

Create an event-trigger webhook: fires when NEW events land — dividends, splits, insider filings, analyst actions ("every split in my universe", "Goldman downgrades on large caps"). TWO composable filters: `q` filters the event's TICKER STATE (market_cap > 1e10); `event_q` filters the EVENT CONTENT in the /v2/events grammar (payload->>'firm' = 'Goldman Sachs'). Paid plans (webhook slots). Deliveries carry event: "events.fired" with an events array. Latency = ingest cadence: analyst ≤1h, corporate kinds daily — NOT sub-minute like state webhooks.

NameTypeReqDescription
channelstringDelivery channel.
device_idstringRegistered device id (channel mobile_push).
discord_urlstringDiscord incoming-webhook URL (channel discord).
event_qstringOptional event-CONTENT filter over (ticker, ts, kind, payload jsonb) — only those four identifiers, e.g. payload->>'firm' = 'Goldman Sachs' AND payload->>'action' = 'downgrades'.
kindsstringyesComma list of kinds to fire on — any of: dividend, split, insider, analyst (e.g. "split,analyst"). NOTE: no enum here on purpose — a scalar enum would reject multi-kind values.
namestringDisplay name.
qstringOptional row-STATE filter evaluated against the event's ticker at fire time, e.g. market_cap > 1e10.
target_urlstringHTTPS delivery URL. Omit for in-app delivery.
tickersstringScope to specific tickers (comma list, max 50). Mutually exclusive with universe; omit both for all tickers.
universestringScope to a universe slug (top_10, top_100, or a saved one).

No output schema declared.

No examples provided.

tickerbot_subscribe_scan ~257

Register a webhook that fires when matches for a scan query change. Pass `target_url` for an https POST, or `channel:"discord"` + `discord_url` to post an embed to Discord; omit for in-app delivery in the dashboard. `cadence` is real-time (1m) by default; throttle to hourly or nyse_open. Use to satisfy "alert me when this happens" prompts.

NameTypeReqDescription
cadencestringEvaluation cadence.
channelstringDelivery channel: `webhook` (POST to target_url), `discord` (embed to discord_url), or `in_app` (dashboard only). Inferred from the URL you pass if omitted.
discord_urlstringDiscord incoming-webhook URL (https://discord.com/api/webhooks/…). Required when channel is "discord".
namestringHuman-readable label. Defaults to a truncated version of the query.
qstringyesSQL WHERE expression — same grammar as scan.
target_urlstringOptional https URL to POST matches to (the `webhook` channel). Omit for in-app delivery.
universestringOptional universe slug to scope the watch.

No output schema declared.

No examples provided.

tickerbot_subscribe_signal ~278

Register a webhook that fires when a signal turns true (booleans) or its value crosses a condition (numerics). Optional `ticker` restricts to one symbol; omit to watch the whole universe. Pass `target_url` for an https POST, or `channel:"discord"` + `discord_url` to post to Discord; omit for in-app.

NameTypeReqDescription
cadencestringEvaluation cadence.
channelstringDelivery channel: `webhook` (POST to target_url), `discord` (embed to discord_url), or `in_app` (dashboard only). Inferred from the URL you pass if omitted.
conditionstringRequired for numerics: single bound like ">70" or "<=200". Ignored for booleans.
discord_urlstringDiscord incoming-webhook URL (https://discord.com/api/webhooks/…). Required when channel is "discord".
namestringHuman-readable label.
signalstringyesColumn name (e.g. golden_cross_today, rsi_14).
target_urlstringOptional https URL for the `webhook` channel; omit for in-app.
tickerstringOptional ticker to restrict the watch to one symbol.
universestringOptional universe slug.

No output schema declared.

No examples provided.

tickerbot_subscribe_ticker ~228

Register a webhook that fires when one ticker matches a condition. `condition` is a SQL WHERE-clause fragment scoped to that ticker (e.g. "rsi_14 > 70 AND relative_volume > 2"). Pass `target_url` for an https POST, or `channel:"discord"` + `discord_url` to post to Discord; omit for in-app.

NameTypeReqDescription
cadencestringEvaluation cadence.
channelstringDelivery channel: `webhook` (POST to target_url), `discord` (embed to discord_url), or `in_app` (dashboard only). Inferred from the URL you pass if omitted.
conditionstringyesSQL WHERE fragment evaluated for this ticker.
discord_urlstringDiscord incoming-webhook URL (https://discord.com/api/webhooks/…). Required when channel is "discord".
namestringHuman-readable label.
target_urlstringOptional https URL for the `webhook` channel; omit for in-app.
tickerstringyesSymbol.

No output schema declared.

No examples provided.

tickerbot_test_webhook ~135

Send a real-shape `webhook.fired` POST to the webhook's target_url synchronously, right now. The body is byte-identical to a real fire (same signing); the test marker rides in an `X-Tickerbot-Test: true` header. Returns the inline outcome (`delivered`, `http_status`, `elapsed_ms`, `error`). One-shot — a failed test never retries and never auto-disables the webhook. Fails with 400 if the webhook has no target_url (in-app deliveries have nothing to fire over the wire).

NameTypeReqDescription
idstringyesWebhook id.

No output schema declared.

No examples provided.

tickerbot_update_custom_signal ~101

Edit one of the caller's custom signals — supply `expr`, `description`, or both. Providing `expr` recompiles it against the live column whitelist. Built-in signals are read-only; only custom signals the caller owns can be patched. Available on every plan.

NameTypeReqDescription
descriptionstringNew description.
exprstringNew SQL WHERE expression. Re-validated on save.
namestringyesCustom signal slug.

No output schema declared.

No examples provided.

tickerbot_update_universe ~140

Update one of the caller's universes. Pass `name`/`description` to relabel, `tickers` to replace the whole list, or `add`/`remove` to adjust subsets without replacing. System universes (`top_10`/`top_100`) cannot be edited.

NameTypeReqDescription
addarrayAdd these tickers (deduplicated).
descriptionstringNew notes.
idstringyesUniverse slug.
namestringNew label.
removearrayRemove these tickers.
tickersarrayReplace the full ticker list.

No output schema declared.

No examples provided.