ZeroBounce · AsyncAPI Specification

Zerobounce Webhooks

Version

View Spec View on GitHub Email ValidationEmail DeliverabilityEmail VerificationMarketingLead ScoringAnti-SpamData QualityEmail FinderDeliverability MonitoringDMARCAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-13'
method: searched
source: >-
  https://www.zerobounce.net/docs/email-validation-api-quickstart/v2-send-file/ and
  https://www.zerobounce.net/docs/email-validation-api-quickstart/greylist-api-processing
docs: https://www.zerobounce.net/docs/email-validation-api-quickstart/v2-file-management-api
asyncapi_spec_published: false
asyncapi_note: >-
  ZeroBounce publishes NO AsyncAPI document. Probed every host for /asyncapi.yaml,
  /asyncapi.json and an event catalog; nothing served. What exists is a real but small
  callback surface — two caller-registered completion callbacks — captured here as a
  webhook catalog rather than fabricated as an AsyncAPI spec.
summary: >-
  ZeroBounce has no event bus, no subscription management and no event catalog. It has
  two fire-and-forget completion callbacks, both registered per-request as a URL
  parameter on the call that starts the work, both delivered once when a long-running job
  finishes. There is no signature, no shared secret, no retry policy and no replay — and
  the provider states plainly that duplicate requests produce duplicate callbacks, each
  of which is charged.
model: per-request callback URL
subscription_management: none
signing: none
signature_header: null
replay: none
delivery_guarantee: at-most-once, no documented retry

webhooks:
  - id: bulk_validation_complete
    name: Bulk validation file complete
    registered_on: 'POST https://bulkapi.zerobounce.net/v2/sendfile'
    parameter: return_url
    required: false
    method: POST
    content_type: application/json
    description: >-
      POSTed to the caller's return_url when a bulk email-validation file finishes
      processing. Carries only the job handle — results must then be pulled with
      GET /v2/getfile?file_id=...
    payload_example_verbatim: |
      {
        "file_id": "aaaaaaa-zzzz-xxxx-yyyy-5003727fffff",
        "file_name": "Your file name.csv",
        "upload_date": "2023-04-28T15:25:41Z"
      }
    payload_fields:
      - name: file_id
        type: string
        format: uuid-like
        description: Job handle returned by sendfile; use it against filestatus/getfile.
      - name: file_name
        type: string
        description: Original uploaded file name.
      - name: upload_date
        type: string
        format: date-time
        description: ISO 8601 UTC timestamp of the original upload.
    follow_up:
      - 'GET https://bulkapi.zerobounce.net/v2/getfile?api_key=...&file_id=...'

  - id: bulk_ai_scoring_complete
    name: Bulk AI scoring file complete
    registered_on: 'POST https://bulkapi.zerobounce.net/v2/scoring/sendfile'
    parameter: return_url
    required: false
    method: POST
    content_type: application/json
    description: >-
      Same completion callback shape as bulk validation, for the AI scoring file pipeline.
      The MCP server exposes this as the `returnUrl` argument on
      bulk_ai_scoring_send_file.
    payload_fields:
      - name: file_id
        type: string
      - name: file_name
        type: string
      - name: upload_date
        type: string
        format: date-time
    payload_confidence: >-
      medium — the scoring pipeline mirrors the validation pipeline and the MCP tool
      exposes the identical returnUrl argument, but ZeroBounce publishes the verbatim
      payload example only on the validation sendfile page.
    follow_up:
      - 'GET https://bulkapi.zerobounce.net/v2/scoring/getfile?api_key=...&file_id=...'

  - id: greylist_processing_complete
    name: Greylist re-validation complete
    registered_on: 'GET /v2/validate (with greylist_processing=true)'
    parameter: callback_url
    required: false
    method: not documented
    description: >-
      When a greylisted address is re-validated asynchronously, ZeroBounce sends an HTTP
      request to callback_url with the result. ZeroBounce treats the callback as delivered
      when the receiver answers 200 or 201.
    success_criteria: Receiver must return HTTP 200 or 201.
    payload_fields: not documented
    payload_note: >-
      The greylist page does not publish the callback payload shape or an example — an
      integrator cannot write the receiver from the docs alone.
    billing_note_verbatim: >-
      "duplicate requests are allowed. If you make the same request twice, you can expect
      two callbacks. Each callback will be charged."

receiver_requirements:
  - Publicly reachable HTTPS URL.
  - Return 200 or 201 (greylist callback explicitly; the file callbacks do not publish a
    success criterion).
  - >-
    Deduplicate on file_id yourself. ZeroBounce documents duplicate delivery as expected
    behaviour and charges for it.
  - >-
    Do not trust the callback body as authenticated. There is no signature, so treat it
    strictly as a hint to go pull the result with your own API key.

gaps:
  - No AsyncAPI, no event catalog, no channel documentation.
  - No webhook signing or verification mechanism of any kind.
  - No retry, backoff or dead-letter policy published.
  - No webhook management endpoints — URLs are per-request only, so there is nothing to
    list, rotate or disable after the fact.
  - Greylist callback payload undocumented.