Payload Examples
Use these examples to shape your receiver and verification logic.
Example Headers
POST /hooks/doqlo HTTP/1.1
Content-Type: application/json
User-Agent: Doqlo-Webhook/1.0
X-Doqlo-Event: bulkfill.export_job.completed
X-Doqlo-Event-Id: 2f6403c7-4e52-4c7b-b435-96542ccbf4bc
X-Doqlo-Timestamp: 1710590400
X-Doqlo-Signature: v1=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
Completed Event Example
{
"event": "bulkfill.export_job.completed",
"event_id": "2f6403c7-4e52-4c7b-b435-96542ccbf4bc",
"occurred_at": "2026-03-16T12:00:00.000Z",
"job_id": "<job_id>",
"status": "completed",
"idempotency_key": "7a59dc7a-8874-49e8-a42b-248312c1c82b",
"request_id": "support-create-001",
"reused_result": false,
"delivery_id": "<delivery_id>",
"download_url": "/v1/bulkfill/export-jobs/<job_id>/download",
"download_expires_at": "2026-03-16T18:00:00.000Z"
}
Failed Event Example
{
"event": "bulkfill.export_job.failed",
"event_id": "2f6403c7-4e52-4c7b-b435-96542ccbf4bc",
"occurred_at": "2026-03-16T12:00:00.000Z",
"job_id": "<job_id>",
"status": "failed",
"idempotency_key": "7a59dc7a-8874-49e8-a42b-248312c1c82b",
"request_id": "support-create-001",
"reused_result": false,
"error_code": "FAILED_ROW_THRESHOLD_EXCEEDED",
"error_message": "The export job exceeded max_failed_row_percent and was aborted.",
"error_details": {
"failure_class": "threshold_failed",
"input_row_count": 3,
"produced_row_count": 0,
"failed_row_count": 1,
"failed_row_percent": 33.3333,
"max_failed_row_percent": 0
}
}
This failed example has no download_url because a threshold-failed job does
not expose a ZIP artifact.
Failed Event Example: Processing Anomaly
{
"event": "bulkfill.export_job.failed",
"event_id": "2f6403c7-4e52-4c7b-b435-96542ccbf4bc",
"occurred_at": "2026-03-16T12:00:00.000Z",
"job_id": "<job_id>",
"status": "failed",
"idempotency_key": "7a59dc7a-8874-49e8-a42b-248312c1c82b",
"request_id": "support-create-001",
"reused_result": false,
"error_code": "PROCESSING_ANOMALY",
"error_message": "The export was stopped because an anomaly was detected during processing. Please retry. If this continues, contact support."
}
This failure also exposes no download_url. Unlike threshold failures, it
does not include error_details.
What To Store
At minimum, store:
event_ideventjob_idstatusidempotency_keyrequest_id- the raw request body you verified
That gives you enough data to deduplicate retries and correlate the event with the export job.