Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
Creează Webhook
- Mergeți la Setări → API-uri şi Webhooks → Webhooks
- Faceți clic pe + Creează webhook
- Enter your webhook URL (must be publicly accessible)
- Faceți clic pe Salvare
The webhook activates immediately and starts sending notifications.
Administrează Webhooks
Edit: Click the webhook → Update URL → Save
Delete: Click the webhook → Delete → Confirm
Evenimente
Twenty sends webhooks for these event types:
| Eveniment | Exemplu |
|---|
| Record Created | person.created, company.created, note.created |
| Record Updated | person.updated, company.updated, opportunity.updated |
| Record Deleted | person.deleted, company.deleted |
All event types are sent to your webhook URL. Event filtering may be added in future releases.
Each webhook sends an HTTP POST with a JSON body:
{
"event": "person.created",
"data": {
"id": "abc12345",
"firstName": "Alice",
"lastName": "Doe",
"email": "[email protected]",
"createdAt": "2025-02-10T15:30:45Z",
"createdBy": "user_123"
},
"timestamp": "2025-02-10T15:30:50Z"
}
| Câmp | Descriere |
|---|
eveniment | What happened (e.g., person.created) |
date | The full record that was created/updated/deleted |
marcaj temporal | When the event occurred (UTC) |
Respond with a 2xx HTTP status (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
Validarea Webhook-ului
Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
| Antet | Descriere |
|---|
X-Twenty-Webhook-Signature | HMAC SHA256 signature |
X-Twenty-Webhook-Timestamp | Request timestamp |
Validation Steps
- Get the timestamp from
X-Twenty-Webhook-Timestamp
- Create the string:
{timestamp}:{JSON payload}
- Compute HMAC SHA256 using your webhook secret
- Compare with
X-Twenty-Webhook-Signature
Example (Node.js)
const crypto = require("crypto");
const timestamp = req.headers["x-twenty-webhook-timestamp"];
const payload = JSON.stringify(req.body);
const secret = "your-webhook-secret";
const stringToSign = `${timestamp}:${payload}`;
const expectedSignature = crypto
.createHmac("sha256", secret)
.update(stringToSign)
.digest("hex");
const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
Webhooks vs Workflows
| Metodă | Direcție | Use Case |
|---|
| Webhooks | OUT | Automatically notify external systems of any record change |
| Workflow + HTTP Request | OUT | Send data out with custom logic (filters, transformations) |
| Workflow Webhook Trigger | IN | Receive data into Twenty from external systems |
For receiving external data, see Set Up a Webhook Trigger.