Discord webhooks are one of the most powerful and flexible tools available for building your own restock notification system. Instead of relying entirely on third-party alert services or public Discord servers, a webhook lets you send custom alerts directly to your own private Discord channel. You control the format, the content, the speed, and the reliability. This guide walks through everything from creating your first webhook to building a fully automated restock alert pipeline.

What Is a Discord Webhook?

A webhook is a URL that accepts incoming data and posts it as a message in a Discord channel. Think of it as a one-way door. Anything you send to that URL appears as a message in the channel, without needing a bot account, a Discord application, or any special permissions beyond channel management.

Here is how webhooks compare to other Discord notification methods:

MethodSetup DifficultySpeedCustomizationCost
Public restock serversEasyVariable (depends on server)NoneFree or paid membership
Discord botHard (requires coding + hosting)FastFull controlHosting costs
WebhookMediumFastHigh (formatting, embeds)Free
IFTTT/Zapier integrationEasySlow (minutes delay)LimitedFree tier limited

Webhooks hit the sweet spot between simplicity and power. You get near-instant delivery, rich formatting with embeds, and full control over when and what gets posted, without the complexity of running a full Discord bot.

Creating Your First Webhook

Setting up a webhook takes less than two minutes. You need a Discord server where you have the Manage Webhooks permission (any server you own works).

Step 1: Create a Private Server or Channel

If you do not already have a private Discord server for restocking alerts, create one.

  1. Open Discord and click the plus icon on the left sidebar.
  2. Select “Create My Own” and then “For me and my friends.”
  3. Name the server something like “Restock Alerts.”
  4. Create a text channel called #restock-notifications (or similar).

If you already have a server, you can create a new channel specifically for webhook alerts to keep them separate from chat.

Step 2: Generate the Webhook URL

  1. Right-click on the channel you created and select “Edit Channel.”
  2. Navigate to “Integrations” in the left sidebar.
  3. Click “Webhooks.”
  4. Click “New Webhook.”
  5. Give it a name (e.g., “Restock Monitor”) and optionally upload an avatar image.
  6. Click “Copy Webhook URL.”
  7. Save this URL somewhere secure. Anyone with this URL can post messages to your channel.

The webhook URL looks like this:

https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz

Important: Treat this URL like a password. Do not share it publicly or commit it to a public code repository. If the URL leaks, anyone can spam your channel. You can regenerate the URL at any time from the same Integrations page, but you will need to update it everywhere you use it.

Step 3: Test the Webhook

Before building any automation around the webhook, verify it works by sending a test message. You can do this with a simple command-line request.

Using curl (macOS/Linux/WSL):

curl -H "Content-Type: application/json" \
  -d '{"content": "Webhook is working! This is a test alert."}' \
  YOUR_WEBHOOK_URL_HERE

Using PowerShell (Windows):

Invoke-RestMethod -Uri "YOUR_WEBHOOK_URL_HERE" -Method Post -ContentType "application/json" -Body '{"content": "Webhook is working! This is a test alert."}'

If the test succeeds, you will see the message appear in your Discord channel within a second.

Formatting Rich Webhook Messages

Plain text messages work, but rich embeds make your alerts far more useful. Discord webhooks support embedded messages with colors, fields, images, timestamps, and links, turning a basic notification into a structured alert that gives you all the information you need at a glance.

Embed Structure

Here is the JSON structure for a rich restock alert:

{
  "embeds": [
    {
      "title": "Nike Dunk Low Panda Restock",
      "url": "https://www.nike.com/t/dunk-low-retro-mens-shoes-XXXXX",
      "color": 3066993,
      "fields": [
        {
          "name": "Retailer",
          "value": "Nike.com",
          "inline": true
        },
        {
          "name": "Price",
          "value": "$115.00",
          "inline": true
        },
        {
          "name": "Sizes Available",
          "value": "8, 8.5, 9, 9.5, 10, 10.5, 11, 12",
          "inline": false
        }
      ],
      "thumbnail": {
        "url": "https://example.com/product-image.jpg"
      },
      "footer": {
        "text": "Restock Monitor"
      },
      "timestamp": "2026-01-13T14:30:00.000Z"
    }
  ]
}

Color Codes for Visual Prioritization

Use different embed colors to visually categorize your alerts so you can instantly tell what type of alert just came in.

ColorHex CodeDecimalUse Case
Green#2ECC713066993New restock detected
Red#E74C3C15158332Product going out of stock
Blue#3498DB3447003Price drop alert
Gold#F1C40F15844367High-priority/hyped item
Purple#9B59B610181046Raffle or draw open

While webhooks do not support true interactive buttons (those require a bot), you can use markdown links to create clickable text that takes you directly to the product page or cart:

{
  "content": "**RESTOCK ALERT** Nike Dunk Low Panda\n[Add to Cart](https://www.nike.com/cart) | [Product Page](https://www.nike.com/t/dunk-low) | [StockX Price](https://stockx.com/nike-dunk-low-panda)"
}

Connecting Webhooks to Restock Monitors

A webhook is only as useful as the system feeding it. Here are the most common ways to connect a webhook to actual restock monitoring.

Method 1: Distill.io Browser Extension

Distill.io is a browser extension that monitors web pages for changes. When a product page changes (e.g., an “Out of Stock” button changes to “Add to Cart”), Distill can send a notification to your Discord webhook.

Setup steps:

  1. Install the Distill.io extension for Chrome or Firefox.
  2. Navigate to the product page you want to monitor.
  3. Click the Distill icon and select “Monitor parts of this page.”
  4. Select the element that indicates stock status (usually the add-to-cart button area).
  5. Go to Distill settings and add a Webhook action.
  6. Paste your Discord webhook URL.
  7. Set the check interval (free tier allows 6-hour minimum; paid tiers allow down to 5 seconds).

Distill is great for monitoring specific products on specific pages, but it does not scale well if you need to watch dozens or hundreds of products. For broader monitoring, consider building or using a dedicated restock monitor.

Method 2: Custom Python Script

If you are comfortable with basic scripting, a Python script that checks a product page and sends webhook alerts gives you full control. Here is a simplified example structure:

import requests
import time
import json

WEBHOOK_URL = "YOUR_WEBHOOK_URL_HERE"
PRODUCT_URL = "https://retailer.com/api/product/12345"
CHECK_INTERVAL = 30  # seconds

def check_stock():
    response = requests.get(PRODUCT_URL, headers={"User-Agent": "Mozilla/5.0"})
    data = response.json()
    return data.get("available", False)

def send_alert(product_name, product_url, price):
    payload = {
        "embeds": [{
            "title": f"RESTOCK: {product_name}",
            "url": product_url,
            "color": 3066993,
            "fields": [
                {"name": "Price", "value": price, "inline": True},
                {"name": "Link", "value": f"[Buy Now]({product_url})", "inline": True}
            ]
        }]
    }
    requests.post(WEBHOOK_URL, json=payload)

was_out_of_stock = True

while True:
    in_stock = check_stock()
    if in_stock and was_out_of_stock:
        send_alert("Product Name", PRODUCT_URL, "$XX.XX")
        was_out_of_stock = False
    elif not in_stock:
        was_out_of_stock = True
    time.sleep(CHECK_INTERVAL)

This is a starting point. A production-grade monitor would include error handling, rotating user agents, proxy support, and logging.

Method 3: Third-Party Monitor Services

Several third-party services support Discord webhook output directly:

  • Visualping — Web page change monitoring with webhook support.
  • Hexowatch — Monitors pages for visual, content, and technology changes.
  • UptimeRobot — Primarily for website uptime, but can alert on page changes.
  • Custom monitors — Services like the ones discussed in our restock monitor tools guide often support webhook output.

Setting Up Multiple Webhooks for Different Categories

As your monitoring setup grows, a single webhook channel becomes noisy and hard to follow. The solution is to create multiple channels with separate webhooks, each dedicated to a specific product category.

#sneaker-restocks     -- Nike, Adidas, New Balance, Jordan restocks
#gpu-restocks         -- NVIDIA, AMD graphics card restocks
#console-restocks     -- PS5, Xbox, Nintendo Switch restocks
#general-restocks     -- Everything else
#price-drops          -- Items dropping below a target price
#high-priority        -- Your personal must-have items only

Each channel gets its own webhook URL. Configure your monitors to send alerts to the appropriate webhook based on the product category. This way, you can mute low-priority channels during busy periods and keep high-priority alerts at maximum volume.

Notification Settings per Channel

Discord lets you configure notification settings per channel. Here is the recommended configuration:

ChannelNotification SettingSoundMobile Push
#high-priorityAll MessagesOnOn
#sneaker-restocksAll MessagesOnOn
#gpu-restocksAll MessagesOnOn
#console-restocksAll MessagesOn (if actively seeking)On
#general-restocksMentions OnlyOffOff
#price-dropsAll MessagesOffOff

Rate Limits and Best Practices

Discord enforces rate limits on webhooks to prevent abuse. If you exceed these limits, your alerts will be delayed or dropped entirely.

Discord Webhook Rate Limits

  • 5 messages per 2 seconds per webhook URL.
  • 30 messages per 60 seconds per channel.
  • If you exceed the limit, Discord returns a 429 status code with a retry_after value in milliseconds.

For most restockers, these limits are more than sufficient. You would need to monitor hundreds of products with rapid changes to hit them. However, if you are running multiple monitors feeding the same webhook, implement rate limit handling in your scripts:

import time

def send_webhook(url, payload):
    response = requests.post(url, json=payload)
    if response.status_code == 429:
        retry_after = response.json().get("retry_after", 1000) / 1000
        time.sleep(retry_after)
        requests.post(url, json=payload)

Message Formatting Best Practices

  • Include a direct link to the product page in every alert. You should be able to tap the alert and land directly on the product.
  • Include the price. This helps you instantly decide whether to act on the alert.
  • Include the timestamp. Discord embeds support ISO 8601 timestamps that display in the viewer’s local timezone.
  • Use @everyone or @here sparingly. Only ping for truly high-priority restocks. If every alert pings, people disable notifications entirely.
  • Keep messages concise. Long paragraphs in alerts slow down your reaction time. Use fields and bullet points.

Integrating Webhooks With Your Phone Notifications

The entire point of setting up Discord webhooks is to get instant notifications on your phone. Here is how to make sure those notifications actually reach you reliably.

Android Notification Setup

  1. Open Discord and go to User Settings, then Notifications.
  2. Enable “Enable Notifications.”
  3. Go to your phone’s Settings, then Apps, then Discord, then Notifications.
  4. Make sure Discord notifications are not restricted by battery optimization.
  5. On Samsung devices, disable “Put unused apps to sleep” for Discord.
  6. On all Android devices, disable “Adaptive Battery” for Discord or add it to the “never sleeping apps” list.

iOS Notification Setup

  1. Open Discord and go to User Settings, then Notifications.
  2. Enable all relevant notification toggles.
  3. Go to iPhone Settings, then Notifications, then Discord.
  4. Enable “Allow Notifications,” set to “Immediate Delivery” under notification summary.
  5. Enable “Time Sensitive Notifications” if available.
  6. Set the alert style to “Banner” or “Alert” (Alert requires dismissal, ensuring you see it).

Using Discord with Your Multi-Device Setup

If you followed our multiple device setup guide, install Discord on your dedicated alert device and configure that device’s notification settings to maximum. Your checkout devices should have Discord notifications muted so they do not distract during the checkout process.

Security Considerations

Webhook URLs are sensitive. Here is how to keep them safe:

  • Never post webhook URLs in public channels or forums. Anyone with the URL can spam your channel.
  • Rotate URLs periodically. Delete and recreate webhooks every few months.
  • Do not hard-code URLs in scripts you share. Use environment variables or configuration files excluded from version control (.env files added to .gitignore).
  • Monitor for unauthorized messages. If you see messages in your webhook channel that you did not send, your URL has leaked. Regenerate it immediately.

For more on securing your restocking tools and accounts, review our comprehensive beginner guide.

FAQ

Can I use one webhook URL for multiple monitors?

Yes, multiple monitors can send alerts to the same webhook URL. However, be mindful of Discord’s rate limits (5 messages per 2 seconds per webhook). If you have many monitors, spread them across multiple webhooks feeding different channels to avoid hitting rate limits during high-activity periods.

Do webhook alerts arrive faster than public Discord server alerts?

In most cases, yes. Public restock servers add human verification delays, moderation queues, and sometimes intentional delays for free-tier members. Your private webhook receives the alert the instant your monitor detects the restock, with no intermediary delays. The speed difference can be several seconds, which matters for FCFS drops.

Can I send webhook alerts to a DM instead of a channel?

Discord webhooks only work with text channels in servers. They cannot send direct messages. However, you can create a server with only yourself in it and set up the webhook in a channel there. The effect is essentially the same as a DM since only you will see the messages.

What happens if my webhook URL gets leaked?

If someone gets your webhook URL, they can send messages to your channel but they cannot read messages, access your server, or see any other channels. The worst case is spam in that one channel. To fix it, go to Channel Settings, then Integrations, then Webhooks, and delete the compromised webhook. Create a new one and update the URL in all your monitors.

Can I use webhooks with mobile monitoring apps?

Some mobile apps support webhook output, but most restocking apps do not natively support Discord webhooks. The most reliable approach is to run your monitoring scripts on a computer or cloud server (like a cheap VPS or a Raspberry Pi) and have those scripts send to your webhook. Your phone then receives the Discord notification. This separation of monitoring (server-side) and alerting (phone-side) is the most reliable architecture.