tv_create_alert
Clone an existing TradingView alert to create a new one, optionally overriding symbol, timeframe, name, message, or webhook. Ensures strategy conditions stay intact while retargeting the alert.
Instructions
MUTATES: create a new alert by CLONING an existing one (from_id) server-side and retargeting the clone through the UI's own modifyRestartAlert path, with optional overrides for symbol, resolution (applied to the alert AND every condition - they move together), name, message and web_hook (empty string removes the webhook). Clone-based because it must be: /create_alert rejects every hand-built payload (invalid_request), and only an existing alert carries the live study plots + pineId a strategy condition needs. The new alert is created PAUSED by default - resuming it is a separate, explicit tv_resume_alerts call. ARMED WINDOW: when overrides are applied, modify_restart re-arms the clone and the stop rail lands right after (~1s) - a fire inside that window would deliver the alert's real message/webhook; a pure clone with no overrides never arms. If the retarget fails the clone is deleted again automatically. Returns { new_id, cloned_from, active, alert, warning? }. Clone -> modify -> stop path verified live 2026-09-05 on defanged throwaway clones. Alerts on this account fire real webhooks that place live orders.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | new alert name | |
| active | No | leave the alert running; default false = created paused | |
| layout | No | chart layout id, target id, or 0-based index; default = the chart tab that is actually painting | |
| symbol | No | new symbol in EXCHANGE:TICKER form, e.g. "BYBIT:SOLUSDT.P" - overrides the .symbol key of the model's parsed symbol and proSymbol objects | |
| from_id | Yes | id of the existing alert to clone, as returned by tv_list_alerts | |
| message | No | new alert message (the webhook payload body) | |
| web_hook | No | new webhook URL; empty string removes the webhook | |
| resolution | No | new chart timeframe: minutes (e.g. "90") or "D"/"W"/"M" - applied to the alert-level resolution AND every condition resolution | |
| expect_layout | No | layout id the tab is expected to show right now; the call refuses if it differs (a tab keeps its target id when the user opens another layout in it) |