Webhooks
Webhooks allow you to receive real-time HTTP notifications when records are created, updated, or deleted in Tribe CRM. Instead of polling the API, Tribe CRM will push a payload to your endpoint as events occur.
Creating a Webhook
Webhooks can be created through the Tribe CRM configuration page at app.tribecrm.nl/v2/configuration/api.
To create a new webhook, provide:
- The webhook endpoint HTTPS URL
- The entity type to bind to this webhook (e.g.
Relation.Organization)
After creation, additional filters can be added to limit which events trigger the webhook.
There is no limit to the number of webhooks in an environment.
Webhook API
Webhooks can be managed programmatically via the REST API at /v1/webhooks.
List Webhooks
/v1/webhooksYou can also query webhooks via OData:
/v1/odata/webhookCreate a Webhook
Organization webhook:
/v1/webhooksPerson webhook:
/v1/webhooksWith custom headers:
/v1/webhooksDelete a Webhook
/v1/webhooks/{id}Webhook Payload
Every webhook POST request carries a JSON body with this envelope:
| Field | Type | Description |
|---|---|---|
type | string | Always "Mutation" |
webhookId | string | Identifier of the webhook that triggered this event |
payload | object | The mutation payload — shape determined by payload.type |
The payload.type discriminator field indicates what changed:
type | Description |
|---|---|
Entity.Creation | A new entity record was created |
Entity.Update | A field value on an entity record changed |
Entity.Deletion | An entity record was deleted |
Relationship.Creation | A relationship between two records was created |
Relationship.Update | An existing relationship between two records changed |
Relationship.Deletion | A relationship between two records was removed |
Shared fields
All payload types include:
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier of this mutation |
type | string | Mutation type — one of the values above |
date | string | ISO 8601 timestamp of when the mutation occurred |
commitId | string | Groups all mutations from a single API call under one commit |
employeeId | string | Identifier of the employee who made the change |
Entity mutations
Entity.Creation, Entity.Update, and Entity.Deletion extend the shared fields with:
| Field | Type | Description |
|---|---|---|
entityTypeId | number | Numeric identifier of the entity type |
entityTypeCode | string | Entity type code (e.g. Relation.Organization) |
entityId | string | Identifier of the entity that was created, updated, or deleted |
Entity.Update additionally includes:
| Field | Type | Description |
|---|---|---|
field | string | Field code of the field whose value changed (e.g. Relationship.Person.Contact.Department) |
fieldId | number | Numeric identifier of the field |
toValue | string | New value of the field after the update |
{
"type": "Mutation",
"webhookId": "94cc6748-5673-44e3-a7ea-aa2ee3bf3dd8",
"payload": {
"id": "0380c648-6488-43c1-a7cf-1e28ac5b823c",
"type": "Entity.Update",
"date": "2026-06-11T14:51:47.230Z",
"commitId": "09f5a72c-ac42-4ac2-8f44-df3ef3ccadae",
"employeeId": "bbb79588-2c91-4b1f-a4ab-4bf39e8ce82f",
"entityTypeId": 566,
"entityTypeCode": "Relationship.Person.Contact.Standard",
"entityId": "0b5ed7a1-7569-4134-a301-efbc3eecb348",
"field": "Relationship.Person.Contact.Department",
"fieldId": 523,
"toValue": "IT"
}
}
Relationship mutations
Relationship.Creation, Relationship.Update, and Relationship.Deletion extend the shared fields with:
| Field | Type | Description |
|---|---|---|
relationshipTypeId | number | Numeric identifier of the relationship type |
relationshipTypeCode | string | Relationship type code |
relationshipId | string | Identifier of the relationship record |
fromParentId | string | Parent entity before the mutation (empty for creations) |
toParentId | string | Parent entity after the mutation (empty for deletions) |
fromChildId | string | Child entity before the mutation (empty for creations) |
toChildId | string | Child entity after the mutation (empty for deletions) |
{
"type": "Mutation",
"webhookId": "94cc6748-5673-44e3-a7ea-aa2ee3bf3dd8",
"payload": {
"id": "c2a7335b-5068-49af-82fc-1ca0b6fe57d7",
"type": "Relationship.Update",
"date": "2026-06-11T15:19:39.543Z",
"commitId": "5c4f9332-b1fb-4b82-820e-23eae20c8fdf",
"employeeId": "bbb79588-2c91-4b1f-a4ab-4bf39e8ce82f",
"relationshipTypeId": 540,
"relationshipTypeCode": "Relationship:AccountManager",
"relationshipId": "cea18a07-9e7d-4405-a0cd-6d0ba1e30d7c",
"fromParentId": "0b5ed7a1-7569-4134-a301-efbc3eecb348",
"toParentId": "0b5ed7a1-7569-4134-a301-efbc3eecb348",
"fromChildId": "b9dff733-73a8-4a9e-807c-c6e4966cdcc6",
"toChildId": "34e37f64-62e8-4f0d-8d03-8b9d72b2213c"
}
}
Use entityId from the payload to fetch the full record via a follow-up API call.
Tribe CRM does not support customizing the webhook payload.
Signature Verification
Each webhook event includes a signature in the message header. Use it to verify the authenticity of incoming requests.
The signature is generated as follows:
- Take the entire webhook body as a stringified JSON
- Use SHA-512 HMAC to encode it using the webhook secret (found on the webhook management page or returned once after webhook creation)
- Convert byte representation of the hash to Base64
Use a byte-to-Base64 converter, not a hex-to-Base64 converter — they produce different outputs.
To validate: compare the generated signature with the value in the webhook message header.
Authentication
A webhook can use basic authentication to connect with your endpoint. Username and password configuration must be requested via Tribe Support — no UI is currently available for this setting.
Alternatively, you can use custom headers to include an API key or other credentials in the webhook request. Verify the webhook signature to ensure the request is from Tribe CRM.
Logging
Webhook events appear in the log on the webhook management page. Logs are deleted after 7 days.
When a webhook fails, it is retried up to 5 times with an increasing backoff interval. After 5 failed attempts, automatic retries stop. A manual retry is available from the management page.
Failure Threshold
If a webhook endpoint keeps failing, the webhook will be automatically deactivated. The threshold is:
- 50 failed events within 7 days
The deactivation is shown on the webhook management page. You can reactivate the webhook after fixing the endpoint issue.
Supported Entity Types
Any entity that has an OData EntitySet can be bound to a webhook. Common examples:
| Entity Type | Description |
|---|---|
Relation.Organization | Company created / updated / deleted |
Relation.Person | Person created / updated / deleted |
Relationship.Organization.Customer | Customer relationship changes |
Activity.SalesOpportunity | Opportunity changes |
Activity.Invoice | Invoice changes |
Activity.Task | Task changes |
Activity.SupportTicket | Support ticket changes |