HookDeploy

This page covers endpoint creation and the request inspector — the two things you’ll use on every webhook integration.

Creating an endpoint

In the dashboard, navigate to Endpoints and click New endpoint.

FieldRequiredNotes
NameYesInternal label, e.g. Stripe production
DescriptionNoHelpful when you have many endpoints
Forward URLNoHTTPS URL to auto-forward every webhook — leave blank for capture-only

On save, HookDeploy generates a unique slug and your public URL:

https://hookdeploy.dev/h/{slug}

Slugs are short, URL-safe strings (typically 6 characters). They’re permanent for the life of the endpoint — you can’t change a slug after creation, but you can delete the endpoint and create a new one.

Via the API

You can also create endpoints programmatically:

curl -s -X POST "https://api.hookdeploy.dev/v1/endpoints" \
  -H "Authorization: Bearer hd_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Stripe webhooks",
    "description": "Production Stripe events",
    "forward_url": "https://staging.example.com/webhooks/stripe"
  }'

Response (201 Created):

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "slug": "abc123",
    "name": "Stripe webhooks",
    "forward_url": "https://staging.example.com/webhooks/stripe",
    "paused": false,
    "created_at": "2025-05-23T12:00:00Z"
  }
}

Send webhooks to https://hookdeploy.dev/h/abc123.

Copying the URL

The endpoint detail page shows your webhook URL with a copy button. The format is always:

https://hookdeploy.dev/h/{slug}

Paste this into your webhook provider’s configuration. HookDeploy accepts all standard HTTP methods: GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD.

Sending test requests

curl

# JSON body
curl -X POST "https://hookdeploy.dev/h/abc123" \
  -H "Content-Type: application/json" \
  -H "X-Custom-Header: test-value" \
  -d '{"type":"checkout.session.completed"}'

# Form-encoded body
curl -X POST "https://hookdeploy.dev/h/abc123" \
  -d "event=invoice.paid&amount=9900"

# GET with query params
curl "https://hookdeploy.dev/h/abc123?source=test&version=1"

httpie

http POST https://hookdeploy.dev/h/abc123 \
  Content-Type:application/json \
  event=payment_intent.succeeded

Every request returns:

{"request_id":"<uuid>"}

Reading the inspector

Open an endpoint and click any request in the stream. The inspector has four panels:

Overview

Method badge, timestamp, source IP, body size, and content type. If auto-forwarding is enabled, you’ll also see forward status: HTTP status code, response time in milliseconds, and any error message.

Headers

Every header the sender included, displayed as name/value pairs. Header names are shown in lowercase for consistency. Cloudflare and proxy headers (cf-ray, x-forwarded-for, etc.) are preserved as received.

Query string

Parsed query parameters if the request included any. Empty for typical POST webhooks, useful for GET-based callbacks.

Body

The raw request body. JSON payloads are syntax-highlighted and pretty-printed. Binary or non-JSON bodies show as raw text. Bodies larger than your plan limit are rejected at ingestion with 413 — they never appear in the inspector.

Pausing an endpoint

Toggle Paused in endpoint settings. While paused:

  • Incoming requests receive 423 Locked with {"error":"endpoint paused"}
  • Existing captured requests remain accessible
  • Forwarding does not run

Useful when you’re done testing and don’t want stray webhooks filling your history.

Endpoint limits

Each plan caps the number of endpoints per organization:

PlanMax endpoints
Free5
Starter25
Team50
EnterpriseUnlimited

Creating an endpoint beyond your limit returns 429 with code plan_limit via the API, or an error in the dashboard.

Next steps

  • Requests — Retention, payload limits, and what gets stored
  • Replay — Re-send captured requests to localhost
  • Endpoints API — CRUD endpoints programmatically