API v2 Reference webhook.sdnbros.app

The Webhook API v2 provides programmatic access to your webhook projects, events, and delivery data. All endpoints require authentication via an API key and return consistent JSON envelopes.

Download OpenAPI 3.0 Spec (JSON) — use with Swagger UI, Postman, or code generators.

Authentication

Pass your API key in the X-API-Key header. Generate keys from the Settings page.

Response Envelope

All responses follow a consistent format:

{ "data": { ... }, "meta": { "request_id": "abc-123", "timestamp": "2026-03-13T10:00:00Z" } }

Paginated endpoints include a pagination field:

{ "data": [ ... ], "meta": { ... }, "pagination": { "total": 142, "limit": 50, "offset": 0 } }

Errors use this format:

{ "error": { "code": "not_found", "message": "event not found" }, "meta": { ... } }

Rate Limits

API v2 is rate limited to 100 requests/second per API key, with burst up to 200. If exceeded, you'll receive a 429 Too Many Requests response.

Projects

GET /api/v2/projects List all projects

Returns all projects you own or are a team member of.

Headers
NameDescription
X-API-KeyrequiredYour API key
Example Request
curl -H "X-API-Key: YOUR_KEY" \ https://webhook.sdnbros.app/api/v2/projects
Response
{ "data": [ { "id": "proj_abc123", "name": "My Stripe Hooks", "provider_type": "stripe", "destination_url": "https://api.example.com/webhooks", "paused": false, "created_at": "2026-01-15T09:30:00Z" } ], "meta": { "request_id": "...", "timestamp": "..." } }
GET /api/v2/projects/{id} Get project details

Returns full details for a single project.

Path Parameters
NameDescription
idrequiredProject ID
Example Request
curl -H "X-API-Key: YOUR_KEY" \ https://webhook.sdnbros.app/api/v2/projects/PROJECT_ID
Response
{ "data": { "id": "proj_abc123", "name": "My Stripe Hooks", "provider_type": "stripe", "destination_url": "https://api.example.com/webhooks", "rate_limit_rpm": 600, "max_retry_attempts": 5, "delivery_timeout_ms": 30000, "retention_days": 30, "paused": false, "created_at": "2026-01-15T09:30:00Z" }, "meta": { "request_id": "...", "timestamp": "..." } }

Statistics

GET /api/v2/projects/{id}/stats Project statistics

Returns aggregated delivery statistics including success rate and latency percentiles (p50/p95/p99).

Path Parameters
NameDescription
idrequiredProject ID
Example Request
curl -H "X-API-Key: YOUR_KEY" \ https://webhook.sdnbros.app/api/v2/projects/PROJECT_ID/stats
Response
{ "data": { "total_events": 12847, "delivered": 12501, "failed": 142, "retrying": 3, "success_rate": 98.87, "avg_latency_ms": 234.5, "p50_latency_ms": 180.2, "p95_latency_ms": 520.8, "p99_latency_ms": 1250.3 }, "meta": { "request_id": "...", "timestamp": "..." } }

Events

GET /api/v2/projects/{id}/events List events with pagination

Returns paginated events for a project. Supports filtering by state, provider, event type, and date range.

Path Parameters
NameDescription
idrequiredProject ID
Query Parameters
NameTypeDescription
limitoptionalintegerResults per page (1-200, default 50)
offsetoptionalintegerNumber of results to skip (default 0)
stateoptionalstringFilter by state: received, delivering, delivered, retrying, exhausted
provideroptionalstringFilter by provider (e.g. stripe, github)
event_typeoptionalstringFilter by event type (partial match)
fromoptionalRFC3339Start date filter
tooptionalRFC3339End date filter
Example Request
curl -H "X-API-Key: YOUR_KEY" \ "https://webhook.sdnbros.app/api/v2/projects/PROJECT_ID/events?limit=10&state=exhausted"
Response
{ "data": [ { "id": "evt_xyz789", "project_id": "proj_abc123", "provider_type": "stripe", "provider_event_id": "evt_1234", "received_at": "2026-03-13T08:15:00Z", "method": "POST", "content_type": "application/json", "source_ip": "54.187.174.169", "state": "exhausted", "latest_error_summary": "HTTP 500", "classification": { "provider": "stripe", "event_type": "invoice.payment_failed" } } ], "meta": { "request_id": "...", "timestamp": "..." }, "pagination": { "total": 142, "limit": 10, "offset": 0 } }
GET /api/v2/projects/{id}/events/{eventId} Get event details

Returns full details for a single event including headers and delivery metadata.

Path Parameters
NameDescription
idrequiredProject ID
eventIdrequiredEvent ID
Example Request
curl -H "X-API-Key: YOUR_KEY" \ https://webhook.sdnbros.app/api/v2/projects/PROJECT_ID/events/EVENT_ID
Response
{ "data": { "id": "evt_xyz789", "project_id": "proj_abc123", "provider_type": "stripe", "provider_event_id": "evt_1234", "received_at": "2026-03-13T08:15:00Z", "method": "POST", "path": "/", "content_type": "application/json", "content_length": 1842, "source_ip": "54.187.174.169", "state": "delivered", "signature_verified": true, "latest_error_summary": null, "classification": { "provider": "stripe", "event_type": "invoice.payment_succeeded" } }, "meta": { "request_id": "...", "timestamp": "..." } }

Replay

POST /api/v2/projects/{id}/events/{eventId}/replay Replay an event

Re-delivers the event to the project's configured destination URL. Requires Pro or Business plan. Returns immediately with a delivery run ID; delivery happens asynchronously.

Path Parameters
NameDescription
idrequiredProject ID
eventIdrequiredEvent ID
Example Request
curl -X POST -H "X-API-Key: YOUR_KEY" \ https://webhook.sdnbros.app/api/v2/projects/PROJECT_ID/events/EVENT_ID/replay
Response (202 Accepted)
{ "data": { "delivery_run_id": "run_abc123", "status": "queued" }, "meta": { "request_id": "...", "timestamp": "..." } }
Need help? Contact us at anton@sdnbros.com or visit the documentation.