Brimble emits webhooks for deployment, project, domain, environment, DNS, autoscaling, subscription, and payment events. Wire them into your own endpoint, a Discord channel, or a Slack channel.Documentation Index
Fetch the complete documentation index at: https://paper.brimble.io/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
- A subscription on a plan that includes webhooks (Hacker and above).
- An HTTPS endpoint to receive POSTs, or a Discord/Slack incoming-webhook URL.
How webhooks are configured
Webhooks are configured per subscription, not per project. Three URLs can be configured, independently:| URL field | Format expected | Receives |
|---|---|---|
webhookUrl | An HTTPS endpoint you control | JSON POSTs (one event per request). |
discordUrl | A Discord channel webhook URL (https://discord.com/api/webhooks/.../...) | Discord-formatted messages. |
slackUrl | A Slack incoming webhook URL (https://hooks.slack.com/services/...) | Slack-formatted messages. |
Set up a webhook
- Open the dashboard.
- Open your account settings, then Webhooks (or your team’s webhook settings, if you’re configuring a team subscription).
- Paste an endpoint URL into one or more of Webhook URL, Discord URL, or Slack URL.
- Pick the events you want to receive. Use Select all to subscribe to every event.
- Save.
Image needed: screenshot of the Webhooks settings page showing the three URL input fields (Webhook, Discord, Slack), the events checklist grouped by category (Deployment, Project, Domain, Environment, DNS, Autoscaling, Subscription, Payment), and a Save button
["*"] to subscribe to everything. Use [] to disable delivery without removing the URL.
What an HTTP webhook delivery looks like
Verifying the source
Webhooks reach your endpoint through Brimble’s webhook delivery layer. The body is JSON with{event, data}; nothing else changes between deliveries.
Treat the endpoint URL itself as a shared secret. Don’t post your webhook URL publicly, in client-side code, in logs, or in screenshots. Anyone with the URL can post to it.
For high-trust workflows (sending notifications you’ll act on, mutating state in response to webhook events), require an additional secret on top of the URL. The simplest pattern is appending a token to the path:
Discord and Slack delivery
Discord and Slack URLs are pre-authenticated by URL secrecy. Each event is rendered as a channel message:- Discord gets an embed-style message with project name, event, and a short summary.
- Slack gets a block-formatted message with the same fields.
Delivery semantics
- At-least-once. A delivery may be retried if your endpoint fails or times out. Make your handler idempotent. Keying on
data.project_id(ordata.domain_id, etc.) pluseventplus the relevant timestamp works for most resources. - Order is not guaranteed. Two events from the same project can arrive out of order. Use
created_at/updated_atfromdatato reconcile. - Best-effort delivery. After repeated failures, a delivery is dropped. Your webhook stays enabled and continues to receive future events.
- No automatic disable. If your endpoint has been broken for hours, deliveries are dropped, but new events keep being attempted.
Test a webhook
Click Send test event on the webhook in the dashboard. The dashboard fires a synthetic event of the type you pick at the URL you’ve configured. Test events use the same envelope as real events.Troubleshooting
No deliveries at all. The webhook URL may not be saved. Check the webhook settings page in the dashboard. Also confirm the events list isn’t empty. Some events arrive, others don’t. The events you’re missing aren’t in your subscription list. Add them, or pass["*"] to subscribe to everything.
Discord/Slack worked once, now silent. The incoming-webhook URL was regenerated or removed at Discord/Slack (someone with admin on the channel did it, or the integration was reinstalled). Generate a new URL there and paste it back into Brimble’s webhook settings.
Endpoint times out under load. Acknowledge fast (return 200 immediately), then process asynchronously. Don’t run downstream calls inside the request handler.
Rapid duplicate deliveries. Most likely your endpoint returned a non-2xx status, triggering a retry. Confirm you return 200 even when the body is malformed; never error inside the handler before sending the response.
Next steps
- Webhook events reference, every event with full payload schema.
- Deployments, what triggers each
deployment.*event.