Developers · Webhooks
Webhooks
A call to your system when something changes in meruma, so you never have to poll.
The events
| Event | When |
|---|---|
contact.created |
A contact was created |
contact.updated |
A contact changed |
card.created |
A card was created |
card.updated |
A card changed |
card.stage_changed |
A card moved to another stage |
They fire no matter where the change comes from: the app, the API, a form, an incoming message or an AI agent.
Create a webhook
Owners and admins create them in Integrations › For developers › Webhooks: the URL, the events and a description. When you create it, you get the secret to verify the signature, shown only once. They can also be created through the API, with POST /v1/webhooks: that is what Zapier and Make do.
The URL must be https:// on a public domain (port 443).
What arrives
Every event carries the full contact or card, exactly as the API returns it, and on *.updated events, which field changed:
{
"id": "6f0c2a1e-…",
"type": "contact.updated",
"timestamp": "2026-11-10T15:04:05.123Z",
"data": { "id": "…", "name": "John Smith", "emails": [], "customFields": {} },
"changedFields": ["name"]
}
Order is not guaranteed: use timestamp, the time of the change. Events are signed: see how to verify the signature.
Retries
A 2xx within 10 seconds counts as delivered. If your system does not respond, we retry 8 times over about 44 hours. A 410 turns the webhook off; so do 3 days in a row of failures, and we let you know.
In Webhooks you see each delivery with its response, and you can resend it or send a test one.
Reviewed on