Create webhook endpoint
Create a webhook endpoint to receive event notifications at the given URL. Returns the endpoint with its signing secret — store the secret securely, it is only shown once.
Related endpoints
GET /webhook-endpoints— List webhook endpointsGET /webhook-endpoints/{id}— Get webhook endpointPATCH /webhook-endpoints/{id}— Update webhook endpointDELETE /webhook-endpoints/{id}— Delete webhook endpointPOST /webhook-endpoints/{id}/rotate-secret— Rotate signing secret
Common errors
400 invalid_request— malformed payload or failed validation.401 unauthenticated— missing, malformed, or revoked API key.409 conflict— Idempotency-Key collision with a different body, or a concurrent state-transition conflict.
Idempotency
Pass an Idempotency-Key header (UUID v4 recommended) to make retries safe. Keys are valid for 24 hours; see the idempotency guide.
Your RevKeen API key (powered by Unkey). Get it from Dashboard > Settings > API Keys. Use rk_sandbox_* for test mode and rk_live_* for production.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://api.revkeen.com/v2/webhook-endpoints" \ -H "x-api-key: $REVKEEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com", "enabled_events": [ "string" ] }'{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://api.example.com/webhooks/revkeen",
"description": "Production webhook endpoint",
"enabled_events": [
"invoice.paid",
"payment.succeeded"
],
"status": "enabled",
"secret": "whsec_0123456789abcdef",
"circuit_breaker_state": "closed",
"total_deliveries": 12,
"successful_deliveries": 10,
"failed_deliveries": 2,
"last_delivery_at": "2026-04-02T10:00:00.000Z",
"created_at": "2026-04-02T10:00:00.000Z",
"updated_at": "2026-04-02T10:00:00.000Z"
}
}