Create endpoint
const url = 'https://api.hookbridge.io/v1/endpoints';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"url":"https://customer.app/webhooks"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.hookbridge.io/v1/endpoints \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "url": "https://customer.app/webhooks" }'Create a new webhook endpoint. The endpoint URL must be HTTPS and publicly accessible. A signing secret is automatically generated and returned only in this response.
Important: The signing_secret is only returned once. Store it securely
for verifying webhook signatures.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
HTTPS URL of the webhook endpoint. Must be publicly accessible. Internal/private IP addresses are blocked for security.
Optional description of the endpoint
Rate limit in requests per second (0 = no limit)
Maximum burst size for rate limiting
Custom headers to include in webhook requests
object
If true, creates an ephemeral endpoint for CI/test workflows. Ephemeral endpoints auto-expire after the TTL.
Time-to-live in minutes for ephemeral endpoints. Only used when ephemeral is true. After this duration, the endpoint is automatically deleted.
Examples
Basic endpoint
{ "url": "https://customer.app/webhooks"}Endpoint with rate limiting
{ "url": "https://customer.app/webhooks", "description": "Main production webhook", "rate_limit_rps": 10, "burst": 20, "headers": { "X-Custom-Header": "value" }}Responses
Section titled “Responses”Endpoint created successfully
object
object
Unique endpoint identifier
Webhook delivery URL
Optional description
Initial signing key identifier
The signing secret - shown only once! Store this securely for verifying webhook signatures.
Short identifier suffix for the initial signing key
Whether this is an ephemeral (CI/test) endpoint
When the ephemeral endpoint will auto-expire (only present for ephemeral endpoints)
When the endpoint was created
object
Unique identifier for this request (useful for support)
Example
{ "data": { "id": "ep_550e8400e29b41d4a716446655440000", "url": "https://customer.app/webhooks", "description": "Main production webhook", "signing_key_id": "sk_550e8400e29b41d4a716446655440001", "signing_secret": "whsec_abcdefghijklmnopqrstuvwxyz123456", "key_hint": "abcd", "created_at": "2025-12-06T12:00:00Z" }, "meta": { "request_id": "req_xyz123" }}Invalid request
object
object
Machine-readable error code
Human-readable error message
object
Unique identifier for this request (useful for support)
Examples
Endpoint not found
{ "error": { "code": "ENDPOINT_NOT_FOUND", "message": "endpoint not found" }, "meta": { "request_id": "req_xyz123" }}Invalid endpoint ID format
{ "error": { "code": "INVALID_REQUEST", "message": "endpoint_id must be in format ep_xxx" }, "meta": { "request_id": "req_xyz123" }}Invalid payload
{ "error": { "code": "INVALID_REQUEST", "message": "payload must be valid JSON" }, "meta": { "request_id": "req_xyz123" }}Invalid headers
{ "error": { "code": "INVALID_HEADERS", "message": "header 'Host' is forbidden and cannot be overridden" }, "meta": { "request_id": "req_xyz123" }}Unauthorized - Invalid or missing API key
object
object
Machine-readable error code
Human-readable error message
object
Unique identifier for this request (useful for support)
Example
{ "error": { "code": "UNAUTHORIZED", "message": "Invalid or missing API key" }, "meta": { "request_id": "req_xyz123" }}Enter your credentials to populate code examples throughout the docs.