incident.* events. Customer alerting follows issues instead. If you find incident-named events in older samples or docs, they’re stale.
Events
Set up an endpoint
1
Add an HTTPS endpoint
Open the project’s Settings → Webhooks, add an HTTPS endpoint, and select the issue events you want.
2
Save your signing secret
Copy the signing secret when Lemma shows it. It won’t be shown again, and regenerating it replaces the old value, so store it in your receiver’s secret manager immediately.
3
Verify signature and timestamp
Every request includes an
X-Lemma-Signature header containing sha256=<hex> and an X-Lemma-Timestamp header with the Unix delivery time in seconds. Verify the signature against the raw request body, then check the timestamp is recent, before you process anything. A 5-minute tolerance (the convention Stripe and GitHub also use) absorbs normal delivery and retry delay while still rejecting a replayed request.The signature is a Hash-based Message Authentication Code (HMAC) with SHA-256 over the exact raw body.- Node.js
- Python
4
Test delivery
Send a test event, confirm your endpoint returns
2xx, and leave it enabled.Headers and verification
Every request carries three headers you’ll use to verify and route it:X-Lemma-Signature: thesha256=<hex>HMAC-SHA256 of the raw bodyX-Lemma-Timestamp: Unix seconds; reject requests older than your tolerance to block replaysX-Lemma-Event: the event type; route on this header
Payload shape
The envelope always includesevent, timestamp, projectId, and an issue object with the issue’s ID, status, and related fields. Don’t expect an incident object; that shape doesn’t exist anymore.
Delivery and retries
Lemma counts a2xx response within 10 seconds as a successful delivery and retries failures with exponential backoff. You can review delivery history, status, and latency (not signing secrets) in Settings → Webhooks → Delivery log. Offload slow processing to a background job so you can return 2xx immediately.
Security checklist
- Verify
X-Lemma-Signatureand reject staleX-Lemma-Timestampvalues (a 5-minute tolerance works well) on every request - Route on
X-Lemma-Event - Use HTTPS endpoints only
- Store the signing secret in an environment variable, never in source control
- Remember this is distinct from Slack alerts and from Linear’s inbound webhooks to Lemma
Related pages
Issues
The lifecycle these events report.
Slack
Human-readable issue alerts in Slack instead of HTTP.
Connect your workflow
When to use webhooks versus Slack, Linear, or MCP.