Events
Ingest, retrieve, and query webhook events.
Ingest Event
POST /e/:endpoint_idSend an event to a specific endpoint. Requires HMAC signature verification.
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer API key |
X-PJ-Signature | Yes | HMAC-SHA256 signature |
X-PJ-Timestamp | Yes | Unix timestamp used in signature |
X-PJ-Event-Type | No | Event type (auto-detected from body if omitted) |
X-PJ-Correlation-ID | No | Correlation ID for tracing |
Request Body
json
{
"event_type": "order.created",
"payload": {
"order_id": "ORD-001",
"amount": 99.99
}
}The body can be any JSON. event_type is extracted from the body or the X-PJ-Event-Type header.
Response
HTTP 202 Acceptedjson
{
"id": "evt_abc123...",
"status": "QUEUED",
"message": "Event received and queued for delivery"
}List Events
GET /api/v1/eventsQuery Parameters
| Param | Type | Default | Description |
|---|---|---|---|
limit | integer | 50 | Results per page (max 100) |
offset | integer | 0 | Offset for pagination |
endpoint_id | string | — | Filter by endpoint |
status | string | — | Filter by status |
event_type | string | — | Filter by event type |
Response
json
{
"events": [
{
"id": "evt_abc123...",
"endpoint_id": "ep_def456...",
"event_type": "order.created",
"status": "DELIVERED",
"created_at": "2026-05-26T12:00:00Z"
}
],
"total": 142,
"limit": 50,
"offset": 0
}Get Event
GET /api/v1/events/:idResponse
json
{
"id": "evt_abc123...",
"org_id": "org_...",
"endpoint_id": "ep_...",
"event_type": "order.created",
"status": "DELIVERED",
"payload": {
"order_id": "ORD-001",
"amount": 99.99
},
"attempts": [
{
"id": "dat_...",
"status_code": 200,
"response_body": "OK",
"duration_ms": 145,
"created_at": "2026-05-26T12:00:01Z"
}
],
"created_at": "2026-05-26T12:00:00Z"
}Replay Event
POST /api/v1/events/:id/replayRe-delivers a past event. The original event is marked REPLAYED and a new event is created.
Response
json
{
"id": "evt_new123...",
"status": "QUEUED",
"message": "Event replayed"
}