Webhooks: send real-time ContractHero events to your systems

What's in it for you


If you want contract data in other systems — Salesforce, HubSpot, Slack, BigQuery, n8n — the alternatives are waiting for manual exports or polling the ContractHero API every minute. Webhooks invert that: ContractHero reaches out on its own the moment something happens. You drop the polling load and react in real time, typically within seconds of the event.


Prerequisites


  • Webhooks are available from the Professional plan upwards.
  • You need a reachable HTTPS endpoint that accepts POST requests with a JSON body.
  • The owner role in ContractHero, with access to Settings → Integrations.


How it works


1. Open the webhook area


Go to Settings → Integrations („Einstellungen → Integrationen").





Switch to the Webhooks tab. If you haven't configured any yet, you'll see the note “no webhooks added" („Keine Webhooks hinzugefügt").





2. Create a webhook


Click “+ Add webhook” („+ Webhook hinzufügen") in the top right.






The configuration dialog has three parts:


  • Webhook name — an internal label that helps you find it again later (“Slack alerts Legal", for instance).
  • URL — the HTTPS endpoint that should receive the events, in the form https://hooks.your-endpoint.com/updates. Use “test URL” („URL testen") to check that ContractHero can reach it.
  • Events („Ereignisse") — tick the events that should fire this webhook (full list below).





3. Pick your events


Subscribe to events one by one, or use the header checkbox to take them all. Currently available:


Event

Fires when

contract.created

A contract is created — includes the full contract data, the source (upload, XML import, email), the creator and a timestamp.

contract.edited

A contract is edited — includes field-level changes, who edited it (for AI edits: ContractHero KI) and a timestamp.

member_invitation.created

Someone is invited to an organisation — includes the org name, who invited them, the email address, the role and a timestamp.

member_invitation.accepted

An invitation is accepted.

reminder.created

A task is created.

reminder.updated

A task is updated.

reminder.due_date_reached

A task reaches its due date.

reminder.sent

A reminder for a task goes out.

summary.update

A scheduled summary is sent (the monthly status report, for example).


4. Save and go live


After saving, the webhook appears in the Webhooks list. From that moment on, ContractHero sends a POST request with a JSON body to your endpoint for every subscribed event.




5. On your side: receiving the requests


Your endpoint should:


  • Speak HTTPS (not HTTP).
  • Answer the POST quickly with an HTTP 2xx, ideally in under five seconds, so ContractHero doesn't fall into a retry.
  • Read the event type out of the payload — the schema varies by event.
  • Process the payload asynchronously where needed (queue, worker) so the HTTP response isn't blocked.


Common questions


Which plans include webhooks?
Professional and above (Professional, Enterprise).


Are webhooks inbound or outbound?
Outbound. ContractHero sends HTTP POST requests to your endpoint when events happen. Writing into ContractHero from an external system goes through the REST API, not webhooks.


How quickly are events delivered?
Usually within a few seconds of the triggering event. Under load spikes, or if your endpoint is slow to answer, it can take longer.


What happens if my endpoint is briefly unreachable?
ContractHero retries delivery automatically. The number and frequency of retries can vary by event, so your endpoint should process idempotently — the same webhook may arrive twice without causing a double effect.


How do I secure the endpoint?
HTTPS at minimum, plus an internal secret in the payload or the URL path. If you want signature verification, talk to us and we'll look at it case by case.


How much data is transferred?
For contract.created and contract.edited, the payload carries the full contract data as of the event, including field-level changes on edits. Task events carry the task metadata.


Can I filter events — only one category, say?
Today you select the event type per webhook. Filtering by category, team or other contract fields has to happen on your side. Ask us if server-side filtering would make sense for your use case.


Can I run several webhooks in parallel?
Yes. Create as many as you like — typically one per target system (Salesforce, Slack, your own tool).


How do I test that my endpoint responds correctly?
The configuration dialog has a test URL button. ContractHero sends a test request so you can see immediately whether your endpoint is reachable and answering properly.


Can webhooks be fired retroactively for older events?
No — webhooks only send from the moment they're activated. To move existing data into a target system, use the export or the REST API.


Good to know


  • Idempotent processing is mandatory. Network trouble can cause the same webhook to be delivered more than once. Store event IDs and check before processing.
  • Fast 2xx, asynchronous logic. Write the payload into a queue immediately and answer ContractHero with 200 OK. Long synchronous processing leads to timeouts and retries.
  • HTTPS is not negotiable. ContractHero only accepts HTTPS endpoints. Self-signed certificates can cause problems — use a common CA (Let's Encrypt and similar).
  • Give webhooks telling names. “Salesforce contract creation" or “Slack Legal — deadlines reached" can be found again later. “Webhook 3" cannot.
  • n8n, Make and Zapier are ideal first targets. If you don't want to build a server, these no-code platforms hand you a ready-made HTTPS URL to paste in here.
  • We help with the setup. If the endpoint configuration is unfamiliar territory, we'll walk through it with you in an onboarding session — usually about an hour.



Updated on: 09/04/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!