Create inbound endpoint
POST /v1/inbound-endpoints
Create a new inbound webhook endpoint for receiving webhooks from external sources. The endpoint URL must be HTTPS and publicly accessible. A secret token and ingest URL are returned only in this response.
If signing_enabled=true, the initial delivery signing key is also created and its
signing_secret is returned only in this response.
Important: The secret_token, ingest_url, and signing_secret are only returned once. Store them securely.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”object
Friendly name for the inbound endpoint
Example
Stripe webhooksOptional description
Example
Receives Stripe payment eventsEndpoint mode. forward delivers webhooks to the URL via HTTP.
cli streams webhooks to a connected CLI tool (no HTTP delivery).
Example
forwardHTTPS URL of your endpoint that will receive forwarded webhooks.
Required when mode is forward. Optional when mode is cli.
Must be publicly accessible. Internal/private IP addresses are blocked.
Example
https://myapp.com/webhooks/stripeEnable static token verification on incoming webhooks
Header name containing the static token (if verify_static_token is true)
Example
X-Webhook-TokenQuery parameter name containing the static token (alternative to header)
Example
tokenThe static token value (will be hashed for storage)
Example
my-secret-tokenEnable HMAC signature verification on incoming webhooks
Header name containing the HMAC signature (if verify_hmac is true)
Example
X-SignatureHMAC secret key (will be encrypted for storage)
Example
whsec_abc123Header name containing the request timestamp for replay protection
Example
X-Webhook-TimestampMaximum age in seconds for timestamp validation
Example
300Enable IP allowlist verification on incoming webhooks
CIDR blocks allowed to send webhooks (if verify_ip_allowlist is true)
Example
[ "203.0.113.0/24", "198.51.100.0/24"]Ordered list of header names to derive idempotency keys from incoming requests
Example
[ "X-Idempotency-Key"]HTTP status code returned to senders on successful ingestion
Example
202Enable HMAC signing on forwarded deliveries (secret auto-generated)
If true, creates an ephemeral inbound 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.
Example
60Examples
Basic inbound endpoint
{ "url": "https://myapp.com/webhooks/stripe", "name": "Stripe webhooks"}Endpoint with HMAC verification
{ "url": "https://myapp.com/webhooks/stripe", "name": "Stripe webhooks", "verify_hmac": true, "hmac_header_name": "Stripe-Signature", "hmac_secret": "whsec_abc123"}Endpoint with IP allowlist
{ "url": "https://myapp.com/webhooks/partner", "name": "Partner webhooks", "verify_ip_allowlist": true, "allowed_cidrs": [ "203.0.113.0/24", "198.51.100.0/24" ]}CLI-mode endpoint (for local development)
{ "name": "Local dev webhooks", "mode": "cli"}Responses
Section titled “ Responses ”Inbound endpoint created successfully
object
object
Unique inbound endpoint identifier (UUIDv7)
Example
01935abc-def0-7123-4567-890abcdef012Endpoint name
Example
Stripe webhooksForwarding URL (empty for cli-mode endpoints)
Example
https://myapp.com/webhooks/stripeEndpoint mode
Example
forwardShown only once! The full URL that external senders should POST webhooks to.
Example
https://receive.hookbridge.io/v1/webhooks/receive/01935abc-def0-7123-4567-890abcdef012/a1b2c3d4e5f6Shown only once! 32-character hex token embedded in the ingest URL.
Example
a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4Initial signing key ID when delivery signing is enabled
Example
sk_550e8400e29b41d4a716446655440001Shown only once! Initial delivery signing secret when signing is enabled.
Example
whsec_newabcdefghijklmnopqrstuvwxyz12Last 4 chars of the signing key for identification
Example
wxyzWhether this is an ephemeral (CI/test) endpoint
When the ephemeral endpoint will auto-expire (only present for ephemeral endpoints)
Example
2026-06-01T12:30:00ZExample
2025-12-06T12:00:00Zobject
Unique identifier for this request (useful for support)
Example
req_xyz123Example
{ "data": { "id": "01935abc-def0-7123-4567-890abcdef012", "name": "Stripe webhooks", "url": "https://myapp.com/webhooks/stripe", "ingest_url": "https://receive.hookbridge.io/v1/webhooks/receive/01935abc-def0-7123-4567-890abcdef012/a1b2c3d4e5f6", "secret_token": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "signing_key_id": "sk_550e8400e29b41d4a716446655440001", "signing_secret": "whsec_newabcdefghijklmnopqrstuvwxyz12", "key_hint": "wxyz", "created_at": "2025-12-06T12:00:00Z" }, "meta": { "request_id": "req_xyz123" }}Invalid request
object
object
Machine-readable error code
Example
INVALID_REQUESTHuman-readable error message
Example
endpoint must be a valid HTTPS URLobject
Unique identifier for this request (useful for support)
Example
req_xyz123Examples
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
Example
INVALID_REQUESTHuman-readable error message
Example
endpoint must be a valid HTTPS URLobject
Unique identifier for this request (useful for support)
Example
req_xyz123Example
{ "error": { "code": "UNAUTHORIZED", "message": "Invalid or missing API key" }, "meta": { "request_id": "req_xyz123" }}Duplicate URL conflict
object
object
Machine-readable error code
Example
INVALID_REQUESTHuman-readable error message
Example
endpoint must be a valid HTTPS URLobject
Unique identifier for this request (useful for support)
Example
req_xyz123Example
{ "error": { "code": "DUPLICATE_URL", "message": "An inbound endpoint with this URL already exists in this project" }, "meta": { "request_id": "req_xyz123" }}Enter your credentials to populate code examples throughout the docs.