Discover
Outbound Webhooks
9 min read
What it is
Send real bot events FROM haythix to external services — Slack, Discord, Telegram, Zapier, n8n, your own server. HMAC-SHA256 signed payloads. 5 event groups (Smart Trade / Grid Bot / DCA Safety / Alerts / Regime). 5 output formats (raw / Discord / Slack / Telegram / custom template). Auto-detects Discord and Slack URLs to suggest the right format. Up to 20 webhooks per user. Per-webhook delivery log with success/failure stats.
How to think about it
Inbound webhooks (CEX TradingView, DEX TradingView) RECEIVE alerts and trigger trades. Outbound Webhooks go the OTHER way — they push haythix's own events out to whatever tool you live in. Slack channel for trade notifications, Discord server for bot status, Zapier for "log every grid fill to Google Sheets", n8n for complex routing. Same engine, opposite direction. You are the producer; the external service is the consumer.
Step-by-step
-
Click "New Webhook"
Top of the page. Opens the create form. The button is disabled at 20 webhooks (user cap). Each webhook is one subscription — one URL receiving one set of event types in one format.
-
Paste the destination URL
Slack incoming webhook URL, Discord webhook URL, Telegram bot send-message URL, Zapier catch-hook URL, n8n webhook node URL, or your own server endpoint. The page auto-detects Discord (URL contains "discord.com/api/webhooks") and Slack ("hooks.slack.com") and auto-switches the Format option to match.
-
Pick which events to subscribe to
5 event groups: Smart Trade (entry filled, TP fired, SL fired, etc.) / Grid Bot (rung filled, range break, refill needed) / DCA Safety (slice fired, drift detected) / Alerts (any alert configured in Alerts page) / Regime (Conditional Bot regime switches). Within each group, pick specific event types or use "*" to subscribe to all events in that group.
-
Pick a format
5 options. raw = native {eventType, timestamp, data} JSON — for your own server, webhook.site, n8n, Zapier, Make.com. Discord = wraps into {content:"..."} so Discord renders bot events as chat messages with emojis. Slack = wraps into {text:"..."}. Telegram = formatted for Telegram bot sendMessage URL. Custom template = write your own message shape with {{eventType}}, {{data.symbol}} placeholders, works with ANY receiver.
-
Generate or paste a secret
Toggle "Generate secret" to have us produce a cryptographically random HMAC secret. The secret signs every delivery with HMAC-SHA256 in the X-Haythix-Signature header — your receiver verifies the signature to confirm the payload is genuine. Discord / Slack / Telegram do NOT verify HMAC — the secret is purely defensive for those (still useful if you ever switch to a raw receiver).
-
Save + use the Test button
After saving, the webhook appears in your list. Click it to open the detail view, then hit Test. Sends a synthetic event to your URL end-to-end. Within 1-2 seconds, the delivery shows in the per-webhook log with the response code from your receiver. Test always BEFORE relying on real events.
-
Watch the deliveries log
Detail view shows the last N deliveries with: timestamp, event type, HTTP status, response time, response body preview. Failed deliveries (non-2xx response) are flagged red. The aggregate hero stats show your overall success rate — under 95% means investigate.
-
Toggle enabled / disabled
Each webhook has an enable toggle. Disable = events stop firing to that URL without deleting the config. Useful for temporary blackouts (maintenance window on your receiver, paused Slack channel, etc.). Re-enable to resume.
Tips & pitfalls
- Use webhook.site to test before pointing at your real Slack/Discord. Webhook.site gives you a temporary URL that captures every delivery — see exactly what payload haythix sends before you commit to the integration.
- HMAC signature only works if your receiver checks it. Discord, Slack, Telegram do NOT — they accept any properly-formatted JSON. For your own server, ALWAYS verify the X-Haythix-Signature header before trusting the payload.
- Subscribe with "*" for a group ONLY if you actually want every event. Smart Trade with "*" could send dozens of events per day — make sure your receiver can handle the volume. For Slack channels that should stay readable, subscribe to specific high-signal events only.
- Custom template format unlocks weird receivers. PagerDuty, Opsgenie, OpsLevel, OneSignal, Notion API, Airtable webhooks all need specific payload shapes — custom template + your own JSON structure lets you fit any of them.
- Failed deliveries (4xx/5xx from receiver) do NOT auto-retry. The fire happens once. If your receiver was down, you missed those events. Critical events should also be logged elsewhere (in-app notifications, Alerts page) for redundancy.
- Format mismatch warning: if you point at a Discord URL but pick raw format, the page warns you. Discord rejects raw payloads with 400. Heed the warning — auto-detection gets it right 99% of the time.
- Telegram URL pattern: api.telegram.org/bot{TOKEN}/sendMessage?chat_id={CHAT_ID}. You need to register a Telegram bot via BotFather first, then start a chat with it to get a chat_id, then build the URL. More setup than Slack/Discord but works.
- Hero stats success rate is the canary. If it drops below 95%, one of your receivers is rejecting deliveries — open each webhook detail and check the deliveries log to find the failing endpoint.