Event Types
Complete reference for all BlameTrail webhook event types, envelope format, and payload schemas.
All BlameTrail webhook deliveries follow a standard envelope format. Each event type includes specific data relevant to the event.
Envelope format
Every webhook delivery uses this top-level structure:
{
"id": "evt_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "incident.opened",
"version": "1",
"created_at": "2026-03-21T14:30:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": { }
}| Field | Type | Description |
|---|---|---|
id | string | Unique event ID (format: evt_uuid) |
type | string | The event type (see table below) |
version | string | Envelope schema version (currently "1") |
created_at | string | ISO 8601 timestamp of when the event was created |
tenant_id | string | The tenant (organization) that owns the resource |
data | object | Event-specific payload (varies by type) |
Event types reference
| Type | Description |
|---|---|
incident.opened | A new incident has been created |
incident.acknowledged | An incident has been acknowledged |
incident.resolved | An incident has been resolved |
deploy.ingested | A new deploy has been recorded |
fix_proposal.generated | A fix proposal has been generated and is ready for review |
fix_proposal.applied | A fix proposal has been approved and a PR is being created |
fix_proposal.rejected | A fix proposal has been rejected |
test.ping | Test event for endpoint verification |
incident.opened
Fired when a new incident is created, either automatically from monitor failures or manually.
{
"id": "evt_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "incident.opened",
"version": "1",
"created_at": "2026-03-21T14:30:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": {
"incident_id": "inc_1234567890",
"title": "payments-api health check failing",
"severity": "critical",
"type": "availability",
"status": "open",
"started_at": "2026-03-21T14:28:00.000Z",
"service": {
"id": "svc_abcdef",
"name": "Payments API"
},
"monitor": {
"id": "mon_123456",
"name": "Health Check",
"url": "https://api.example.com/health"
}
}
}Data fields
| Field | Type | Description |
|---|---|---|
incident_id | string | Unique incident identifier |
title | string | Incident title |
severity | string | critical, error, warning, or info |
type | string | availability or latency |
status | string | open |
started_at | string | ISO 8601 timestamp of the first failure |
service | object | { id, name } of the affected service |
monitor | object or null | { id, name, url } of the triggering monitor, or null for manually created incidents |
incident.acknowledged
Fired when a team member acknowledges an incident.
{
"id": "evt_b2c3d4e5-f6a7-8901-bcde-f12345678901",
"type": "incident.acknowledged",
"version": "1",
"created_at": "2026-03-21T14:35:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": {
"incident_id": "inc_1234567890",
"title": "payments-api health check failing",
"severity": "critical",
"type": "availability",
"status": "acknowledged",
"started_at": "2026-03-21T14:28:00.000Z",
"service": {
"id": "svc_abcdef",
"name": "Payments API"
},
"monitor": {
"id": "mon_123456",
"name": "Health Check",
"url": "https://api.example.com/health"
}
}
}Data fields
Same as incident.opened, with status set to "acknowledged".
incident.resolved
Fired when an incident is resolved, either automatically (3 consecutive passing checks) or manually.
{
"id": "evt_c3d4e5f6-a7b8-9012-cdef-123456789012",
"type": "incident.resolved",
"version": "1",
"created_at": "2026-03-21T15:00:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": {
"incident_id": "inc_1234567890",
"title": "payments-api health check failing",
"severity": "critical",
"type": "availability",
"status": "resolved",
"started_at": "2026-03-21T14:28:00.000Z",
"resolved_at": "2026-03-21T14:58:00.000Z",
"duration_seconds": 1800,
"service": {
"id": "svc_abcdef",
"name": "Payments API"
},
"monitor": {
"id": "mon_123456",
"name": "Health Check",
"url": "https://api.example.com/health"
}
}
}Data fields
All fields from incident.opened, plus:
| Field | Type | Description |
|---|---|---|
resolved_at | string | ISO 8601 timestamp of resolution |
duration_seconds | number | Total incident duration in seconds |
deploy.ingested
Fired when a new deploy is recorded via the deploy ingest endpoint.
{
"id": "evt_d4e5f6a7-b8c9-0123-defa-234567890123",
"type": "deploy.ingested",
"version": "1",
"created_at": "2026-03-21T16:00:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": {
"deploy_id": "dep_abcdef123456",
"commit_sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0",
"branch": "main",
"environment": "production",
"deployed_by": "jane"
}
}Data fields
| Field | Type | Description |
|---|---|---|
deploy_id | string | Unique deploy identifier |
commit_sha | string | The Git commit SHA |
branch | string or null | The deployed branch |
environment | string or null | Target environment |
deployed_by | string or null | Who triggered the deploy |
fix_proposal.generated
Fired when a fix proposal (revert or AI fix) has been generated and is ready for review.
{
"id": "evt_f6a7b8c9-d0e1-2345-abcd-456789012345",
"type": "fix_proposal.generated",
"version": "1",
"created_at": "2026-04-05T10:00:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": {
"proposal_id": "fp_abcdef123456",
"incident_id": "inc_1234567890",
"fix_type": "ai_fix",
"status": "ready",
"confidence_score": 78,
"risk_assessment": "medium",
"summary": "Fix null pointer in payment handler by adding null check"
}
}Data fields
| Field | Type | Description |
|---|---|---|
proposal_id | string | Unique fix proposal identifier |
incident_id | string | The incident this fix targets |
fix_type | string | revert or ai_fix |
status | string | ready for AI fixes, pr_created for reverts (which skip approval) |
confidence_score | number or null | AI confidence percentage (null for reverts) |
risk_assessment | string or null | low, medium, or high |
summary | string | Brief description of the proposed fix |
fix_proposal.applied
Fired when a fix proposal is approved and a PR creation job is enqueued.
{
"id": "evt_a7b8c9d0-e1f2-3456-bcde-567890123456",
"type": "fix_proposal.applied",
"version": "1",
"created_at": "2026-04-05T10:05:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": {
"proposal_id": "fp_abcdef123456",
"incident_id": "inc_1234567890",
"fix_type": "ai_fix"
}
}fix_proposal.rejected
Fired when a fix proposal is rejected by a team member.
{
"id": "evt_b8c9d0e1-f2a3-4567-cdef-678901234567",
"type": "fix_proposal.rejected",
"version": "1",
"created_at": "2026-04-05T10:05:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": {
"proposal_id": "fp_abcdef123456",
"incident_id": "inc_1234567890",
"fix_type": "ai_fix",
"reason": "Fix does not address the root cause"
}
}Data fields
| Field | Type | Description |
|---|---|---|
proposal_id | string | Unique fix proposal identifier |
incident_id | string | The incident this fix targeted |
fix_type | string | revert or ai_fix |
reason | string or null | Optional rejection reason provided by the reviewer |
test.ping
Sent when you click Send Test on a webhook endpoint. Use this to verify your endpoint is reachable and processing signatures correctly.
{
"id": "evt_e5f6a7b8-c9d0-1234-efab-345678901234",
"type": "test.ping",
"version": "1",
"created_at": "2026-03-21T16:30:00.000Z",
"tenant_id": "tn_abcdef1234567890",
"data": {
"message": "Webhook endpoint test",
"endpoint_id": "wh_abcdef123456"
}
}Data fields
| Field | Type | Description |
|---|---|---|
message | string | A human-readable test message |
endpoint_id | string | The webhook endpoint ID being tested |