Integrations
Webhooks
Push leads and events into Muntri, and subscribe to changes going out — every outbound delivery is signed and retried.
Two directions
-
Inbound
An external system (a web form, a partner)
POSTs data into Muntri to create a lead. -
Outbound
Muntri
POSTs to your endpoint whenever records change — you react in real time.
Inbound: push a lead in
Send a lead to Muntri from any external system. The lead runs through the same validation as everything else — deduplication, source tracking and automatic lead scoring.
Endpoint
curl -X POST "https://{slug}.muntri.com/api/webhooks/leads" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"first_name": "Jane",
"last_name": "Doe",
"company": "Acme Corp",
"title": "VP Sales",
"source": "website"
}'
Provide at least one of email, first_name or last_name; the rest are optional.
What happens to an inbound lead
- Deduplication check (a duplicate email is flagged, not blocked)
- Source is recorded as
webhook - Lead scoring runs automatically in the background
- A lead activity is logged so it shows on the timeline
Outbound: subscribe to changes
Register an endpoint and Muntri will call it whenever a subscribed event fires. You control the URL, choose which events to receive, and get a signing secret to verify every request.
Create an endpoint. Add your HTTPS URL and pick the events you care about. Muntri returns a signing secret (shown once).
Verify the signature. Every delivery carries an HMAC-SHA256 signature — check it before trusting the payload.
Handle the event. Read the payload and act. Return a 2xx; Muntri retries on failure.
Events you can subscribe to
| Area | Events |
|---|---|
| Leads | leads.created, leads.updated |
| Contacts | contacts.created, contacts.updated |
| Accounts | accounts.created, accounts.updated |
| Opportunities | opportunities.created, opportunities.updated, opportunities.deleted |
| Quotes | quotes.updated |
| Comments | opp_comments.created |
| Conversations | conversations.created |
| Workflows | workflow_runs.created, workflow_runs.updated |
Delivery flow
sequenceDiagram
participant M as Muntri
participant Y as Your endpoint
M->>M: Record changes
M->>M: Sign payload (HMAC-SHA256)
M->>Y: POST with X-Muntri-Signature
Y-->>M: 2xx OK
Note over M,Y: Non-2xx or timeout → retried
Example payload
Deliveries carry an X-Muntri-Event header and a JSON body describing what changed:
{
"action": "updated",
"old_values": { "stage": "Proposal" },
"new_values": { "stage": "Negotiation" }
}
Verifying the signature
Each request includes X-Muntri-Signature: sha256=<hex digest>, an HMAC-SHA256 of the raw body using your endpoint's secret. Compare it before processing:
import hmac, hashlib
def verify(body: bytes, signature: str, secret: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
Test and rotate
Send a test delivery from your endpoint's settings to confirm your receiver works, and rotate the secret anytime — the old one stops signing immediately.
HTTPS only
Outbound endpoints must be public HTTPS URLs. Internal or loopback addresses are rejected for safety.
Replaying a delivery
Failed (or successful) deliveries can be re-sent from the delivery log:
The replay creates a fresh delivery record with the original payload and attempts it immediately — the response includes the receiving endpoint's status code.