Incident subscriptions deliver a JSON payload to your target_url when an incident is created, marked investigating, or resolved. They use the same delivery headers as webhook integration subscriptions.
Deliveries use a 10-second timeout (same as other integration subscriptions).
Event types
event_type | When it fires |
|---|---|
incident.created | A new incident is opened from correlated forward failures |
incident.investigating | Incident status changes to investigating |
incident.resolved | Incident status changes to resolved |
Create one subscription per event type you care about (or three if you want all lifecycle events).
Create subscription
POST /v1/incident-subscriptions
curl -s -X POST \
"https://api.hookdeploy.dev/v1/incident-subscriptions" \
-H "Authorization: Bearer hd_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"target_url": "https://hooks.example.com/hookdeploy-incidents",
"platform": "custom",
"event_type": "incident.created"
}'
Body fields:
| Field | Required | Description |
|---|---|---|
target_url | yes | HTTPS URL that receives POSTed event payloads |
platform | yes | zapier, make, power_automate, n8n, or custom |
event_type | yes | One of the event types above |
Subscriptions are scoped to the API key. Creating again for the same key + platform + event type upserts the target_url.
Response (not wrapped in a data envelope):
{
"id": "55555555-5555-5555-5555-555555555555",
"organization_id": "66666666-6666-6666-6666-666666666666",
"platform": "custom",
"event_type": "incident.created",
"target_url": "https://hooks.example.com/hookdeploy-incidents",
"active": true,
"created_at": "2026-05-24T12:00:00Z"
}
List subscriptions
GET /v1/incident-subscriptions
Returns active subscriptions for the calling API key.
curl -s "https://api.hookdeploy.dev/v1/incident-subscriptions" \
-H "Authorization: Bearer hd_live_YOUR_KEY"
Delete subscription
DELETE /v1/incident-subscriptions/:id
Returns HTTP 204 with no body.
curl -s -X DELETE \
"https://api.hookdeploy.dev/v1/incident-subscriptions/SUBSCRIPTION_ID" \
-H "Authorization: Bearer hd_live_YOUR_KEY"
Delivery payload
Each delivery is a JSON object:
| Field | Description |
|---|---|
incident_id | UUID of the incident |
status | Current status (open, investigating, or resolved) |
scope | Correlation scope (destination or provider/ASN) |
destination_name | Destination display name, or null |
asn_org | ASN organization name for provider-scoped incidents, or null |
likely_cause | Short human-readable summary |
failure_count | Failures attached to the incident |
endpoint_count | Distinct endpoints involved |
organization_id | Your organization UUID |
event_type | The subscription event that fired |
occurred_at | ISO 8601 timestamp for the lifecycle moment (created_at, investigating_at, or resolved_at) |
Example:
{
"incident_id": "11111111-1111-1111-1111-111111111111",
"status": "open",
"scope": "destination",
"destination_name": "Production Server",
"asn_org": null,
"likely_cause": "Forwards to Production Server are failing",
"failure_count": 3,
"endpoint_count": 1,
"organization_id": "66666666-6666-6666-6666-666666666666",
"event_type": "incident.created",
"occurred_at": "2026-05-24T12:00:00.000Z"
}
Delivery headers
Every delivery includes:
content-type: application/json
x-hookdeploy-event: incident.created
x-hookdeploy-subscription-id: {subscription-id}
x-hookdeploy-delivery-timestamp: {ISO-8601}
| Header | Description |
|---|---|
x-hookdeploy-event | The event type for this delivery |
x-hookdeploy-subscription-id | UUID of the incident subscription |
x-hookdeploy-delivery-timestamp | When HookDeploy sent the delivery |
These match the headers used for webhook integration subscription deliveries (/v1/subscriptions).
Sample and recent helpers
For editor testing (Zapier polling samples, etc.):
| Method | Route | Notes |
|---|---|---|
| GET | /v1/incidents/sample?event_type=... | One envelope (real or synthetic) in the standard data success wrapper |
| GET | /v1/incidents/recent?event_type=...&limit=3 | Raw JSON array of envelopes (same shape as live deliveries) |
event_type must be one of incident.created, incident.investigating, incident.resolved.
Error responses
| HTTP | Code | Cause |
|---|---|---|
| 400 | bad_request | Missing or invalid event_type, target_url, or platform |
| 401 | unauthorized | Invalid API key |
| 404 | not_found | Route not found |
Next steps
- Incidents API — List, update, and replay incidents
- Incidents concept — How incidents are correlated
- Zapier integration / n8n integration — Managed REST Hook clients