Developer
Webhooks
Subscribe to events and 9ID sends an HTTP POST to your URL when they happen. You can have up to 5 subscriptions.
# 9ID posts this to your URL
{
"event": "user.created",
"timestamp": "2026-10-09T09:30:00.000Z",
"data": { ... }
}POST /api/external/v2/webhooks
{
"url": "https://example.com/webhooks/9id",
"events": ["user.created", "task.updated"],
"oauth": {
"clientId": "...",
"clientSecret": "...",
"tokenUrl": "https://example.com/oauth/token"
}
} Each delivery carries an Authorization: Bearer header. 9ID fetches that token from your own OAuth token endpoint, using the client ID, secret and token URL you give when you subscribe. You can also add one custom header, such as an API key.
Answer with a 2xx status to confirm receipt. Any other answer, or a timeout, is retried up to 6 times, after 1, 2, 4, 8, 16 and 32 minutes. A subscription that keeps failing is marked inactive.
Events
| Resource | Events |
|---|---|
| Users | user.created, user.updated, user.deleted, user.restored |
| Companies | company.created, company.updated, company.deleted, company.restored |
| Events | event.created, event.updated, event.deleted, event.restored |
| Projects | project.created, project.updated, project.deleted, project.restored |
| Tasks | task.created, task.updated, task.deleted |
| Zones | zone.access.changed |
Want to see it on your own site?
Tell us what the gate has to do. We show you the matching flow.