Subscribe to a ticker
https://api.tickerbot.io/v2/tickers/{ticker}/subscribeSubscribes a single ticker. condition is a WHERE-clause fragment evaluated when this ticker is matched — you do not need to add ticker = '…' yourself; the endpoint scopes the predicate to the path ticker automatically. Plan-gated by webhook tier; counts against your account-wide webhook cap. Returns the same shape as GET /v2/webhooks/{id}, plus a test_url pointing at POST /v2/webhooks/{id}/test — subscribing does NOT auto-fire anything at your endpoint; hit the test URL to send a real-shape webhook.fired and validate your receiver.
Custom signals referenced in condition are expanded and frozen into the webhook at creation — editing the signal later will not change this subscription (re-subscribe to apply). See Create a custom signal.
Plan access
Paid plans (Hobby and above).
Cadence
Real-time on every paid plan — evaluated on every data refresh (~1×/min), so a match is delivered within seconds of it landing. Optionally throttle a webhook to hourly or at-market-open.
Capacity
Hobby 10 · Pro 100 · Scale & Enterprise unlimited.
Body parameters
stringrequiredTicker symbol (case-insensitive).
stringrequiredWHERE-clause fragment using signal/column names from the schema.
stringhttps:// URL to POST when the condition fires. Omit for in-app delivery (visible in the dashboard).
stringDelivery channel. `webhook` (POST to `target_url`), `discord` (post an embed to `discord_url`), `in_app` (dashboard only), or `mobile_push` (notify a phone signed in to the Tickerbot mobile app; requires a `device_id` from `POST /v2/devices/register`). Inferred when omitted: `webhook` if `target_url` is set, `discord` if `discord_url` is set, else `in_app`. `slack` is reserved and returns `501`. See the Delivery channels guide.
stringDiscord incoming-webhook URL (`https://discord.com/api/webhooks/…`). Required when `channel` is `discord`. Stored as a posting credential and stripped from list/get responses, which set `channel_config_present: true` instead.
stringHow often to evaluate. `realtime` (the default) is evaluated on every data refresh (~1×/min); `hourly` and `nyse_open` throttle to a batch schedule. `1m` is a deprecated alias for `realtime`.
stringHuman-readable label (up to 80 chars). Defaults to `<TICKER>: <condition>`.
stringComma-separated extra columns to include in each fired payload match row, beyond the standard set (`ticker`, `name`, `asset_type`, `price`, `day_change_pct`, `market_cap`). Each must be a real column; an unknown column is rejected at creation.