HookDeploy

HookDeploy offers four plans. Every account starts on Free. Upgrade when your team or volume grows.

Plan comparison

FreeStarterTeamEnterprise
Price (monthly)$0$9$19Custom
Price (yearly)$0$90$190Custom
Members12UnlimitedUnlimited
Endpoints52550Unlimited
Requests/month50025,000500,000Unlimited
Max payload256 KB1 MB25 MB100 MB
Retention7 days30 days90 days365 days
Header injection
Storage/month1 GB5 GB50 GBUnlimited

Yearly billing saves $18/year on Starter and $38/year on Team compared to monthly.

What counts toward limits

Requests per month

Each incoming webhook to https://hookdeploy.dev/h/{slug} counts as one request. Counted per organization, across all endpoints, per calendar month (UTC).

Does count:

  • POST, GET, PUT, PATCH, DELETE, etc. to your HookDeploy URL
  • Requests to paused endpoints (they’re rejected with 423 but still counted — actually wait, let me check project.md… When paused, requests return 423 - do they count? The worker says “If endpoint paused → 423 JSON” - likely before storage. I’ll say paused endpoint requests are NOT stored and likely not counted since they’re rejected early. Let me check worker behavior…

From project.md worker behavior: 4. If endpoint paused → 423 JSON

This happens before rate limit check and storage in step order… Actually order is:

  1. Extract slug
  2. Look up endpoint
  3. If not found → 404
  4. If paused → 423
  5. Check rate limit
  6. Check plan payload …

So paused requests return 423 before counting usage. Good - I’ll note that paused endpoints reject before counting.

Does not count:

  • API calls to api.hookdeploy.dev (separate API rate limits apply)
  • Replay actions (manual or via API)
  • Requests rejected with 413 (payload too large — rejected before storage)
  • Requests to paused endpoints (423 — rejected before storage)

Endpoints

Each active endpoint counts toward the limit, including paused endpoints. Deleted endpoints free up a slot immediately.

Members

Each organization member counts, including the owner. Pending invitations do not count until accepted.

Payload size

Checked at ingestion. Bodies exceeding max_payload_bytes are rejected with 413. Nothing is stored.

Retention

Not a usage limit — captured requests are automatically deleted after the retention period. No manual action needed.

Storage

Monthly storage counts request body size only — headers, query parameters, and metadata do not count toward the cap.

Storage resets on the first of each month (UTC), alongside your request quota.

PlanStorage/month
Free1 GB
Starter5 GB
Team50 GB
EnterpriseUnlimited

When your organization reaches its storage cap:

  • The webhook is still accepted (senders receive 200)
  • Request metadata appears in the dashboard (method, headers, timing, etc.)
  • The body is not stored in R2
  • The body tab shows an upgrade prompt instead of the payload

Upgrade your plan anytime from the Billing page to restore body storage for new requests.

Header injection

Inject custom headers (for example Authorization or X-Tenant-ID) into every auto-forwarded webhook. Available on Starter, Team, and Enterprise — not included on Free.

Configure injected headers in an endpoint’s Settings tab under Inject headers on forward. See Forwarding — Header injection.

Checking your usage

DashboardBilling page shows current usage vs limits with progress bars.

API:

curl -s "https://api.hookdeploy.dev/v1/usage" \
  -H "Authorization: Bearer hd_live_YOUR_KEY"
{
  "data": {
    "requests_this_month": 42,
    "endpoint_count": 3,
    "member_count": 1,
    "limits": {
      "max_endpoints": "5",
      "max_users": "1",
      "max_requests_per_month": "500",
      "max_payload_bytes": "262144",
      "retention_days": "7"
    }
  }
}

Limit values of -1 mean unlimited.

Upgrading

Requires billing.change_plan permission (super admin, admin, or finance).

  1. Go to Billing in your organization
  2. Select a plan (Starter, Team, or Enterprise)
  3. Choose monthly or yearly billing
  4. Complete checkout via Stripe

On first paid upgrade, HookDeploy creates a Stripe Customer linked to your organization. One customer per org.

After checkout, your plan updates immediately. New limits apply to the current billing period.

Downgrading

  1. Go to Billing
  2. Click Manage subscription (opens Stripe Customer Portal)
  3. Change plan or cancel in Stripe

Downgrades take effect at the end of the current billing period. You keep current limits until then.

If you’re over the new plan’s limits at downgrade time (e.g. 10 endpoints on a plan that allows 5), you’ll need to delete excess endpoints before the downgrade applies.

Enterprise

Enterprise uses custom pricing. Contact us via support to discuss your needs. It includes:

  • Unlimited team members and endpoints
  • Unlimited requests per month
  • 100 MB payloads
  • 365-day retention
  • Dedicated support

What happens at limits

Limit hitBehavior
Max requests/monthIncoming webhooks return 429. Dashboard notification. No overage charges.
Max endpointsCannot create new endpoints (dashboard error or API 429 plan_limit)
Max membersCannot send new invitations
Max payloadIncoming webhooks return 413. Body not stored.
Storage/monthRequest captured; body not stored. Upgrade prompt in body tab.

No surprise charges. Self-serve plans never auto-upgrade you.

Next steps