TradingView Webhook Setup Guide (2026) — Step by Step
Set up TradingView webhooks in 10 minutes: plan requirements, HTTPS rules, JSON payload, 2FA, and testing. No coding required for alert forwarding.
Last verified: July 2026
You set up a strategy alert in TradingView, tick the webhook box, paste a URL — and then you're staring at the alert log wondering why nothing arrived. I've been through that loop more times than I'd like to admit. The good news: TradingView webhooks are not magic. They are an HTTP POST with your alert message in the body, and they follow a fixed set of rules. Once you know those rules, setup takes about ten minutes.
Quick answer
To use a TradingView webhook you need:
- A paid TradingView plan (Essential or higher — the free Basic plan does not show a Webhook URL field).
- A public HTTPS endpoint on port 80 or 443 that returns HTTP 200 within 3 seconds.
- Two-factor authentication enabled on your TradingView account.
- A message body your receiver understands — usually JSON for automation tools.
Paste the endpoint URL into the alert's Notifications tab, save, and fire a test. That's the whole model.
What a TradingView webhook actually sends
When an alert triggers, TradingView's servers send an HTTP POST to the URL you configured. The alert Message field becomes the request body.
Two content-type modes matter:
| Message field content | Content-Type header |
|---|---|
| Plain text (default) | text/plain |
| Valid JSON object | application/json |
If your receiver expects JSON but you typed a sentence in the Message box, parsing fails on the other end. I've seen people debug "TradingView is broken" for an hour when the payload shape was simply wrong.
TradingView also documents that webhook delivery can occasionally fail. Check the Webhook status column in the alert log — hover it for the HTTP status code.
Plan requirements
This trips up more beginners than anything else. The free Basic plan does not support webhooks. If you open Create Alert and there is no "Webhook URL" checkbox under Notifications, your plan is the blocker — stop debugging the URL.
| Plan | Webhooks | Active alerts |
|---|---|---|
| Basic (Free) | No | 1 (no webhook) |
| Essential | Yes | 20 |
| Plus | Yes | 100 |
| Premium | Yes | 400 |
Essential is the cheapest tier that unlocks webhook URLs. You get 20 simultaneous active alerts — enough for most individual traders running a handful of strategies.
Plan names and limits change. Double-check TradingView's pricing page before you buy a subscription for webhooks alone.
Prerequisites checklist
Before you paste any URL into TradingView, run through this list:
- HTTPS —
http://URLs are rejected. The certificate must be valid. - Ports 80 or 443 only — a URL like
https://example.com:3000/webhookis rejected. - Public IPv4 — no
localhost,127.0.0.1,192.168.x.x, or IPv6-only hosts. TradingView's servers must reach you from the internet. - 2FA enabled — webhook alerts are blocked on accounts without two-factor authentication.
- 3-second response — your endpoint must return HTTP 200 within three seconds or TradingView marks the delivery failed. No automatic retry from their side.
- Message format matches receiver — JSON if your tool expects JSON.
Miss any one of these and you'll get silent failures or errors in the alert log.
Step-by-step: create your first webhook alert
1. Open the alert dialog
On your chart, press Alt+A (Windows) or Option+A (Mac), or click the alarm clock icon → Create Alert.
2. Set the condition
Pick your indicator signal, strategy call, or price level. For strategy scripts, "Any strategy() function call" is the usual choice.
3. Choose the trigger frequency
For most setups I use Once Per Bar Close — it fires after the candle completes and avoids repaint noise. Once Per Bar can spam during volatile candles if the condition flickers true/false.
4. Enable the webhook
Scroll to the Notifications tab. Check Webhook URL and paste your endpoint:
https://your-receiver.example.com/api/inbound/tradingview/your-token
If that checkbox is missing, see the plan requirements section above.
5. Write the message
For a generic JSON receiver:
{
"symbol": "{{ticker}}",
"exchange": "{{exchange}}",
"price": "{{close}}",
"action": "{{strategy.order.action}}"
}
TradingView replaces {{ticker}}, {{close}}, and the other placeholders with live values at fire time.
6. Set expiration and create
Pick an expiration that matches how long you want the alert armed. On paid plans, alerts expire after a window unless you extend them — I've lost signals because an alert silently expired on a long weekend.
Click Create. The alert is live.
JSON payload templates
Strategy alert (buy/sell with size)
{
"symbol": "{{ticker}}",
"action": "{{strategy.order.action}}",
"contracts": "{{strategy.order.contracts}}",
"price": "{{strategy.order.price}}",
"comment": "{{strategy.order.comment}}"
}
Indicator alert (simple price ping)
{
"symbol": "{{ticker}}",
"interval": "{{interval}}",
"price": "{{close}}",
"message": "RSI crossed 30 on {{ticker}}"
}
Plain text (for receivers that accept text/plain)
{{exchange}}:{{ticker}} @ {{close}} — my condition fired
Plain text is fine for simple relays. Anything that parses fields should use JSON.
Test before going live
Do not point your first test at production channels. I use this sequence:
- Go to webhook.site and copy the unique URL.
- Paste it into TradingView as the Webhook URL.
- Fire the alert manually or wait for the condition.
- Confirm the payload on webhook.site — check content-type, JSON validity, and placeholder expansion.
If it arrives at webhook.site but not at your own URL, the problem is 100% on your receiver, not TradingView. See our troubleshooting guide for the usual culprits.
Common mistakes
The failures I see most often:
- Free plan — no webhook checkbox at all.
- HTTP or wrong port — rejected before the request leaves TradingView.
- 3-second timeout — receiver does database work before returning 200; intermittent drops during busy markets.
- Invalid JSON — trailing comma, unquoted key, or plain text sent to a JSON-only parser.
- Expired alert — condition never fires because the alert timed out.
For a full ordered checklist, read TradingView Webhook Not Working? 8 Common Causes.
Forward alerts without running a server
You can absolutely self-host a Python or Node receiver on a VPS — plenty of traders do. You own the code, you own the uptime, and you own the 3 AM pager when the disk fills up.
If you only need notifications — TradingView alert lands in Telegram, Discord, or Feishu — a managed relay is simpler:
- SignalTo webhook forwarding gives you an HTTPS endpoint that acknowledges instantly, forwards asynchronously, retries on failure, and logs every attempt.
- Route one strategy to Telegram and another to Discord from the same dashboard.
- Compare with a self-hosted bot if you're weighing DIY vs managed.
SignalTo only forwards alerts. It does not place trades or touch your broker account.
Next steps: paste a test URL from webhook.site, confirm the payload shape, then swap in your production endpoint. If you want managed forwarding with retries and delivery logs, start a free trial — one endpoint, two channels, no credit card.