Skip to main content
Webhooks let Tomorro notify your systems in real time when something happens in your organization — instead of polling the API. When a subscribed event occurs, Tomorro sends an HTTP POST request to a URL you control, with the event details in the body.

Available events

A webhook can be triggered by any of the following actions:
Event typeTriggered when
contractCreatedA contract is created
contractDeletedA contract is deleted
contractSignedA contract is fully signed
contractStatusUpdatedA contract’s status changes
reminderEventCreatedA reminder is triggered
Webhooks are personal. A webhook only fires for events that concern the member who created it.
  • The contractCreated webhook only triggers if you are a participant of the contract.
  • The reminderEventCreated webhook only triggers if the reminder is intended for you.

Create a webhook

1

Open the Webhooks settings

Go to My account → Integrations → Webhooks, or open it directly:

Open Webhooks settings

app.tomorro.com → Settings → Integrations → Webhooks
2

Add a webhook

Click Add a webhook.
3

Configure it

  1. Name your webhook.
  2. Paste the URL that will receive the events.
  3. Select one or more triggers (the events that activate it).
  4. Click Create webhook.
4

Save your signing secret

A secret is generated for the webhook. Tomorro uses it to sign every event so you can verify authenticity — keep it safe and use it to check the Leeway-Signature header.

Event payloads

Every webhook is delivered as an HTTP POST with a JSON body. All events share the same top-level envelope; the event-specific content lives under data.

Envelope

FieldTypeDescription
eventIdstringUnique identifier of this event delivery (UUID).
webhookIdstringIdentifier of the webhook that produced the event (UUID).
createdAtstringISO 8601 timestamp of when the event was created.
eventTypestringOne of the available event types.
dataobjectThe event-specific payload (see examples below).
The data shape depends on eventType. Contract events wrap the contract under data.contract. Always branch on eventType before reading data.

Examples

{
  "eventId": "b21213e3-8a9a-4e04-9bfc-c4e53f123xxx",
  "webhookId": "2a76094c-1f2e-48c8-a47f-1add41234xxx",
  "createdAt": "2025-03-25T14:55:16.280Z",
  "eventType": "contractCreated",
  "data": {
    "contract": {
      "id": "6954ad41-19f3-446f-b0db-fcc661234xxx",
      "name": "TestWebhook",
      "organizationId": "115e926b-9c61-4172-8609-02212344exxx",
      "author": {
        "id": "974d2a1c-eb63-4237-877e-37d12341axxx",
        "user": {
          "id": "fd61234d-a4e1-4103-8d31-59e351d2bxxx",
          "username": "user@example.com",
          "firstname": "John",
          "lastname": "Doe"
        }
      },
      "referent": {
        "id": "974d2a1c-eb63-4237-877e-37123451axxx",
        "user": {
          "id": "fd61234d-a4e1-4103-8d31-59e351d2bxxx",
          "username": "user@example.com",
          "firstname": "John",
          "lastname": "Doe"
        }
      },
      "referentId": "974d2a1c-eb63-4237-877e-37123451axxx",
      "supervisorId": null,
      "externalCompany": {
        "id": "01611234-7cdf-4785-966e-ee06b74ccxxx",
        "name": "My external company"
      },
      "priorNoticeDuration": "undefined",
      "priorNoticeValue": null,
      "renewal": "no",
      "signatureDate": null,
      "status": "draft",
      "createdAt": "2025-03-25T14:55:14.690Z",
      "updatedAt": "2025-03-25T14:55:14.000Z",
      "documentId": null,
      "typeId": null,
      "templateId": null,
      "contractAttributes": [
        { "attributeDefinition": { "name": "durationType" }, "value": "PERMANENT" },
        { "attributeDefinition": { "name": "endAt" }, "value": null },
        { "attributeDefinition": { "name": "externalPartyName" }, "value": "My external company" },
        { "attributeDefinition": { "name": "initialDuration" }, "value": null },
        { "attributeDefinition": { "name": "internalPartyName" }, "value": "John Doe" },
        { "attributeDefinition": { "name": "language" }, "value": "fr" },
        { "attributeDefinition": { "name": "nextRenewalDate" }, "value": null },
        { "attributeDefinition": { "name": "priorNotice" }, "value": null },
        { "attributeDefinition": { "name": "renewalDuration" }, "value": null },
        { "attributeDefinition": { "name": "renewalType" }, "value": "no" },
        { "attributeDefinition": { "name": "signatureDate" }, "value": null },
        { "attributeDefinition": { "name": "startAt" }, "value": null }
      ],
      "attributes": {
        "durationType": { "value": "PERMANENT", "name": "durationType", "attributeDefinitionId": "durationType" },
        "endAt": { "value": null, "name": "endAt", "attributeDefinitionId": "endAt" },
        "externalPartyName": { "value": "My external company", "name": "externalPartyName", "attributeDefinitionId": "externalPartyName" },
        "initialDuration": { "value": null, "name": "initialDuration", "attributeDefinitionId": "initialDuration" },
        "internalPartyName": { "value": "John Doe", "name": "internalPartyName", "attributeDefinitionId": "internalPartyName" },
        "language": { "value": "fr", "name": "language", "attributeDefinitionId": "language" },
        "nextRenewalDate": { "value": null, "name": "nextRenewalDate", "attributeDefinitionId": "nextRenewalDate" },
        "priorNotice": { "value": null, "name": "priorNotice", "attributeDefinitionId": "priorNotice" },
        "renewalDuration": { "value": null, "name": "renewalDuration", "attributeDefinitionId": "renewalDuration" },
        "renewalType": { "value": "no", "name": "renewalType", "attributeDefinitionId": "renewalType" },
        "signatureDate": { "value": null, "name": "signatureDate", "attributeDefinitionId": "signatureDate" },
        "startAt": { "value": null, "name": "startAt", "attributeDefinitionId": "startAt" }
      }
    }
  }
}
Status-update events include the contract’s lifecycle fields (status, dateStatus, realEndDate, …) and the resolved attributes, where each attribute carries a human-readable valueLabel in addition to its raw value.
{
  "eventId": "dcdfce0c-5914-42b2-bcda-ce53b0afbed7",
  "webhookId": "a6493b01-0a87-4fd6-a851-8def5a76c9a1",
  "createdAt": "2026-06-10T13:08:43.801Z",
  "eventType": "contractStatusUpdated",
  "data": {
    "contract": {
      "id": "b9ce25f0-9b85-4c31-acf4-e6311e95xxxc",
      "name": "NDA - Adobe",
      "organizationId": "392ef54d-dc59-41f6-8ef9-37c6a1b7xxx3",
      "author": {
        "id": "53a9760f-ad03-4f18-b7e0-a52fe303xxx7",
        "user": {
          "id": "b30bb4d4-007c-4a93-b2e7-0be8b0bxxx9f",
          "username": "user@example.com",
          "firstname": "John",
          "lastname": "Doe"
        }
      },
      "referent": {
        "id": "53a9760f-ad03-4f18-b7e0-a52fe303xxx7",
        "user": {
          "id": "b30bb4d4-007c-4a93-b2e7-0be8b0xxx59f",
          "username": "user@example.com",
          "firstname": "John",
          "lastname": "Doe"
        }
      },
      "referentId": "53a9760f-ad03-4f18-b7e0-a52fe303xxx7",
      "supervisor": null,
      "supervisorId": null,
      "externalCompany": {
        "id": "e7d3d7d6-0f0b-4bdf-9233-7b7188aaxxx4",
        "name": "Adobe"
      },
      "durationType": "FIXED_TERM",
      "startAt": "2026-01-01T00:00:00.000Z",
      "endAt": "2026-01-31T00:00:00.000Z",
      "terminatedAt": null,
      "priorNoticeDuration": "undefined",
      "priorNoticeValue": null,
      "renewal": "no",
      "renewalType": "no",
      "renewalDuration": null,
      "renewalDurationUnit": null,
      "isRenewable": false,
      "signatureDate": null,
      "status": "negotiating",
      "dateStatus": "negotiating",
      "nextRenewedDate": null,
      "realEndDate": "2026-01-31T00:00:00.000Z",
      "createdAt": "2026-06-10T13:07:40.997Z",
      "updatedAt": "2026-06-10T13:08:43.000Z",
      "typeId": "7591d403-53df-41d4-8d5d-ec56aad4e375",
      "templateId": "74829184-734a-4f08-b0d5-9e36f67db126",
      "contractAttributes": [
        { "attributeDefinition": { "name": "Adresse du cocontractant" }, "value": "a" },
        { "attributeDefinition": { "name": "Département" }, "value": "a05e7e8d-a149-4c38-85e2-12cfc79674de" },
        { "attributeDefinition": { "name": "Loi applicable" }, "value": "915a2d5f-b6ba-4b2d-a01e-c63932a4c783" },
        { "attributeDefinition": { "name": "Forme juridique du cocontractant" }, "value": "6917969e-3e7f-4cc8-a027-4f54cfce32ee" },
        { "attributeDefinition": { "name": "Richtext" }, "value": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"Sample text\"}]}]" },
        { "attributeDefinition": { "name": "Équipe" }, "value": "396c1bd9-7740-411f-bab4-854b995c2734" },
        { "attributeDefinition": { "name": "Montant" }, "value": "12000" },
        { "attributeDefinition": { "name": "Type de durée" }, "value": "FIXED_TERM" },
        { "attributeDefinition": { "name": "Date de fin" }, "value": "2026-01-31" },
        { "attributeDefinition": { "name": "Counterparty name" }, "value": "Adobe" },
        { "attributeDefinition": { "name": "Durée " }, "value": "1:month" },
        { "attributeDefinition": { "name": "Dénomination sociale de votre organisation" }, "value": "Acme Corp" },
        { "attributeDefinition": { "name": "Language of the document" }, "value": "fr" },
        { "attributeDefinition": { "name": "général Tomorro - Prochaine date de reconduction" }, "value": null },
        { "attributeDefinition": { "name": "Préavis" }, "value": null },
        { "attributeDefinition": { "name": "ID du projet" }, "value": "260600003" },
        { "attributeDefinition": { "name": "général Tomorro - Durée de reconduction" }, "value": null },
        { "attributeDefinition": { "name": "Type de reconduction" }, "value": "no" },
        { "attributeDefinition": { "name": "Date de signature du contrat-cadre" }, "value": null },
        { "attributeDefinition": { "name": "Start date" }, "value": "2026-01-01" }
      ],
      "attributes": {
        "0144e4a2-75ed-4893-954f-84686eb94ad6": { "value": "a", "name": "Adresse du cocontractant", "attributeDefinitionId": "0144e4a2-75ed-4893-954f-84686eb94ad6", "valueLabel": "a" },
        "12caf9df-d15d-4267-88b6-29b0ca9e4659": { "value": "a05e7e8d-a149-4c38-85e2-12cfc79674de", "name": "Département", "attributeDefinitionId": "12caf9df-d15d-4267-88b6-29b0ca9e4659", "valueLabel": "Comptabilité / Finances" },
        "14862943-7b0f-49ed-aa0a-33d1084fe1b6": { "value": "915a2d5f-b6ba-4b2d-a01e-c63932a4c783", "name": "Loi applicable", "attributeDefinitionId": "14862943-7b0f-49ed-aa0a-33d1084fe1b6", "valueLabel": "FR" },
        "32dc2fd1-6048-43aa-bbde-bb9e2b19f740": { "value": "6917969e-3e7f-4cc8-a027-4f54cfce32ee", "name": "Forme juridique du cocontractant", "attributeDefinitionId": "32dc2fd1-6048-43aa-bbde-bb9e2b19f740", "valueLabel": "EI" },
        "6dd82116-95a4-40a7-8100-4e9776d01d7f": { "value": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"Sample text\"}]}]", "name": "Richtext", "attributeDefinitionId": "6dd82116-95a4-40a7-8100-4e9776d01d7f", "valueLabel": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"Sample text\"}]}]" },
        "96864b82-de02-43ad-8d68-1f60273d8aa5": { "value": "396c1bd9-7740-411f-bab4-854b995c2734", "name": "Équipe", "attributeDefinitionId": "96864b82-de02-43ad-8d68-1f60273d8aa5", "valueLabel": "Tech" },
        "d6cf7bb4-c897-498c-85ec-cf02251e6f9d": { "value": "12000", "name": "Montant", "attributeDefinitionId": "d6cf7bb4-c897-498c-85ec-cf02251e6f9d", "valueLabel": "12000" },
        "durationType": { "value": "FIXED_TERM", "name": "Type de durée", "attributeDefinitionId": "durationType", "valueLabel": "FIXED_TERM" },
        "endAt": { "value": "2026-01-31", "name": "Date de fin", "attributeDefinitionId": "endAt", "valueLabel": "2026-01-31" },
        "externalPartyName": { "value": "Adobe", "name": "Counterparty name", "attributeDefinitionId": "externalPartyName", "valueLabel": "Adobe" },
        "initialDuration": { "value": "1:month", "name": "Durée ", "attributeDefinitionId": "initialDuration", "valueLabel": "1:month" },
        "internalPartyName": { "value": "Acme Corp", "name": "Dénomination sociale de votre organisation", "attributeDefinitionId": "internalPartyName", "valueLabel": "Acme Corp" },
        "language": { "value": "fr", "name": "Language of the document", "attributeDefinitionId": "language", "valueLabel": "fr" },
        "nextRenewalDate": { "value": null, "name": "général Tomorro - Prochaine date de reconduction", "attributeDefinitionId": "nextRenewalDate", "valueLabel": null },
        "priorNotice": { "value": null, "name": "Préavis", "attributeDefinitionId": "priorNotice", "valueLabel": null },
        "projectIdentifier": { "value": "260600003", "name": "ID du projet", "attributeDefinitionId": "projectIdentifier", "valueLabel": "260600003" },
        "renewalDuration": { "value": null, "name": "général Tomorro - Durée de reconduction", "attributeDefinitionId": "renewalDuration", "valueLabel": null },
        "renewalType": { "value": "no", "name": "Type de reconduction", "attributeDefinitionId": "renewalType", "valueLabel": "no" },
        "signatureDate": { "value": null, "name": "Date de signature du contrat-cadre", "attributeDefinitionId": "signatureDate", "valueLabel": null },
        "startAt": { "value": "2026-01-01", "name": "Start date", "attributeDefinitionId": "startAt", "valueLabel": "2026-01-01" }
      }
    }
  }
}