Add a webhook
https address; private, loopback and cloud metadata addresses are refused. The answer includes the webhook’s signingSecret. GET /v1/webhooks lists every webhook with its secret, PATCH /v1/webhooks/{webhookId} renames, enables or disables one, and DELETE removes it. Over MCP these are list_webhooks, create_webhook, update_webhook and delete_webhook.
Choose what is sent
Each person in the workspace has a rule per notification category:action_required, error, status_update, insight and completion. A category reaches your webhooks when its rule lists the custom_webhook channel.
GET /v1/notification-rules lists the rules. They belong to the person who created the key, as each member sets their own in the dashboard.
What a delivery looks like
notification.data.type names the notification. GEO notifications are geo_action_required, geo_error, geo_completion, geo_insight and geo_status_update, and their data carries ids and a dashboard link, never drafts, diffs or pull request contents.
Verify the signature
Every delivery carries three headers:
Read the raw body before parsing it, recompute the signature, compare in constant time, and reject a timestamp more than five minutes old.
data.