Kickbox · AsyncAPI Specification
Kickbox Batch Webhooks
Version
View Spec
View on GitHub
Email VerificationEmail ValidationDeliverabilityData QualityEmailAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://docs.kickbox.com/docs/batch-verification-api
docs: https://docs.kickbox.com/docs/batch-verification-api#the-batch-verification-callback
spec_type: none
asyncapi_published: false
asyncapi_note: >-
Kickbox publishes no AsyncAPI document. It was searched for on the docs host, the API host and the
github.com/kickboxio organization (four repositories, all client SDKs) and none exists. This file
therefore captures the webhook catalog only — the one real event surface Kickbox ships — and wires
type: Webhooks rather than type: AsyncAPI. No AsyncAPI is fabricated.
summary: >-
One webhook: a completion callback for asynchronous batch verification jobs. It is opt-in per job
via a request header rather than configured in a dashboard, has no signing or verification
mechanism documented, and carries no event-type field because there is only one event.
webhooks:
- name: batch-verification-complete
trigger: An asynchronous batch verification job finishes.
subscription:
style: per-request header
header: X-Kickbox-Callback
set_on: PUT /v2/verify-batch
source_operation: openapi/kickbox-batch-api-openapi.yml#verifyBatch
note: >-
The callback URL is supplied when the job is created. There is no dashboard webhook
configuration, no endpoint registry and no way to list or replay past deliveries.
delivery:
method: POST
content_type: application/json
expected_response: 2xx
expected_response_note: The specified callback URL must return a 2xx HTTP response code.
retries: undocumented
signing: none
signing_note: >-
No signature header, shared secret or timestamp is documented, so a receiver cannot
cryptographically verify that a callback originated from Kickbox. Treat the callback as an
untrusted notification and re-read job state from GET /v2/verify-batch/{id} before acting.
payload_fields:
- {name: id, type: integer, description: The batch job id}
- {name: name, type: string, description: Job name (settable at submission via X-Kickbox-Filename)}
- {name: download_url, type: string, description: Signed URL to the results CSV}
- {name: stats, type: object, description: Counts of deliverable, undeliverable, risky, unknown; aggregate sendex; total addresses}
- {name: created_at, type: string, format: date-time}
- {name: status, type: string, enum: [completed, failed]}
- {name: error, type: 'string|null', description: Description of the error when status is failed}
- {name: duration, type: integer, description: Job duration}
payload_example: |
{
"id": 123,
"name": "Batch API Process - 05-12-2018-01-58-08",
"download_url": "https://url.to.your.csv",
"stats": {
"deliverable": 2,
"undeliverable": 1,
"risky": 0,
"unknown": 0,
"sendex": 0.35,
"addresses": 3
},
"created_at": "2018-05-12T18:58:08.000Z",
"status": "completed",
"error": null,
"duration": 42
}
consumer_caveats:
- >-
download_url is valid for one hour. After it expires a fresh signed URL must be obtained via
GET /v2/verify-batch/{id}, so a consumer must either download promptly or re-poll.
- >-
The callback is optional. A consumer that does not set X-Kickbox-Callback must poll GET
/v2/verify-batch/{id}, which returns starting, processing, completed or failed.
polling_alternative:
operation: openapi/kickbox-batch-api-openapi.yml#getBatchResults
statuses: [starting, processing, completed, failed]
progress_fields: [deliverable, undeliverable, risky, unknown, total, unprocessed]
non_api_notifications:
- name: spike-detection-alert
channel: email
status: beta
docs: https://docs.kickbox.com/docs/spike-detection-alerts
note: >-
Customer-configured threshold alerts on verification volume per API key. Delivered by email to
the account, not as a webhook, so it is not an integrable event surface. Recorded for
completeness only.