Events

List, inspect and manually replay webhook delivery events in HookSentry.

An event is a single webhook occurrence accepted by the ingest endpoint. It moves through Pending → Processing → Succeeded, or Failed → WaitingRetry → CriticalFailure after repeated delivery failures.

Get Events

GET /api/v1/events

Returns a page of events belonging to the authenticated tenant. See Pagination & Filtering for the shared query parameters — note the default sort field here is acceptedAt, not id.

Auth: Bearer token

Filters (optional)

ParameterTypeDescription
StatusstringPending, Processing, Succeeded, Failed, WaitingRetry, CriticalFailure, Cancelled
DestinationUrlIdUUIDFilter by destination URL
Fromdatetime (ISO 8601)Events accepted from this date/time
Todatetime (ISO 8601)Events accepted up to this date/time
var request = new HttpRequestMessage(HttpMethod.Get,
    "https://api.hooksentry.com/api/v1/events?Qt=10&Pg=1&CpOrd=acceptedAt&TpOrd=Desc&Status=CriticalFailure");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 200 OK — paginated list of events
  • 401 Unauthorized — missing or invalid token
{
  "total": 12,
  "items": [
    {
      "id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
      "tenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "destinationUrlId": "7d8e9f0a-1b2c-4d3e-8f5a-6b7c8d9e0f1a",
      "payload": "{\"event\":\"push\",\"repository\":\"acme/repo\"}",
      "status": "Succeeded",
      "idempotencyKey": null,
      "currentRetryCount": 0,
      "nextAttemptAt": null,
      "acceptedAt": "2026-07-03T14:32:00.000Z",
      "deliveredAt": "2026-07-03T14:32:01.500Z"
    }
  ]
}

Get Event by ID

GET /api/v1/events/{id}

Looks up an event by its unique tracking ID.

Auth: Bearer token

Path parameters

ParameterTypeDescription
idUUIDEvent UUID
var request = new HttpRequestMessage(HttpMethod.Get, $"https://api.hooksentry.com/api/v1/events/{eventId}");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 200 OK — event data
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — event belongs to another tenant
  • 404 Not Found — event not found
{
  "id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "tenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "destinationUrlId": "7d8e9f0a-1b2c-4d3e-8f5a-6b7c8d9e0f1a",
  "payload": "{\"event\":\"push\",\"repository\":\"acme/repo\"}",
  "status": "CriticalFailure",
  "idempotencyKey": null,
  "currentRetryCount": 10,
  "nextAttemptAt": null,
  "acceptedAt": "2026-07-03T12:00:00.000Z",
  "deliveredAt": null
}

Replay Event

POST /api/v1/events/{id}/replay

Manually reprocesses an event that exhausted all automatic retry attempts. Resets currentRetryCount to zero, sets nextAttemptAt to now(), and changes status to Pending.

Auth: Bearer token

Path parameters

ParameterTypeDescription
idUUIDUUID of the event to replay

Precondition:

The event must currently have CriticalFailure status — any other status returns 400 Bad Request.

var request = new HttpRequestMessage(HttpMethod.Post, $"https://api.hooksentry.com/api/v1/events/{eventId}/replay");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

using var client = new HttpClient();
var response = await client.SendAsync(request);

Return codes

  • 200 OK — event scheduled for replay
  • 400 Bad Request — event does not have CriticalFailure status
  • 401 Unauthorized — missing or invalid token
  • 403 Forbidden — event belongs to another tenant
  • 404 Not Found — event not found
{
  "id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "tenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "destinationUrlId": "7d8e9f0a-1b2c-4d3e-8f5a-6b7c8d9e0f1a",
  "payload": "{\"event\":\"push\",\"repository\":\"acme/repo\"}",
  "status": "Pending",
  "idempotencyKey": null,
  "currentRetryCount": 0,
  "nextAttemptAt": "2026-07-03T16:05:00.000Z",
  "acceptedAt": "2026-07-03T12:00:00.000Z",
  "deliveredAt": null
}