Skip to main content

Overview

Webhooks notify your system when an email verification job completes or when an entire task finishes. Configure a webhook_url when creating a batch task or uploading a file. Webhook URLs must be HTTPS. You can receive two webhook types:
  • Per-email webhook: sent for each email as it completes (or is skipped).
  • Task completion webhook: sent once when the entire task finishes.
You can distinguish types by the data shape: per-email payloads include data.job, while task completion payloads include data.stats and data.jobs.

Delivery

Your endpoint receives an HTTP POST with JSON. Respond with a 2xx to acknowledge receipt. We retry on timeouts, connection errors, and 429/502/503/504 responses.

Headers

Each webhook includes:
  • Content-Type: application/json
  • User-Agent: EmailVerification/1.0
  • X-Webhook-ID: unique UUID per delivery
  • X-Webhook-Timestamp: Unix seconds when the request is sent
  • X-Webhook-Signature: HMAC-SHA256 of the raw request body (only when WEBHOOK_SECRET_KEY is configured). Format: sha256=<hex>

Signature verification

Compute the HMAC-SHA256 over the raw request body using your shared secret and compare to X-Webhook-Signature.

Payload format (HTTP request body)

All webhooks use the same outer envelope:
Field notes:
  • event_type is currently always email_verification_completed.
  • upload_id is optional and omitted in most current webhook payloads.
  • completed_at is when the webhook is sent (UTC).
  • data depends on webhook type (see below).

Per-email webhook payload

Sent once per email address. data contains the task context and a job object for the email.
Notes:
  • source and user_id are present when available; they may be omitted in some per-email sends.
  • job.email can be null or omitted if email details are unavailable.
  • job.skipped is included when an email is skipped.
  • verification_steps may be empty or omitted if no steps are recorded.

Task completion webhook payload

Sent once when all jobs for a task finish. data contains aggregated stats and the list of jobs.
Notes:
  • jobs can be large for big tasks; consider streaming/async processing on your side.
  • verification_steps may be empty or omitted if no steps are recorded.