Skip to content

POST /v1/webhooks/instantly/{receiver_token}

Call POST /v1/webhooks/instantly/{receiver_token}
Price free
Scope none (public endpoint)
Operation id receiveInstantlyWebhook

Point Instantly’s webhook at this URL (copy it from the console) and Verdict turns its events into outcomes on the decision you tagged when sending. Not called by agents. The body is Instantly’s own payload, passed through unchanged. Verification: Instantly does not sign webhooks: the per-org receiver_token in the path authenticates the call, plus Instantly’s published source IPs where available. Mapping: email_sent to delivered, email_bounced to bounced, reply_received to replied, lead_interested to interested, lead_not_interested to not_interested, lead_meeting_booked to meeting_booked. Idempotent on the vendor’s event id. Free. Verdict never holds your Instantly credentials.

Copy it as curl. Set VERDICT_API_KEY first; uuidgen makes a fresh Idempotency-Key.

Request
curl -X POST 'https://api.askverdict.io/v1/webhooks/instantly/%3Creceiver_token%3E' \
-H 'Content-Type: application/json' \
-d '{
"event_type": "reply_received",
"timestamp": "2026-11-06T09:12:00Z",
"campaign_id": "cmp_example",
"lead_email": "[email protected]",
"verdict_decision_id": "dec_01JC3Z4Y8R9K2M5N7P1Q3S5T7V"
}'

200: The payload was verified and processed.

200 response
{
"received": true,
"duplicate": false,
"outcome_ids": [
"out_01JC3Z4Y8R9K2M5N7P1Q3S5T7V"
]
}
Name In Type Required Description
receiver_token path string yes Per-org receiver token issued in the console; identifies your organization. Treat the full URL as a secret.

Schema VendorWebhookBody. Instantly’s webhook payload.

Type: object.

Schema WebhookReceipt.

Field Type Required Description
received enum: true yes The payload was verified and accepted.
duplicate boolean yes True when this vendor event id was already processed.
outcome_ids array of string yes Outcomes created from the payload; empty when it maps to none.

Errors are RFC 9457 problem details and are never billed. Branch on type. See Errors.

Status Meaning
400 Invalid request: malformed JSON, an unknown field, a failed constraint or a size limit (invalid_request).
401 Missing, malformed, revoked or expired API key, or a bad webhook signature (unauthorized).
404 The resource does not exist in this organization (not_found).
429 Rate limited (rate_limited). Wait Retry-After seconds.
500 Unexpected server error (internal). Not billed; retry with the same Idempotency-Key.

Open the interactive reference to send this request from the browser. The full document is at /openapi.json.