Skip to main content
Jam can POST its notifications to a URL you run: a plan is ready, a pull request opened, a scan failed. Any member of the workspace can manage webhooks, from Settings, Notifications or from the API.

Add a webhook

The URL must be a public 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.
The settings page has a Test button that sends a test notification with empty data.