Skip to content

Webhooks

For payload format and signature verification, see the Webhooks guide. This page is the management API.

POST /v1/webhooks

{
"url": "https://your-app.com/webhooks/zillow",
"events": ["job.succeeded", "job.failed"],
"description": "production"
}

201 responsesecret is shown once.

{
"data": {
"id": "f3...", "url": "https://your-app.com/webhooks/zillow",
"events": ["job.succeeded", "job.failed"],
"active": true,
"created_at": "...",
"secret": "whsec_AbCdEf..."
},
"request_id": "..."
}

If events is omitted, you’ll receive all four: job.succeeded, job.failed, job.timed_out, job.aborted.

GET /v1/webhooks

{
"data": [
{ "id": "...", "url": "...", "events": [...], "active": true,
"description": "production", "created_at": "...", "revoked_at": null }
],
"request_id": "..."
}

Secrets are never returned on read — only at creation.

DELETE /v1/webhooks/{id}

Soft-revoke. Returns 204 No Content. We stop sending events immediately.

GET /v1/webhooks/{id}/deliveries

Per-attempt delivery log for debugging.

QueryTypeNotes
limitintdefault 50, max 200
{
"data": [
{
"id": 8412, "job_id": "8c2a...", "event": "job.succeeded",
"attempt": 1, "status_code": 200, "delivered": true,
"attempted_at": "...", "response_preview": "{\"ok\":true}"
},
{
"id": 8411, "job_id": "8c2a...", "event": "job.succeeded",
"attempt": 1, "status_code": 503, "delivered": false,
"attempted_at": "...", "response_preview": "Service Unavailable"
}
],
"request_id": "..."
}

If delivered: false, we retry up to 2 more times with quadratic backoff. After 3 failed attempts the event is dropped. Refire by querying /v1/jobs/{id} from your side.