Webhooks
Get notified the moment a record is created, updated or deleted.
Webhooks send an HTTP request to your system whenever data changes in Solid, so you never need to poll the API.
Create a webhook
- Go to Settings → APIs & Webhooks → Webhooks.
- Click + Create webhook and enter a public HTTPS URL.
- Click Save. Events start arriving immediately.
Events
| Event | Examples |
|---|---|
| Record created | person.created, company.created |
| Record updated | opportunity.updated |
| Record deleted | company.deleted |
Payload
Each event is a POST with a JSON body:
{
"event": "person.created",
"data": {
"id": "abc12345",
"name": { "firstName": "Ana", "lastName": "Souza" },
"createdAt": "2026-09-30T15:30:45Z"
},
"timestamp": "2026-09-30T15:30:50Z"
}Answer with any 2xx status to confirm delivery. Other responses are logged as failures.
Verify the signature
Every request is signed so you can check that it came from Solid. The headers keep the names of the open-source engine Solid is built on:
| Header | Content |
|---|---|
X-Twenty-Webhook-Signature | HMAC SHA-256 signature |
X-Twenty-Webhook-Timestamp | When the request was signed |
import crypto from 'node:crypto';
export function isFromSolid(req, secret) {
const timestamp = req.headers['x-twenty-webhook-timestamp'];
const expected = crypto
.createHmac('sha256', secret)
.update(`${timestamp}:${JSON.stringify(req.body)}`)
.digest('hex');
return expected === req.headers['x-twenty-webhook-signature'];
}Reject requests whose signature doesn't match, and ignore timestamps older than a few minutes to prevent replays.