API referenceWebhooks
Webhook delivery log
GET /v1/webhooks/{id}/deliveries
GET https://api.healthcare.dev/v1/webhooks/{id}/deliveriesPro plan and up (403 plan-upgrade-required below Pro); never counts as a billable call. The webhook's deliveries, newest first, kept 30 days: status (pending while retrying, held while the webhook is off, succeeded, failed after the last retry, skipped when the plan no longer includes it), and every attempt with its status code, latency and the first 1 KB of your endpoint's response. Page with cursor.
Requires an API key: Authorization: Bearer hdev_live_.... See Authentication.
Path parameters
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
id | string | yes | Webhook id | 5f0c2a8e-6b1d-4f7e-9a51-2c3d4e5f6a7b |
Query parameters
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
status | "pending" | "held" | "succeeded" | "failed" | "skipped" | no | Only deliveries in this status | pending |
limit | integer | no | Page size, 1 to 100 (default 25) | 25 |
cursor | string | no | Opaque cursor from links.next |
Examples
curl
curl "https://api.healthcare.dev/v1/webhooks/5f0c2a8e-6b1d-4f7e-9a51-2c3d4e5f6a7b/deliveries?limit=25" \
-H "Authorization: Bearer $HDEV_API_KEY"TypeScript
const res = await fetch("https://api.healthcare.dev/v1/webhooks/5f0c2a8e-6b1d-4f7e-9a51-2c3d4e5f6a7b/deliveries?limit=25", {
headers: { Authorization: `Bearer ${process.env.HDEV_API_KEY}` },
});
const { data, meta } = await res.json();Python
import os
import requests
res = requests.get("https://api.healthcare.dev/v1/webhooks/5f0c2a8e-6b1d-4f7e-9a51-2c3d4e5f6a7b/deliveries?limit=25", headers={"Authorization": f"Bearer {os.environ['HDEV_API_KEY']}"})
body = res.json()Try it
Response
Deliveries, newest first
{
"data": [
{
"id": "string",
"event_id": "string",
"event_type": "dataset.released",
"status": "pending",
"attempts": 1,
"next_attempt_at": "string",
"last_status_code": 1,
"last_error": "string",
"replay_of": "string",
"created_at": "string",
"completed_at": "string",
"attempt_log": [
{
"attempt": null,
"attempted_at": null,
"status_code": null,
"latency_ms": null,
"error": null,
"response_body": null
}
]
}
],
"meta": {
"source": "cms-icd10",
"data_version": "2026.1",
"retrieved_at": "2026-10-24T12:00:00Z",
"license": "Public domain (CMS). Reference data, not medical advice."
},
"links": {
"self": "/v1/webhooks/5f0c2a8e-6b1d-4f7e-9a51-2c3d4e5f6a7b/deliveries?limit=25",
"next": "/v1/webhooks/5f0c2a8e-6b1d-4f7e-9a51-2c3d4e5f6a7b/deliveries?limit=25&cursor=eyJrIjoiRTExLjkifQ"
}
}Fields
| Field | Type | Always present | Description |
|---|---|---|---|
id | string | yes | |
event_id | string | yes | |
event_type | WebhookEventType | yes | |
status | "pending" | "held" | "succeeded" | "failed" | "skipped" | yes | pending while retrying; held while the webhook is off (sent when it is turned back on); failed after the last retry; skipped when the plan no longer includes it |
attempts | integer | yes | |
next_attempt_at | string | null | yes | |
last_status_code | integer | null | yes | |
last_error | string | null | yes | |
replay_of | string | null | yes | The delivery this one replays |
created_at | string | yes | |
completed_at | string | null | yes | |
attempt_log | WebhookAttempt[] | yes |
Errors
Errors are application/problem+json (RFC 9457). Branch on type, not on title. See Errors.
| Status | type | When |
|---|---|---|
| 400 | invalid-request | A parameter or the body failed validation; errors lists each field. |
| 401 | unauthorized | Missing, malformed or revoked API key. |
| 403 | plan-upgrade-required | The plan doesn't include this feature; required_plan names the plan that does. |
| 404 | not-found | No record with that id (retired records are still returned). |
| 429 | rate-limited / quota-exceeded | Too many requests per second (retry after Retry-After), or the monthly quota is used up. |