Quick Setup

Get dread running in under a minute.

1. Install dread

curl -fsSL https://dread.sh/install | sh

2. Create a channel

A channel is where webhooks get sent. Create one for each service (e.g. Stripe, GitHub):

dread new "Stripe Prod"

This prints your webhook URL. This is the URL you paste into other services:

https://dread.sh/wh/ch_stripe-prod_a1b2c3

Every channel gets its own unique URL. Copy it — you'll paste it in the next step.

3. Paste the URL into your service

Go to whatever service you want to monitor (Stripe, GitHub, Vercel, etc.), find its webhook settings, and paste the URL from step 2. Each guide below shows you exactly where.

4. Start watching

dread
You'll see the dread TUI with your channel listed, waiting for events. When the service sends a webhook, it appears here instantly with a desktop notification.

Your First Webhook

Don't have a service ready yet? Send a test event to make sure everything works:

dread test ch_stripe-prod_a1b2c3

Or send a real HTTP request from anywhere:

curl -X POST https://dread.sh/wh/ch_stripe-prod_a1b2c3 \
  -H "Content-Type: application/json" \
  -d '{"event":"test","message":"Hello from curl"}'
You'll see the event appear in the TUI and get a desktop notification. If this works, you're ready to connect a real service below.

Customise Channel Name, Source & Summary

Change the channel name

The channel name is set when you create it with dread new. To rename it, remove and re-add with the new name:

dread remove ch_old-name_abc123
dread add ch_old-name_abc123 "New Display Name"

The channel ID and webhook URL stay the same — only the display name changes in the TUI, notifications, and dashboard.

Change the source label

dread auto-detects the source from HTTP headers (Stripe-Signature, X-GitHub-Event, etc.). For services that aren't auto-detected, add ?source=name to your webhook URL:

https://dread.sh/wh/ch_xxx?source=trigger.dev

Just paste the URL with ?source= into your service's webhook settings — no custom headers needed. You can also use the X-Dread-Source header for programmatic control.

The source label controls how events are grouped in the dashboard and which colour appears in the TUI. Auto-detected sources (stripe, github, vercel, sentry, etc.) always take priority.

Change the summary text

The summary is extracted automatically from known payload formats. For custom services, dread looks for these JSON fields in order:

  1. type, event, event_type, action, topic — used as the event type
  2. message, description, summary, text, status — used as the summary text

To control what appears in notifications, structure your JSON payload with these fields:

curl -X POST "https://dread.sh/wh/ch_xxx?source=deploy-bot" \
  -H "Content-Type: application/json" \
  -d '{"type":"deploy.success","message":"v2.1.0 deployed to production"}'
This will show as: source deploy-bot, type deploy.success, summary deploy-bot — v2.1.0 deployed to production

Stripe

  1. Open Stripe Dashboard → click Developers in the top nav
  2. Select Webhooks from the submenu
  3. Click Create an event destination
  4. Select Account as the event source, then choose Webhook endpoint
  5. Paste your dread webhook URL in Endpoint URL
  6. Select the events you want (e.g. payment_intent.succeeded, charge.failed) or choose all events for testing
  7. Click Add endpoint
Stripe events will show parsed summaries with amounts (e.g. payment_intent.succeeded — $49.99 USD), subscription statuses, and customer emails.

PayPal

  1. Log in to developer.paypal.com/dashboard
  2. Go to Apps & Credentials and select your app (or create one)
  3. Open the Webhooks section
  4. Click Add Webhook
  5. Paste your dread webhook URL (must be HTTPS)
  6. Select event types (e.g. PAYMENT.CAPTURE.COMPLETED, BILLING.SUBSCRIPTION.ACTIVATED)
  7. Click Save
Payment events will show amounts and statuses (e.g. PAYMENT.CAPTURE.COMPLETED — 29.99 USD).

Paddle

  1. Open Paddle DashboardDeveloper ToolsNotifications
  2. Click + New destination
  3. Select Webhook as the type
  4. Paste your dread webhook URL
  5. Select events (subscriptions, transactions, customers, adjustments)
  6. Click Save destination
Paddle events will show the event type and status (e.g. subscription.created — active).

Shopify

  1. Open Shopify AdminSettings (bottom left) → Notifications
  2. Scroll down to Webhooks and click Create webhook
  3. Select an event topic from the dropdown (e.g. orders/create)
  4. Set format to JSON
  5. Paste your dread webhook URL
  6. Click Save

Note: you can't change the event topic after creation — create a new webhook for each topic you need.

Order events will show order numbers and totals (e.g. orders/create — order #1042 ($79.00)).

Square

  1. Log in to developer.squareup.com → open your application
  2. Click Webhooks in the left sidebar
  3. Click Add subscription
  4. Enter a name for the subscription
  5. Paste your dread webhook URL in the URL field
  6. Select event types: payment.completed, order.created, refund.created, invoice.published, etc.
  7. Click Save

Use the Send test event button to verify. Square signs all webhooks with a signature in the x-square-hmacsha256-signature header.

Payment events show the amount and status (e.g. payment.completed — $45.00 GBP).

Razorpay

  1. Log in to the Razorpay Dashboard
  2. Go to Account & SettingsWebhooks
  3. Click Add New Webhook
  4. Paste your dread webhook URL
  5. Enter a Secret (used to verify webhook signatures)
  6. Select events: payment.captured, payment.failed, order.paid, subscription.activated, refund.processed, etc.
  7. Click Create Webhook

Razorpay sends events in both test and live modes. Toggle between modes in the dashboard to configure webhooks for each.

Payment events show the event type and amount (e.g. payment.captured — ₹2,499 INR).

Recurly

  1. Log in to the Recurly Dashboard
  2. Go to IntegrationsWebhooks
  3. Click Configure
  4. Click New Endpoint
  5. Paste your dread webhook URL
  6. Select notification types: new_subscription, successful_payment, failed_payment, canceled_subscription, etc.
  7. Click Save

Recurly sends XML payloads by default. dread will detect the source via the X-Recurly-Notification-Type header.

Subscription events show the notification type (e.g. successful_payment — invoice 1234).

Chargebee

  1. Log in to Chargebee → go to SettingsConfigure Chargebee
  2. Select Webhooks under API & Webhooks
  3. Click Add Webhook
  4. Paste your dread webhook URL
  5. Select V2 API version
  6. Choose event types: subscription_created, payment_succeeded, payment_failed, invoice_generated, etc.
  7. Click Create

Use the Test Webhook button to send a sample event. Chargebee retries failed deliveries automatically.

Chargebee events show the event type and object (e.g. subscription_created — plan Enterprise).

Coinbase Commerce

  1. Log in to commerce.coinbase.com
  2. Go to SettingsWebhook subscriptions
  3. Click Add an endpoint
  4. Paste your dread webhook URL
  5. Click Save
  6. Copy the Shared Secret displayed (used for signature verification)

Coinbase Commerce sends events for charges: charge:created, charge:confirmed, charge:failed, charge:pending, charge:resolved.

Charge events show the event type and amount (e.g. charge:confirmed — 0.005 BTC).

LemonSqueezy

  1. Log in to app.lemonsqueezy.com
  2. Go to SettingsWebhooks
  3. Click Add webhook (the + button)
  4. Paste your dread webhook URL in the Callback URL field
  5. Enter a Signing secret
  6. Select events: order_created, subscription_created, subscription_payment_success, license_key_created, etc.
  7. Click Save webhook

LemonSqueezy signs payloads with HMAC-SHA256 using the signing secret in the X-Signature header.

Order events show the event type and product (e.g. order_created — Pro Plan ($49.00)).

GitHub

  1. Go to your repository → Settings tab → Webhooks in the left sidebar
  2. Click Add webhook
  3. Paste your dread webhook URL in Payload URL
  4. Set Content type to application/json
  5. Under "Which events would you like to trigger this webhook?" select Let me select individual events and check the ones you want, or choose Send me everything
  6. Make sure Active is checked and click Add webhook

GitHub sends a ping event to confirm the setup.

Push events show branch and commit message. PRs show number and title. Stars show who starred. (e.g. push to main by alice — fix login bug)

GitLab

  1. Go to your project → SettingsWebhooks
  2. Click Add new webhook
  3. Paste your dread webhook URL in the URL field
  4. Select trigger events: Push events, Merge request events, Issues events, Pipeline events, etc.
  5. Click Add webhook

Requires Maintainer or Owner role. Use the Test dropdown to send a test event.

Push events show branch and author. MRs show title and action. Pipelines show status and ref. (e.g. MR opened — Add dark mode support)

Vercel

Requires Pro or Enterprise plan. Webhooks are configured at the team level, not per project.

  1. Go to your Team SettingsWebhooks
  2. Click Create Webhook
  3. Select events: Deployment (created, succeeded, error), Project (created, removed), etc.
  4. Choose target projects (all or specific ones)
  5. Paste your dread webhook URL
  6. Click Create Webhook and copy the secret key shown (it's only displayed once)
Deployment events show the project name (e.g. deployment.succeeded — my-app).

Sentry

  1. Go to SettingsDeveloper Settings
  2. Click Create New Integration → select Internal Integration
  3. Enter a name for the integration
  4. Paste your dread webhook URL in the Webhook URL field
  5. Set Permissions: Issue & Event to Read
  6. Under Webhooks, check: Issue, Error, and any other events you want
  7. Click Save Changes — the integration installs automatically on your org
Error and issue events show the issue title (e.g. issue.created — TypeError: Cannot read property 'map' of undefined).

Linear

  1. Click your profile icon → Settings
  2. Go to API (under Administration)
  3. Click New webhook
  4. Paste your dread webhook URL (must be publicly accessible HTTPS)
  5. Add a label and select resources: Issues, Comments, Projects, Cycles, etc.
  6. Save the webhook

Only workspace admins can create webhooks.

Issue events show the identifier and title (e.g. Issue updated — ENG-142 Fix onboarding flow).

Jira

Requires the Administer Jira global permission.

  1. Click the gear icon → System
  2. Go to AdvancedWebHooks
  3. Click Create a WebHook
  4. Enter a name and paste your dread webhook URL
  5. Select events (e.g. jira:issue_created, jira:issue_updated, comment_created)
  6. Optionally add a JQL filter to limit which issues trigger the webhook (e.g. project = PROD)
  7. Click Save
Issue events show the key and summary (e.g. jira:issue_updated — PROD-245 Update payment timeout).

Bitbucket

  1. Open your repository in Bitbucket
  2. Go to Repository settingsWebhooks
  3. Click Add webhook
  4. Enter a title and paste your dread webhook URL
  5. Under Triggers, select events: push, pull request (created, updated, merged, declined), issue events, etc.
  6. Click Save

Bitbucket sends a unique X-Hook-UUID header with each delivery. Use View requests on the webhook to see delivery history.

Push events show the branch and author. PRs show the title and action (e.g. pullrequest:created — Add dark mode).

CircleCI

  1. Open your project in CircleCI
  2. Go to Project SettingsWebhooks
  3. Click Add Webhook
  4. Enter a name for the webhook
  5. Paste your dread webhook URL in the Receiver URL field
  6. Select events: workflow-completed and/or job-completed
  7. Click Save

CircleCI includes a circleci-signature header for verification. Payloads include pipeline, workflow, and job details.

Workflow events show the status and name (e.g. workflow-completed — build-and-deploy (success)).

Buildkite

  1. Go to your Organisation SettingsNotification Services
  2. Click Add next to Webhook
  3. Paste your dread webhook URL
  4. Select events: build.scheduled, build.running, build.finished, job.started, agent.connected, etc.
  5. Optionally filter by pipeline
  6. Click Add Webhook Notification

Buildkite sends a X-Buildkite-Event header with every delivery. Use the Send test button to verify.

Build events show the pipeline and status (e.g. build.finished — deploy-prod (passed)).

Netlify

  1. Open your site in Netlify
  2. Go to Site configurationNotifications
  3. Click Add notificationOutgoing webhook
  4. Select an event: Deploy started, Deploy succeeded, Deploy failed, Form submission, etc.
  5. Paste your dread webhook URL
  6. Click Save

Note: Netlify creates one notification per event type. Repeat the steps for each event you want to receive.

Deploy events show the site name and status (e.g. deploy succeeded — my-app.netlify.app).

AWS SNS

  1. Open the SNS consoleTopicsCreate topic
  2. Choose Standard, enter a name, and click Create topic
  3. Select your topic, then click Create subscription
  4. Set Protocol to HTTPS
  5. Paste your dread webhook URL as the endpoint
  6. Click Create subscription
  7. dread will receive a SubscriptionConfirmation message — the subscription auto-confirms when dread responds with 200

Check the SNS console Subscriptions page — status should change from PendingConfirmation to Confirmed.

Notifications show the subject or message content (e.g. notification — Auto Scaling: instance i-0abc123 terminated).

PagerDuty

  1. Go to IntegrationsGeneric Webhooks (v3)
  2. Click New Webhook
  3. Paste your dread webhook URL
  4. Select event subscriptions: incident events (triggered, acknowledged, resolved, escalated) and/or service events
  5. Optionally add a description and custom headers
  6. Click Add Webhook and save the generated webhook secret

Requires Manager, Admin, or Account Owner role. Max 10 webhook subscriptions per scope.

Incident events show the incident title (e.g. incident.triggered — High CPU on web-prod-3).

Supabase

Supabase Database Webhooks fire when rows are inserted, updated, or deleted in your tables.

  1. Open your project in the Supabase Dashboard
  2. Go to DatabaseWebhooks in the sidebar
  3. Click Create a new hook
  4. Name your hook (e.g. new-booking) and select the table to watch
  5. Tick the events to fire on: Insert, Update, and/or Delete
  6. Under Hook type, select HTTP Request
  7. Set Method to POST and paste your dread webhook URL
  8. Add the header Content-Type: application/json
  9. Click Create webhook

The payload includes the type (INSERT/UPDATE/DELETE), the table name, record (new row data), and old_record (previous row data for updates/deletes).

Supabase events are detected via the X-Supabase-Event-Signature header and show the table name and operation type.

Grafana

  1. Open Grafana → go to AlertingContact points
  2. Click Add contact point
  3. Enter a name and select Webhook as the integration type
  4. Paste your dread webhook URL
  5. Set HTTP method to POST
  6. Optionally add a username and password for basic auth
  7. Click Save contact point
  8. Go to Notification policies and route alerts to your new contact point

Grafana sends alerts with labels, annotations, and the alert state (firing or resolved).

Alert events show the alert name and status (e.g. alerting — High CPU Usage [FIRING]).

Datadog

  1. Log in to Datadog
  2. Go to IntegrationsWebhooks
  3. Click New (or + New)
  4. Enter a name for the webhook
  5. Paste your dread webhook URL
  6. Optionally customise the Payload JSON template using Datadog variables ($EVENT_TITLE, $ALERT_STATUS, etc.)
  7. Click Save
  8. Use the webhook in monitor notifications by adding @webhook-your-name to the alert message

The webhook only fires when referenced in a monitor — it won't send events on its own.

Monitor events show the alert title and status (e.g. webhook — CPU above 90% on web-prod [Triggered]).

Cloudflare

  1. Log in to the Cloudflare Dashboard
  2. Go to Notifications in the left sidebar
  3. Click the Destinations tab
  4. Under Webhooks, click Create
  5. Enter a name and paste your dread webhook URL
  6. Click Save and Test — Cloudflare sends a verification request
  7. Go to the Notifications tab and create a notification
  8. Select an alert type (e.g. Origin Error Rate Alert, DDoS Attack Alert, SSL Certificate Expiration)
  9. Choose the webhook as the delivery destination
  10. Click Save
Alert events show the notification type and zone (e.g. cloudflare — Origin 5xx Error Rate Alert for example.com).

Heroku

Heroku uses the app-webhooks add-on for webhook notifications.

  1. Install the CLI plugin: heroku plugins:install @heroku-cli/plugin-webhooks
  2. Create a webhook:
heroku webhooks:add \
  --app your-app-name \
  --url https://dread.sh/wh/ch_xxx \
  --include api:release api:build api:dyno \
  --level notify
  1. Verify with heroku webhooks --app your-app-name

Events include api:release, api:build, api:dyno, api:formation, and api:addon. Set --level sync for guaranteed delivery (slower) or --level notify for best-effort (faster).

Release events show the action and version (e.g. api:release — v42 deployed).

Pingdom

  1. Log in to my.pingdom.com
  2. Go to SettingsIntegrations
  3. Click Add integration
  4. Select Webhook as the type
  5. Enter a name and paste your dread webhook URL
  6. Click Save integration
  7. Go to Monitoring → select a check → Edit
  8. Under Connect integrations, select your webhook
  9. Click Save

Pingdom sends alerts when checks go up or down, including the check name, status, and response time.

Uptime events show the check name and status (e.g. pingdom — api.example.com is DOWN).

UptimeRobot

  1. Log in to uptimerobot.com
  2. Go to My Settings (top right)
  3. Scroll to Alert Contacts and click Add Alert Contact
  4. Select Webhook as the alert contact type
  5. Paste your dread webhook URL
  6. Select POST as the method
  7. Optionally enable Send as JSON (recommended)
  8. Click Create Alert Contact
  9. Go to your monitor and add the new alert contact under Alert Contacts To Notify
Monitor events show the monitor name and status (e.g. webhook — api.example.com is down).

New Relic

  1. Log in to New Relic
  2. Go to Alerts & AIDestinations
  3. Click Add a destination → select Webhook
  4. Enter a name and paste your dread webhook URL
  5. Click Save destination
  6. Go to WorkflowsAdd a workflow
  7. Set your filter (e.g. policy name, priority, condition)
  8. Under Notify, select Webhook and choose your destination
  9. Customise the payload template if needed
  10. Click Activate workflow

New Relic sends alert notifications with issue details, condition name, and violation details.

Alert events show the condition and status (e.g. webhook — High Error Rate [ACTIVATED]).

Slack (as event source)

This receives events from Slack into dread. (For forwarding dread events to Slack, see Docs → Slack/Discord Forwarding.)

  1. Go to api.slack.com/appsCreate New AppFrom scratch
  2. Name your app and select your workspace
  3. In the sidebar, click Event Subscriptions and toggle it on
  4. Paste your dread webhook URL in Request URL — Slack sends a verification challenge that dread handles automatically
  5. Under Subscribe to bot events, add events like message.channels, app_mention, etc.
  6. Go to OAuth & Permissions and add the required scopes
  7. Click Install App to install to your workspace
Slack events show the event type and message text (e.g. message — Hey team, deploy is live).

Discord (as event source)

This receives interactions from Discord into dread.

  1. Go to discord.com/developers/applicationsNew Application
  2. Navigate to the General Information tab
  3. Paste your dread webhook URL in Interactions Endpoint URL
  4. Click Save Changes — Discord will send test PING requests to verify your endpoint

Your endpoint must handle the PING verification (dread does this automatically). Discord sends all interactions (slash commands, buttons) as HTTP POST requests.

Discord interactions show the type (e.g. command — /deploy).

Twilio

  1. Log in to console.twilio.com
  2. Go to Phone NumbersActive Numbers
  3. Click on the phone number you want to configure
  4. Scroll to the Messaging section
  5. Under "A Message Comes In", select Webhook
  6. Paste your dread webhook URL and set the method to POST
  7. Click Save

For Messaging Services: go to Messaging Services → select your service → Integration tab → enter the Inbound Request URL.

Twilio events show as generic webhook events with the message body from the SMS/call.

SendGrid

  1. Log in to SendGrid → go to SettingsMail Settings
  2. Select Event Webhooks
  3. Click Create new webhook
  4. Paste your dread webhook URL in the Post URL field
  5. Select event types: processed, delivered, bounced, open, click, spam report, etc.
  6. Toggle Enabled on
  7. Click Save

Use Test Your Integration to send a sample payload and verify.

SendGrid events show as generic webhook events with delivery status information.

Mailchimp

  1. Log in to Mailchimp
  2. Go to your AudienceSettingsWebhooks
  3. Click Create New Webhook
  4. Paste your dread webhook URL in the Callback URL field
  5. Select events: subscribes, unsubscribes, profile updates, cleaned, email changed, campaign sent
  6. Choose whether to fire for API-initiated changes, admin changes, or subscriber-initiated changes
  7. Click Save

Mailchimp sends form-encoded POST data (not JSON). dread handles both formats automatically.

Audience events show the event type and email (e.g. mailchimp — subscribe user@example.com).

Zendesk

Requires Admin access. Zendesk uses Webhooks (destination) paired with Triggers (rules) to send events.

  1. Go to Admin CentreApps and integrationsWebhooks
  2. Click Create webhook
  3. Select Trigger or automation as the connection method
  4. Enter a name and paste your dread webhook URL
  5. Set request method to POST and format to JSON
  6. Click Create webhook
  7. Go to Business rulesTriggersAdd trigger
  8. Set conditions (e.g. ticket created, status changed)
  9. Under Actions, select Notify webhook and choose your webhook
  10. Define the JSON body using placeholders ({{ticket.id}}, {{ticket.title}})
Ticket events show the trigger action and ticket info (e.g. zendesk — Ticket #4521 created: Cannot log in).

Intercom

  1. Log in to Intercom
  2. Go to SettingsIntegrationsDeveloper Hub
  3. Select your app (or create one) → click Webhooks
  4. Paste your dread webhook URL in the Webhook URL field
  5. Select topics: conversation.created, conversation.user.replied, contact.created, ticket.created, etc.
  6. Click Save

Intercom signs webhooks with HMAC-SHA1 using your app's client secret. The signature is in the X-Hub-Signature header.

Conversation events show the topic and user (e.g. intercom — conversation.user.replied by alice@example.com).

Postmark

  1. Log in to account.postmarkapp.com
  2. Select your Server → go to SettingsWebhooks
  3. Click Add webhook
  4. Paste your dread webhook URL
  5. Select message events: Delivery, Bounce, Spam Complaint, Open, Click, Subscription Change
  6. Optionally enable Include message content
  7. Click Save webhook

Use the Send test button on each event type to verify delivery. Postmark sends a X-Postmark-Webhooks-Auth header if you set an HTTP Auth username/password.

Email events show the event type and recipient (e.g. postmark — Bounce: user@example.com (hard bounce)).

Mailgun

  1. Log in to app.mailgun.com
  2. Go to SendingWebhooks
  3. Select your domain from the dropdown
  4. Click on an event type: Delivered, Opened, Clicked, Bounced, Complained, Unsubscribed, or Failed
  5. Paste your dread webhook URL and click Create webhook
  6. Repeat for each event type you want

Mailgun signs webhooks using your domain's API key. The signature is in the POST body as signature.token, signature.timestamp, and signature.signature.

Email events show the event type and recipient (e.g. mailgun — delivered to user@example.com).

Telegram

Telegram uses Bot API webhooks to push updates to your URL instead of polling.

  1. Create a bot via @BotFather on Telegram and note the bot token
  2. Set the webhook URL using the Telegram API:
curl -X POST "https://api.telegram.org/botYOUR_BOT_TOKEN/setWebhook" \
  -d "url=https://dread.sh/wh/ch_xxx"
  1. Verify the webhook is set:
curl "https://api.telegram.org/botYOUR_BOT_TOKEN/getWebhookInfo"

Telegram sends updates for messages, edited messages, channel posts, callback queries, and inline queries.

Message events show the sender and text (e.g. telegram — message from alice: Deploy ready?).

HubSpot

Requires a HubSpot developer account and a registered app.

  1. Log in to your HubSpot developer account
  2. Go to your app dashboard and select your app (or create one)
  3. Click Webhooks in the left sidebar
  4. Enter your dread webhook URL as the Target URL
  5. Click Create subscription
  6. Select the Object type (Contacts, Companies, Deals, Tickets)
  7. Select event types (creation, deletion, property changes)
  8. Click Subscribe — subscriptions start paused
  9. Hover over the subscription, check it, and click Activate
HubSpot events show the subscription type and object ID (e.g. contact.creation — object 12345).

Typeform

  1. Open your form in Typeform
  2. Click Connect in the top menu
  3. Click the Webhooks tab
  4. Click Add a webhook
  5. Paste your dread webhook URL
  6. Toggle the webhook ON (off by default)
  7. Optionally click Edit to add a secret for signature verification

Use View deliveriesSend test request to verify.

Typeform events show the form title (e.g. form_response — Customer Feedback Survey).

Clerk

Clerk uses Svix for webhook delivery.

  1. Log in to your Clerk Dashboard
  2. Go to Webhooks in the left sidebar
  3. Click Add Endpoint
  4. Paste your dread webhook URL
  5. Select events to receive: user.created, user.updated, user.deleted, organization events, session events, etc. (or leave unselected for all)
  6. Click Create
  7. Copy the Webhook Signing Secret from the endpoint settings page

Use the Testing tab on your endpoint page to send example events.

Clerk events are detected via the Svix-Id header and show as svix events with the event type.

Twitch EventSub

Twitch EventSub requires API calls to create subscriptions (no dashboard UI).

  1. Register an app at dev.twitch.tv/consoleApplicationsRegister Your Application
  2. Note your Client ID and generate a Client Secret
  3. Get an access token via the Client Credentials flow:
curl -X POST "https://id.twitch.tv/oauth2/token" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "grant_type=client_credentials"
  1. Create a webhook subscription:
curl -X POST "https://api.twitch.tv/helix/eventsub/subscriptions" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Client-Id: YOUR_CLIENT_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "channel.follow",
    "version": "2",
    "condition": {"broadcaster_user_id": "USER_ID", "moderator_user_id": "USER_ID"},
    "transport": {"method": "webhook", "callback": "https://dread.sh/wh/ch_xxx", "secret": "your-secret"}
  }'
  1. Twitch sends a verification challenge — dread responds automatically
Twitch events show the subscription type and broadcaster name (e.g. channel.follow — ninja).

Zapier

Zapier can connect 7,000+ apps to dread — even services that don't have native webhooks. Use a Zap to trigger from any supported service and POST to your dread channel.

  1. Log in to zapier.com → click CreateZaps
  2. Choose your Trigger app (e.g. Google Sheets, Notion, Airtable, QuickBooks, Monday.com — anything Zapier supports)
  3. Configure the trigger event (e.g. "New Row in Spreadsheet", "New Database Item")
  4. Connect your account and test the trigger
  5. Add an Action step → search for Webhooks by Zapier
  6. Select POST as the action event
  7. Set the URL to your dread webhook URL
  8. Set Payload Type to Json
  9. Map fields from the trigger into the payload data (e.g. type = "row.added", message = the row data)
  10. Add ?source=google-sheets to the end of your webhook URL to label events
  11. Test the action and turn on the Zap

This is the best way to connect services that don't support webhooks natively — Notion databases, Google Sheets, Airtable, Monday.com, Trello, and thousands more.

Events show the source you set and the mapped message (e.g. google-sheets — New row: Order #1042 from alice@example.com).

Calendly

  1. Log in to calendly.com
  2. Go to Integrations & apps
  3. Scroll to Webhooks (under API & connectors) and click Learn more
  4. You'll need to use the Calendly API to create a webhook subscription:
curl -X POST "https://api.calendly.com/webhook_subscriptions" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://dread.sh/wh/ch_xxx",
    "events": ["invitee.created", "invitee.canceled"],
    "organization": "https://api.calendly.com/organizations/YOUR_ORG_UUID",
    "scope": "organization"
  }'
  1. Get your API token from Integrations & appsAPI & connectorsPersonal access tokens
  2. Get your organisation UUID from GET /users/me

Events: invitee.created (new booking), invitee.canceled (cancelled booking), routing_form_submission.created.

Booking events show the event type and invitee (e.g. calendly — invitee.created: alice@example.com booked 30-Min Meeting).

DocuSign

DocuSign Connect sends real-time envelope status updates.

  1. Log in to DocuSign Admin
  2. Go to SettingsConnect
  3. Click Add ConfigurationCustom
  4. Enter a name for the configuration
  5. Paste your dread webhook URL in the URL to Publish field
  6. Under Trigger events, select envelope events: Sent, Delivered, Completed, Declined, Voided
  7. Set data format to JSON
  8. Click Save

Requires DocuSign Admin or Account Administrator role. Use Logs in the Connect settings to debug delivery issues.

Envelope events show the status and subject (e.g. docusign — Completed: NDA Agreement with Acme Corp).

Auth0

Auth0 uses Log Streams to send authentication events via webhook.

  1. Log in to the Auth0 Dashboard
  2. Go to MonitoringStreams
  3. Click Create Log Stream
  4. Select Custom Webhook
  5. Enter a name and paste your dread webhook URL
  6. Set Content Type to application/json
  7. Optionally set an Authorization Token (sent as a Bearer token)
  8. Under Filter by Event Category, select categories: login success, login failure, signup, password change, etc.
  9. Click Save

Auth0 sends events in batches. Each delivery may contain multiple log entries.

Auth events show the event type and user (e.g. auth0 — Successful login: alice@example.com).

LaunchDarkly

  1. Log in to LaunchDarkly
  2. Go to Integrations in the left sidebar
  3. Find Webhooks and click Add integration
  4. Paste your dread webhook URL
  5. Optionally check Sign this webhook and note the generated secret
  6. Select a Policy to filter which events trigger the webhook (or leave blank for all events)
  7. Toggle the webhook On
  8. Click Save

LaunchDarkly sends events for flag changes, project updates, environment changes, and member actions. Use policy filters to narrow to specific projects or flags.

Flag events show the action and flag key (e.g. launchdarkly — flag.updated: enable-new-checkout).

Figma

Figma webhooks are created via the Figma API (no dashboard UI).

  1. Generate a Personal Access Token at figma.com/developersManage personal access tokens
  2. Find your Team ID from the URL when viewing a team page (e.g. figma.com/files/team/123456)
  3. Create a webhook subscription:
curl -X POST "https://api.figma.com/v2/webhooks" \
  -H "Authorization: Bearer YOUR_FIGMA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "event_type": "FILE_UPDATE",
    "team_id": "123456",
    "endpoint": "https://dread.sh/wh/ch_xxx",
    "passcode": "your-secret"
  }'
  1. Available event types: FILE_UPDATE, FILE_DELETE, FILE_VERSION_UPDATE, FILE_COMMENT, LIBRARY_PUBLISH

Figma sends events for all files within the specified team. The passcode is included in every payload for verification.

File events show the event type and file name (e.g. figma — FILE_COMMENT on Homepage Redesign v2).

Salesforce

Salesforce sends webhook-style notifications via Outbound Messages in Workflow Rules or Flow.

  1. Go to Setup → search Outbound MessagesNew Outbound Message
  2. Select the Object (e.g. Lead, Opportunity, Case)
  3. Set Endpoint URL to your dread channel URL: https://dread.sh/wh/ch_xxx?source=salesforce
  4. Select the fields to include in the payload
  5. Create a Workflow Rule or Flow that triggers the outbound message on record create/update

Alternatively, use Salesforce Platform Events with a custom Apex trigger to POST JSON to your dread URL for more flexibility.

Events show the object type and action (e.g. salesforce — Opportunity updated: Acme Corp Deal).

Notion

Notion doesn't have native outgoing webhooks, but you can use Notion automations with a webhook action or connect via Zapier/Make.

  1. Open a Notion database → click Automations (lightning bolt icon)
  2. Set a trigger (e.g. When a page is added or When a property changes)
  3. Add action → Send webhook
  4. Set the URL to your dread channel: https://dread.sh/wh/ch_xxx?source=notion

Alternatively, use the Notion API with a polling script or connect Notion to dread via Zapier using a Webhooks by Zapier action.

Events show the database and page info (e.g. notion — Page added: Q1 Planning Notes).

Airtable

Airtable supports webhooks via Airtable Automations.

  1. Open your base → click Automations in the top bar
  2. Create a new automation with a trigger (e.g. When a record is created, When a record is updated)
  3. Add action → Send a webhook
  4. Set the URL to: https://dread.sh/wh/ch_xxx?source=airtable
  5. Configure the body to include the fields you want to track
  6. Test and enable the automation
Events show the table and record info (e.g. airtable — Record created in Projects: New landing page).

Asana

Asana sends webhooks via its API. Create a webhook subscription using the Asana API.

  1. Generate a Personal Access Token at app.asana.com/0/developer-console
  2. Find your Project GID from the project URL
  3. Create a webhook subscription:
curl -X POST "https://app.asana.com/api/1.0/webhooks" \
  -H "Authorization: Bearer YOUR_ASANA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "resource": "PROJECT_GID",
      "target": "https://dread.sh/wh/ch_xxx?source=asana"
    }
  }'
  1. Asana will send a handshake request — dread handles this automatically
  2. Events fire for task creation, completion, assignment, comments, and more
Events show the action and task (e.g. asana — Task completed: Design review for homepage).

Webflow

Webflow supports webhooks for site, form, and e-commerce events.

  1. Go to Site SettingsIntegrationsWebhooks
  2. Click Add Webhook
  3. Select a Trigger Type (e.g. Form submission, Site publish, Ecommerce order)
  4. Set the Webhook URL to: https://dread.sh/wh/ch_xxx?source=webflow
  5. Click Add Webhook to save

Available triggers include: form_submission, site_publish, page_created, ecomm_new_order, ecomm_order_changed, memberships_user_account_added, and more.

Events show the trigger type (e.g. webflow — form_submission on Contact Form).

Custom / Any Service

Any service that sends JSON webhooks works with dread. Just point it at your channel URL:

curl -X POST "https://dread.sh/wh/ch_xxx?source=myapp" \
  -H "Content-Type: application/json" \
  -d '{"type":"deploy.success","message":"v1.2.3 deployed to production"}'

Add ?source=myapp to the URL to control the source label. Use type or event in your JSON for the event type, and message or description for the summary text. You can also use the X-Dread-Source header instead.

For all other features (muting, alerts, export, digest, forwarding, status page, dashboard), see the Documentation.