Webhooks
Get pushed when an export finishes, a verification completes or a list gains matches. HMAC-signed, retried, replay-safe.
Events
| Event | When | Data |
|---|---|---|
export.ready | A verified export finished building | job_id, totals, download_api_path |
verification.completed | A single-email verification finished | email, status, deliverable |
segment.new_matches | A saved list gained new matching records | list_id, new_matches |
reply.received | A reply to one of your campaigns arrived | classification, lead_email, campaign_id, subject, snippet |
reply.positive | A reply was classified interested or meeting booked | same as above |
email.bounced | A campaign email bounced | lead_email, campaign_id, subject |
email.unsubscribed | A recipient opted out or complained | classification, lead_email, campaign_id |
Create a webhook
Shell
curl -X POST "https://app.argorant.com/api/mcp/webhooks" \
-H "Authorization: Bearer $ARGORANT_API_KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks/argorant","events":["export.ready","reply.received","reply.positive","email.bounced"]}'
# → { "id": "12", "secret": "whsec_…" } the secret is shown onceList with GET, remove with DELETE /api/mcp/webhooks/{id}, queue a sample with POST /api/mcp/webhooks/{id}/test. Up to 10 active webhooks per account.
Delivery
HTTP
POST /hooks/argorant
Content-Type: application/json
X-Argorant-Event: export.ready
X-Argorant-Delivery: 8841
X-Argorant-Signature: sha256=…
{ "event": "export.ready", "delivery_id": "8841", "created_at": "2026-06-10T09:14:03+00:00",
"data": { "job_id": 123, "status": "done", "total_rows": 500, "verified_rows": 463, "download_api_path": "/api/mcp/exports/123/download" } }Verify the signature
Python
import hmac, hashlib
def verify(secret: str, raw_body: bytes, signature_header: str) -> bool:
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature_header)Failed deliveries retry with backoff for 24 hours. X-Argorant-Delivery is stable across retries, so deduplicate on it.