Create a pull endpoint
const url = 'https://api.hookbridge.io/v1/pull-endpoints';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"name":"Shopify events","verify_hmac":true,"hmac_header_name":"X-Shopify-Hmac-Sha256","hmac_signature_encoding":"base64","hmac_secret":"your-shopify-app-secret"}'};
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/pull-endpoints \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "Shopify events", "verify_hmac": true, "hmac_header_name": "X-Shopify-Hmac-Sha256", "hmac_signature_encoding": "base64", "hmac_secret": "your-shopify-app-secret" }'Creates a new pull mode endpoint. Pull endpoints receive webhooks from external providers and store events for consumer-controlled retrieval via the API, instead of forwarding them.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Human-readable name
Description of this endpoint’s purpose
Per-endpoint retention override (default is plan default)
Where to extract the event type from incoming webhooks
JSON path for body extraction (e.g., “type”) or header name (e.g., “X-GitHub-Event”)
How the HMAC signature header value is encoded. Use base64 for providers that send a base64 signature (for example Shopify’s X-Shopify-Hmac-Sha256); hex for hex-encoded signatures. Base64 is standard RFC 4648 with padding. Only used when verify_hmac is true.
Examples
Shopify-style pull endpoint with base64 HMAC signature
{ "name": "Shopify events", "verify_hmac": true, "hmac_header_name": "X-Shopify-Hmac-Sha256", "hmac_signature_encoding": "base64", "hmac_secret": "your-shopify-app-secret"}Responses
Section titled “Responses”Pull endpoint created
object
object
URL to give to your webhook provider. Does not include the secret token suffix.
Whether the endpoint is active (not deleted).
Event counts (only on single-endpoint GET, not list)
object
How the HMAC signature header value is encoded (hex or base64). Only used when verify_hmac is true.
Secret token for the ingestion URL. Shown only once at creation time.
Full ingestion URL including the secret token suffix.
object
Unique identifier for this request (useful for support)
Example
{ "data": { "mode": "pull", "event_type_source": "body", "hmac_signature_encoding": "hex" }, "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.