Skip to content

TradingView Alerts to Discord: Webhooks, JSON and Fixes

To send a TradingView alert to Discord, put a Discord incoming webhook URL in the alert's notification settings and a JSON message with a content field in its Message box. TradingView documents this direct Discord connection; a relay service is unnecessary for this setup.

This guide covers a regular price alert delivered to an ordinary Discord text channel. It posts a notification; it does not place a trade. Sources were checked on October 5, 2026 UTC. The example's JSON syntax was checked locally, but we did not create an alert or send a message through either service.

Before you create the webhook

The webhook URL is a posting credential. Keep it out of public messages, screenshots and shared documents. Paste it only into the intended integration settings; it does not belong in the JSON body or any DiscordCatalog tool. A dedicated webhook for these alerts makes it easier to identify and revoke later.

1. Create the Discord destination

  1. Open the destination server's Server Settings → Integrations.
  2. Choose Create Webhook, then give it a recognizable name such as “TradingView alerts.”
  3. Select the text channel that should receive notifications. Start with a channel where a test message will be expected.
  4. Save the configuration and copy the webhook URL.

These controls are described in Discord's webhook guide. Creating the endpoint gives TradingView somewhere to post; it does not start sending alerts by itself. Keep the copied URL ready for the notification step.

2. Define a price condition in TradingView

Open the exact exchange and pair you want to monitor, then open Create alert. A BTC/USDT market and a BTC/USD market have different quote units; keep the selected instrument visible while entering your threshold.

Under Condition, select Price, an operator and a value. For example, a hypothetical BTC/USDT alert could use Crossing up at 100,000: the price must reach or pass that level from below. This is an illustration of TradingView's operator, not a current market observation. It may not trigger during your setup session.

For the first check, choose Only once, set an appropriate expiry and give the alert a descriptive name identifying the pair and condition. The configuration guide separates these settings from the message. Typing “crossing up 100,000” in the message alone does not create that condition.

If your Condition is Any alert() function call, pause here: the Pine script controls its message and frequency. This Message-box workflow applies to the regular price alert above; changing arbitrary script alerts can require editing their code.

3. Add the Discord JSON message

Open the alert's Message settings and paste this entire JSON object into the message body. The code block is copyable text; it does not send anything or validate your TradingView configuration.

Message body for a regular price alert

Copy the JSON, including its outer braces. Keep the placeholders intact so TradingView can substitute the alert values.

{
  "content": "TradingView alert\n{{exchange}}:{{ticker}}\nPrice: {{close}} {{syminfo.currency}}\nTriggered (UTC): {{timenow}}",
  "allowed_mentions": {
    "parse": []
  }
}

The documented placeholders identify the exchange and ticker, insert the triggering bar's close value and quote currency, and show the alert's firing time in UTC. {{timenow}} is the firing time; {{time}} would describe the bar's timestamp. The sample leaves out {{interval}} because ordinary price alerts use one-minute calculations even when the displayed chart has another timeframe.

allowed_mentions with an empty parse array suppresses mention parsing. It does not turn off normal channel notifications or override a member's notification preferences.

If you customize the text, preserve valid JSON: use double quotes, write \" for a quotation mark inside the message, \\ for a backslash and \n for a line break. A literal line break inside a quoted string breaks JSON string syntax. The visible \n sequences in the sample become line breaks in the message.

Keep the resulting content within Discord's 2,000-character limit, including substituted values. A template parsing successfully does not prove every future substitution will fit. For richer formatting later, the embed builder produces a preview and JSON; it does not connect to TradingView or send messages.

4. Connect the URL and save

In the alert's Notifications tab, enable Webhook URL and paste the URL copied from Discord. TradingView's Discord instructions use that destination directly. Keep the native JSON example and the copied URL together; no /slack suffix is needed.

Review the symbol, condition, frequency, expiry, message and destination, then create the alert. TradingView sends valid JSON as JSON; invalid JSON is sent as plain text, which can make the Discord request fail. The message body and the Webhook URL are separate fields.

5. Check the trigger and the delivered message

When the condition occurs, check three things:

  1. TradingView recorded the trigger. Open Alerts Log and find the corresponding alert entry. No entry means you have not yet established that this rule fired.
  2. Inspect Webhook status. TradingView exposes delivery status in the alert log; a triggered alert can still have a failed webhook request.
  3. Find the actual Discord message. Confirm the channel, exchange/pair, displayed value and UTC firing time. A successful-looking status alone is not the full delivery check.

Alerts Manager shows active, manually stopped, expired and one-shot-triggered states. With Only once, stopping after the trigger is expected.

If you want to check delivery without waiting for your price crossing, TradingView's official Discord demo includes a Test (Discord Alert Demo) condition. Add its example indicator, select that condition and use Only Once with your webhook destination. This uses a technical-alert slot. “Test” belongs to that example; it is not a universal button. A received test message confirms that test's delivery, while your actual price condition still needs its own check. We did not run either test for this guide.

If the message does not arrive

Start with the alert log so you can separate a condition problem from a delivery problem.

There is no trigger in Alerts Log

Check that the alert is active, has not expired and has not already completed its Only once run. Open its settings and verify the selected symbol, operator and threshold. Crossing up needs the condition to occur from below; a level written in your message has no effect on the rule.

TradingView alert states and editing

It triggered, but Discord has no message

Inspect Webhook status, then compare the saved destination with the webhook in Discord Integrations. Confirm the selected channel and that the endpoint still exists. A forum or media channel needs a different payload or thread target; use an ordinary text channel for this example. TradingView cancels requests taking more than three seconds, so a recorded trigger does not guarantee delivery.

TradingView delivery status and timeout

Webhook status reports a 4xx error

A 4xx can reflect malformed data, a wrong endpoint, access or too many requests. Check the complete copied URL, a nonempty content string, JSON quotes and escaping, and the final message length. For rate limiting, reduce alert bursts rather than repeatedly retrying. Keep the credential out of public troubleshooting posts.

TradingView webhook error explanations

Placeholders remain visible or the wrong message appears

Confirm that this is the regular price alert you edited and that the documented placeholder names were preserved. Strategy placeholders belong to strategy alerts. For Any alert() function call, inspect the script-generated message instead of assuming the Message box controls it.

How script-generated alert messages work

Do not assume every failure will retry. TradingView documents retries for received 500–599 responses except 504: up to three resends, five seconds apart. That policy is not a delivery guarantee for other errors.

Stop a rule or revoke its destination

To pause one alert, use Stop in TradingView's Alerts Manager; resume it when appropriate or delete it when finished. Remove the one-shot test after checking the result, and leave only the intended rules active.

To revoke the Discord destination, delete the webhook in its integration settings. Deletion is permanent and affects every sender using that URL. If it leaked, replace it and update the intended alerts with the new URL. Stopping a TradingView rule alone does not revoke the credential or remove messages already posted.

Published