Skip to main content

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

GET/v1/webhooks

You can also query webhooks via OData:

GET/v1/odata/webhook

Create a Webhook

Organization webhook:

POST/v1/webhooks

Person webhook:

POST/v1/webhooks

With custom headers:

POST/v1/webhooks

Delete a Webhook

DELETE/v1/webhooks/{id}

Webhook Payload

Every webhook POST request carries a JSON body with this envelope:

FieldTypeDescription
typestringAlways "Mutation"
webhookIdstringIdentifier of the webhook that triggered this event
payloadobjectThe mutation payload — shape determined by payload.type

The payload.type discriminator field indicates what changed:

typeDescription
Entity.CreationA new entity record was created
Entity.UpdateA field value on an entity record changed
Entity.DeletionAn entity record was deleted
Relationship.CreationA relationship between two records was created
Relationship.UpdateAn existing relationship between two records changed
Relationship.DeletionA relationship between two records was removed

Shared fields

All payload types include:

FieldTypeDescription
idstringUnique identifier of this mutation
typestringMutation type — one of the values above
datestringISO 8601 timestamp of when the mutation occurred
commitIdstringGroups all mutations from a single API call under one commit
employeeIdstringIdentifier of the employee who made the change

Entity mutations

Entity.Creation, Entity.Update, and Entity.Deletion extend the shared fields with:

FieldTypeDescription
entityTypeIdnumberNumeric identifier of the entity type
entityTypeCodestringEntity type code (e.g. Relation.Organization)
entityIdstringIdentifier of the entity that was created, updated, or deleted

Entity.Update additionally includes:

FieldTypeDescription
fieldstringField code of the field whose value changed (e.g. Relationship.Person.Contact.Department)
fieldIdnumberNumeric identifier of the field
toValuestringNew 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:

FieldTypeDescription
relationshipTypeIdnumberNumeric identifier of the relationship type
relationshipTypeCodestringRelationship type code
relationshipIdstringIdentifier of the relationship record
fromParentIdstringParent entity before the mutation (empty for creations)
toParentIdstringParent entity after the mutation (empty for deletions)
fromChildIdstringChild entity before the mutation (empty for creations)
toChildIdstringChild 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.

note

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:

  1. Take the entire webhook body as a stringified JSON
  2. Use SHA-512 HMAC to encode it using the webhook secret (found on the webhook management page or returned once after webhook creation)
  3. Convert byte representation of the hash to Base64
warning

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 TypeDescription
Relation.OrganizationCompany created / updated / deleted
Relation.PersonPerson created / updated / deleted
Relationship.Organization.CustomerCustomer relationship changes
Activity.SalesOpportunityOpportunity changes
Activity.InvoiceInvoice changes
Activity.TaskTask changes
Activity.SupportTicketSupport ticket changes