POST /v1/webhooks/smartlead/{receiver_token}
| Call | POST /v1/webhooks/smartlead/{receiver_token} |
| Price | free |
| Scope | none (public endpoint) |
| Operation id | receiveSmartleadWebhook |
What it does
Section titled “What it does”Point Smartlead’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 Smartlead’s own payload, passed through unchanged. Verification: Smartlead’s webhook secret is checked when configured; otherwise the per-org receiver_token in the path authenticates the call. Mapping: EMAIL_SENT to delivered, EMAIL_BOUNCE to bounced, EMAIL_REPLY to replied, lead category changes to interested or not_interested. Idempotent on the vendor’s event id. Free. Verdict never holds your Smartlead credentials.
Example request
Section titled “Example request”Copy it as curl. Set VERDICT_API_KEY first; uuidgen makes a fresh Idempotency-Key.
curl -X POST 'https://api.askverdict.io/v1/webhooks/smartlead/%3Creceiver_token%3E' \ -H 'Content-Type: application/json' \ -d '{ "event_type": "EMAIL_REPLY", "event_timestamp": "2026-11-06T09:12:00Z", "campaign_id": 4821, "custom_fields": { "verdict_decision_id": "dec_01JC3Z4Y8R9K2M5N7P1Q3S5T7V" }}'Example response
Section titled “Example response”200: The payload was verified and processed.
{ "received": true, "duplicate": false, "outcome_ids": [ "out_01JC3Z4Y8R9K2M5N7P1Q3S5T7V" ]}Parameters
Section titled “Parameters”| 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. |
Request body
Section titled “Request body”Schema VendorWebhookBody. Smartlead’s webhook payload.
Type: object.
Response fields (200)
Section titled “Response fields (200)”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
Section titled “Errors”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. |
Try it
Section titled “Try it”Open the interactive reference to send this request from the browser. The full document is at /openapi.json.