Jam webhooks send HTTP push notifications when a Jam is created. Use them to trigger CI builds, forward bug reports to external systems, post to Slack, file tickets automatically, or start any workflow that should react to a new Jam. Webhooks are scoped to a Jam workspace. Configure them per workspace to match each team’s tooling. Jam supports the following webhook events:Documentation Index
Fetch the complete documentation index at: https://jam.dev/docs/llms.txt
Use this file to discover all available pages before exploring further.
jam.created: fired when a new Jam is captured from any origin, including the Chrome extension, iOS app, dashboard, Fin (Intercom) integration, or Recording Link. Most integrations should subscribe to this event.intercom.recorder.recorded: fired when a customer submits a screen recording through Jam’s Intercom integration. Use this when tuning Fin AI Agent behavior after a recording arrives mid-conversation.intercom.recorder.opted_out: fired when a customer declines to record through Jam’s Intercom integration. Use this when tuning Fin AI Agent behavior after a customer opts out.
jam.created.
Getting started
First, build a webhook consumer for Jam’s webhook agent to call. You can deploy your own HTTP server, use a function platform like Netlify Functions, Vercel Functions, or Cloudflare Workers, or test with a service like RequestBin. You can also use no-code and low-code tools such as Zapier and n8n. Once your consumer accepts requests, configure the webhook for your workspace.A minimal webhook consumer
Jam signs webhook deliveries using the Standard Webhooks format, powered by Svix. The easiest way to verify is the official Svix SDK, which handles signature comparison, timestamp tolerance, and key rotation for you. Deployed on Netlify, a basic consumer looks like this:${svix-id}.${svix-timestamp}.${body}, base64-encoded, and may include multiple space-separated versions during key rotation:
Creating a webhook
In the Jam dashboard, go to Settings → Webhooks and click Manage to open the Webhook Portal. All endpoint configuration happens in the portal. Manual endpoint setup- In the portal, click Add Endpoint.
- Enter your endpoint URL.
- Select the events to subscribe to.
- Confirm creation.
- Select Intercom Fin from the webhook dropdown.
- Paste the URL provided by Intercom.
- Subscribe to
intercom.recorder.recordedandintercom.recorder.opted_out. - Confirm creation.
whsec_). Store it as WEBHOOK_SECRET, or whatever name fits your stack, and use it to verify incoming requests.
The webhook is enabled by default. Capture a Jam to test it.
Webhook Portal
The Webhook Portal, also under Settings → Webhooks, gives you operational visibility into every endpoint:- Delivery logs for each attempt, with success and failure status.
- Replay for failed deliveries so you can re-fire a payload after fixing your consumer.
- Signing secret for verifying request authenticity.
- Success rate and delivery statistics over time.
- Full payload inspection, including headers and body, for any past delivery.
Webhook payload
The payload arrives as JSON over HTTPS with these headers:| HTTP header | Description |
|---|---|
svix-id | Unique ID for this delivery. Use it as an idempotency key on your side. |
svix-timestamp | Unix timestamp (seconds) when the delivery was signed. |
svix-signature | One or more space-separated v1,<base64-hmac> signatures of ${svix-id}.${svix-timestamp}.${body}. Multiple versions are present during signing-key rotation. |
jam.created body
| Field | Type | Description |
|---|---|---|
jamId | string | Unique ID of the Jam. |
jamUrl | string | Shareable URL where the Jam can be viewed. |
teamId | string | ID of the workspace the Jam belongs to. |
type | string | One of video, screenshot, sessionReplay. |
createdAt | string | ISO 8601 timestamp when the Jam was created. |
title | string | Jam title. May be absent. |
description | string | Jam description. May be absent. |
originalUrl | string | Website URL where the Jam was captured. May be absent. |
origin | string | Capture source, such as recording_link, extension_chrome, mobile_ios, dashboard, or csup_intercom. May be absent. |
isIncognito | boolean | Whether the Jam was captured in an incognito or private session. May be absent. |
author | object | The user who captured the Jam. Includes email and may include name. |
media | object | URLs for the captured media. Includes videoUrl, screenshotUrl, and thumbnailUrl where applicable. |
systemInfo | object | Capture environment. Includes browser (name, version), os (name, version), and screen (width, height) where applicable. |
jamId, jamUrl, teamId, type, createdAt, author, media, systemInfo.
Example payload
FAQ
How does a Webhook work?
How does a Webhook work?
A webhook push is an
HTTP POST request sent to a URL you choose. Jam triggers it automatically when a Jam is created.Your webhook consumer is an HTTP endpoint. It must:- Be available at a publicly accessible HTTPS, non-localhost URL.
- Respond to the push with
HTTP 200(“OK”).
- Immediately
- 5 seconds
- 5 minutes
- 30 minutes
- 2 hours
- 5 hours
- 10 hours
- 10 hours, in addition to the previous attempt