// docs · notifications
Slack & Discord Notifications
Get a formatted card in Slack or Discord every time PullLight queues a new review — with severity breakdown, top finding, and a direct link to approve. One card per PR review run; no per-finding spam.
ON THIS PAGE
Setting up Slack
Setting up Discord
What the card looks like
Rate limits & retry behavior
Troubleshooting
💬 Setting up Slack
Slack uses the Incoming Webhooks app. You create a webhook for a specific channel, and PullLight POSTs a Block Kit card to it.
-
Go to api.slack.com/apps and click Create New App → From scratch. Name it
PullLight, pick your workspace, and click Create App. -
In the left sidebar, click Incoming Webhooks. Toggle the switch to On.
-
Scroll down and click Add New Webhook to Workspace. Pick the channel where you want PR notifications to appear (e.g.
#engineering-alertsor#code-review), and click Allow. -
Copy the webhook URL that looks like:https://hooks.slack.com/services/T00000000/B00000000/xxxxxxxxxxxxxxxxxxxx
-
Paste the URL into the Slack webhook URL field at /settings/notifications and click Send test to verify. Then click Save settings.
💡 Tip: Invite the
PullLight Slack app to the target channel if you're using a private channel (/invite @PullLight). The webhook will 404 on a private channel where the app isn't a member.
🎮 Setting up Discord
Discord has built-in webhook support — no app install needed. You create a webhook directly inside the channel settings.
-
Open Discord. Navigate to the server and channel where you want PR notifications (e.g.
#pr-reviews). -
Click the gear icon ⚙ next to the channel name to open Edit Channel. Go to the Integrations tab.
-
Click Webhooks → Create Webhook. Give it a name like
PullLight(Discord will use this as the display name in the channel). Optionally set an avatar. -
Click Copy Webhook URL. It will look like:https://discord.com/api/webhooks/000000000000000000/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
Paste the URL into the Discord webhook URL field at /settings/notifications, click Send test, then Save settings.
💡 Tip: Discord webhooks don't require any permissions — they bypass role restrictions and post directly to the channel. Keep the URL private; anyone with it can post to your channel.
📋 What the card looks like
Every notification contains:
- Repository name and PR number — linked directly to GitHub
- PR title
- Findings breakdown by severity (🔴 critical, 🟠 high, 🟡 medium, 🔵 low)
- Top finding — file + line number + actionable description
- Approve in PullLight button — deep links to the /reviews queue
- Footer: Reviewed by PullLight (good for screenshots your team might share)
⚠ One card per PR review run. If the same PR gets pushed to twice in quick succession, you'll get two cards — one per webhook trigger. PullLight does not deduplicate across re-pushes; that's handled by your branch protection rules.
⏱ Rate limits & retry behavior
| Scenario | Behavior |
|---|---|
| Normal send | POST immediately, log result |
| > 10 messages/hour per channel | Skip + log rate_limited — resumes next hour |
| HTTP 5xx from Slack/Discord | Retry 3× with exponential backoff (2s → 4s → 8s) |
| HTTP 4xx (bad URL, revoked) | Mark URL as invalid, email you to fix it, stop retrying |
All attempts (sent, failed, rate_limited) are visible in the Recent notifications table at /settings/notifications.
🔧 Troubleshooting
- Test button says "Send failed": The webhook URL has likely been deleted or revoked. Re-create it in Slack/Discord and paste the new URL.
- Slack returns 404 on a private channel: Invite the app to the channel (
/invite @PullLight). - URL shows "Invalid URL" badge: PullLight received a 4xx response. Update the URL at /settings/notifications.
- No notifications appearing despite "Active" badge: Check the Recent notifications log. If you see
rate_limited, you've hit 10 messages/hour. If you seefailed, check for 5xx errors from Slack/Discord (usually a transient outage). - Discord URL not accepted: Make sure you're using the full URL from Discord → Channel Settings → Integrations → Webhooks. URLs from Discord's bot API (
discord.com/api/v10/...) are not the same.
Ready to connect?
Open notification settings →