API-first · Fully managed

Webhooks that never get lost.

GetHook is a webhook reliability gateway. Accept inbound webhooks, persist them durably, route to destinations, retry failures automatically — with full observability and replay capability.

No credit card required
Up and running in minutes
99.9% uptime SLA
Stripe
GitHub
Shopify
Twilio
GetHook
persist · route · retry
Your API
Slack
Database
Microservice
receivedqueueddeliveredretrying
5
Retry attempts
per event
AES-256
Encryption
for secrets
HMAC
Signatures
Stripe-compatible
<50ms
Ingest latency
p99
100%
Postgres-backed
no Redis needed
The problem

Raw webhooks are unreliable by design.

The HTTP webhook protocol has no persistence, no retries, and no observability. Every integration you build is one outage away from data loss.

Silent failures

Webhooks fail without any notification. Your backend misses critical events — payments, user signups, order updates — and you find out days later.

No retries

A single network blip or deployment restart permanently drops the event. There's no built-in retry mechanism in the HTTP webhook protocol.

Zero visibility

You can't see which events succeeded, which failed, or what the destination responded. Debugging is guesswork with provider logs.

No replay

Once an event is missed, it's gone. Without persistence, you can't replay events after a bug fix or infrastructure change.

How it works

Three steps to reliable webhooks.

From raw HTTP POST to guaranteed delivery — GetHook handles the entire lifecycle so your team doesn't have to.

01

Receive

Inbound or outbound events

Create a Source and get a unique endpoint URL. Point your webhook provider at it — Stripe, GitHub, Shopify, or anything HTTP. GetHook accepts the request, acknowledges it immediately (200 OK), and persists the payload durably to Postgres.

# Your ingest endpoint
POST /ingest/src_7f3a9b2c4d1e6f8a
Host: hooks.yourapp.com
200 Accepted in 12ms
Event persisted to queue
02

Route

Pattern-based delivery rules

Define Routes that match events by type pattern (e.g. `payment.*`, `order.completed`, or `*` for all). Routes connect a source to one or more destinations. Multiple destinations can receive the same event simultaneously.

# Route configuration
payment.*billing-serviceactive
order.completedfulfillment-apiactive
*audit-logactive
03

Deliver & Retry

Automatic exponential backoff

The worker picks up queued events and delivers them to destinations over HTTPS with HMAC signatures. If delivery fails, events are automatically retried up to 5 times with exponential backoff: 0s → 30s → 2m → 10m → 1h. Dead-lettered events can be replayed anytime.

Retry schedule — exponential backoff
5xx
attempt 1
5xx
after 30s
5xx
after 2m
5xx
after 10m
200 OK
after 1h
Delivered on attempt 5 after 1h 12m 30s
Features

Everything you need. Nothing you don't.

GetHook ships the full webhook infrastructure stack — from ingest to delivery to observability — without the enterprise bloat.

Inbound & Outbound

Accept webhooks from third-party providers (inbound) and send webhooks to your customers (outbound) — both in one platform. Unlike Svix which focuses only on outbound.

Automatic Retries

5-attempt exponential backoff: 0s → 30s → 2m → 10m → 1h. Events are never silently dropped. Dead-lettered events are preserved and replayable.

Smart Routing

Pattern-based routing rules (e.g. `payment.*`) forward events to specific destinations. One event can fan out to multiple services simultaneously.

Event Replay

Replay any event at any time — even months later. When you fix a bug or add a new integration, replay missed events with one API call.

HMAC Signatures

Every delivery is signed with HMAC-SHA256 in Stripe-compatible format (`t=<unix>,v1=<hex>`). Destinations can verify authenticity. Inbound webhooks are verified too.

AES-256 Encryption

Signing secrets and auth credentials are encrypted at rest with AES-256-GCM. API keys are SHA-256 hashed — never stored in plaintext.

Full Observability

Every delivery attempt is logged with status code, response body, and duration. Filter events by status, source, type, or time range. No more guessing.

White-labeling

Custom domains, brand settings (logo, colors, company name), and embedded portal support. Build webhook infrastructure under your own brand.

Multiple Auth Modes

Sources support bearer token, HMAC signature verification, and custom header auth. Destinations support bearer, basic auth, API key headers, and OAuth2.

Postgres-backed Queue

No Redis or Kafka required. GetHook uses a durable Postgres-backed queue with safe concurrent delivery — rock-solid reliability with zero extra infrastructure.

API-first

Every feature is available via REST API. Automate source creation, rotate API keys, and trigger replays from your CI/CD pipeline or Terraform.

Official SDKs

Native SDKs for Node.js, Python, Go, PHP, Java, and Ruby — auto-generated from the OpenAPI spec and published to each language's package registry.

Built-in Provider Support

Accepts webhooks from any provider.

Pre-configured signature verification for Stripe, Shopify, GitHub, Twilio, and 10+ more. Pick a provider and GetHook auto-wires the correct HMAC header — no docs-diving required.

Stripe
Shopify
GitHub
Twilio
Slack
Linear
Paddle
HubSpot
SendGrid
WooCommerce
Stripe
Shopify
GitHub
Twilio
Slack
Linear
Paddle
HubSpot
SendGrid
WooCommerce
Slack
Linear
Paddle
HubSpot
SendGrid
WooCommerce
Stripe
Shopify
GitHub
Twilio
Slack
Linear
Paddle
HubSpot
SendGrid
WooCommerce
Stripe
Shopify
GitHub
Twilio
Inbound events
payment.succeededStripe
orders/createShopify
pushGitHub
message.deliveredTwilio
subscription.createdPaddle
…and 1,240 more in the last hour
GetHook
Event Queue
live
12
Queued
8
Delivering
1.2k
Delivered
3
Retrying
Signature verification
Stripe-Signature
X-Shopify-Hmac-Sha256
X-Hub-Signature-256
5 retries
exponential backoff · zero data loss
Get started in 3 steps
01
Pick a provider

Select Stripe, Shopify, GitHub, or any of 10+ presets. Signature verification is pre-configured.

02
Add your secret

Paste the signing secret from your provider dashboard. GetHook encrypts it with AES-256-GCM.

03
Point & forget

Copy your ingest URL, paste it in your provider's webhook settings. Events queue automatically.

+4 more providers
Built-in Destinations

Deliver to your entire stack.

Pre-configured delivery targets for 12+ services. Pick Slack, Discord, PagerDuty, HubSpot, or any automation tool — auth and headers are pre-wired.

Slack
Discord
Teams
PagerDuty
Datadog
HubSpot
Linear
Notion
Airtable
Zapier
n8n
Make
Slack
Discord
Teams
PagerDuty
Datadog
HubSpot
Linear
Notion
Airtable
Zapier
n8n
Make
Linear
Notion
Airtable
Zapier
n8n
Make
Slack
Discord
Teams
PagerDuty
Datadog
HubSpot
Linear
Notion
Airtable
Zapier
n8n
Make
Slack
Discord
Teams
PagerDuty
Datadog
HubSpot
Live delivery log
Slackdelivered38ms
Discorddelivered42ms
PagerDutydelivered71ms
Datadogretrying
HubSpotqueued
Notiondelivered55ms
Avg delivery latency: 47ms
GetHook
Fan-out Delivery
live
Auth modes supported
Bearer tokenSlack, HubSpot, Linear
API key headerDatadog (DD-API-KEY)
URL-basedZapier, n8n, Discord
forwarding events...
12+
preset targets
5
retry attempts
Browse by category
Communication
SlackDiscordTeams
Observability
PagerDutyDatadog
CRM
HubSpot
Developer
Linear
Productivity
NotionAirtable
Automation
Zapiern8nMake
All destinations support HMAC signing, custom headers, and configurable timeouts.
Full observability

See every event,
every attempt.

GetHook records every delivery attempt with full context: destination URL, response status, response body, duration, and retry history. Filter by status, event type, or time range. When something goes wrong, you know exactly why.

  • HTTP status code and response body logged
  • Attempt number and timestamp for each retry
  • Filter by delivered, retrying, dead-lettered, replayed
  • Full payload preserved — inspect exactly what was sent
Event Log — live feed
evt_8f2apayment.succeededdelivered1xjust now
evt_7b1corder.createdretrying2x30s ago
evt_6a9duser.signupdelivered1x2m ago
evt_5c8einvoice.faileddead_letter5x1h ago
evt_4d7fsubscription.updateddelivered3x2h ago
Showing 5 of 1,247 eventsView all →
Delivery engine

Zero data loss,
even during outages.

Events are persisted to Postgres before the ingest endpoint even returns 200. If your destination is down for hours, no problem — events queue up and are delivered when it recovers. Dead-lettered events are preserved forever and replayable with a single API call.

  • Persisted to Postgres before acknowledgment
  • Concurrent delivery with no duplicate sends
  • Configurable timeout per destination
  • Replay any event via POST /events/{id}/replay
# Replay a dead-lettered event
POST /v1/events/evt_8f2a9b1c/replay
Authorization: Bearer hk_…
Response:
{
"id": "evt_new_9c3d4e",
"status": "queued",
"original_event_id": "evt_8f2a9b1c"
}
White-labeling

Webhook infrastructure
under your brand.

Build customer-facing webhook infrastructure with GetHook. Custom domains, brand settings (logo, primary color, company name), and an embeddable portal — all configurable via API. Your customers never need to know GetHook exists.

  • Custom domain with TLS verification
  • Brand settings: logo, color, company name, support email
  • Custom documentation title for the embedded portal
  • Multi-tenant — each account is fully isolated
webhooks.acmecorp.comTLS active
Acme Corp
Webhook Portal
Company nameAcme Corp
Primary color#3b82f6
Support emaildev@acmecorp.com
Custom domainwebhooks.acmecorp.com
Official SDKs

Integrate in minutes,
in your language.

Auto-generated from the OpenAPI spec and published to each language's package registry. Always in sync with the API.

Node.jsPythonGoPHPJavaRuby
Node.jsnpm install @gethook/node
import { GetHook } from "@gethook/node"

const client = new GetHook({ apiKey: "hk_..." })

// Send an outbound webhook
await client.events.publish({
  eventType: "payment.succeeded",
  payload: { amount: 4200, currency: "usd" },
})
Pythonpip install gethook
from gethook import GetHook

client = GetHook(api_key="hk_...")

# Send an outbound webhook
client.events.publish(
    event_type="payment.succeeded",
    payload={"amount": 4200, "currency": "usd"},
)
Gogo get github.com/gethook/gethook-go
import "github.com/gethook/gethook-go"

client := gethook.New("hk_...")

// Send an outbound webhook
client.Events.Publish(ctx, &gethook.PublishRequest{
    EventType: "payment.succeeded",
    Payload:   map[string]any{"amount": 4200},
})

PHP, Java, and Ruby SDKs available too. View all SDKs in the docs →

Comparison

Simpler than Hookdeck.
More complete than Svix.

GetHook handles both inbound and outbound webhooks — unlike Svix (outbound only) and Hookdeck (inbound only) — at a fraction of the cost.

GetHook
Hookdeck
Svix
Inbound webhooks (receive)
Outbound webhooks (send)
Automatic retries
Event replay
HMAC signatures
Pattern-based routing
White-labeling
Official multi-language SDKs
Limited
White-label portal
No Redis required
Free tier available
Limited
Limited
Pricing

Simple, predictable pricing.

No per-seat pricing. No surprise bills. Start free, upgrade when you need more.

Free
$0/forever

Perfect for side projects and testing.

  • 10,000 events/month
  • 3 sources
  • 3 destinations
  • 1-day event history
  • 5 retry attempts
  • Community support
Get started
Most popular
Pro
$29/per month

For production workloads that need reliability.

  • 500,000 events/month
  • Unlimited sources & destinations
  • 30-day event history
  • Custom domains
  • White-labeling
  • Email support
Start free trial
Enterprise
Custom/per month

For teams with high-volume or compliance requirements.

  • Unlimited events
  • Dedicated infrastructure
  • 99.99% uptime SLA
  • Custom data retention
  • SSO & audit logs
  • Priority support
Contact us
FAQ

Common questions.

What's the difference between inbound and outbound webhooks?

Inbound webhooks receive events FROM third-party providers (Stripe sending payment.succeeded to you). Outbound webhooks send events TO your customers (you notifying a customer's endpoint when something happens). GetHook handles both.

Do I need Redis or Kafka?

No. GetHook uses a durable Postgres-backed queue with safe concurrent delivery. This is sufficient for millions of events per day and eliminates the operational complexity of running Redis or Kafka.

How does the retry logic work?

Failed deliveries are retried up to 5 times with exponential backoff: immediately, after 30 seconds, 2 minutes, 10 minutes, and 1 hour. After 5 failures, events are moved to dead-letter status where they can be inspected and replayed manually.

Can I verify incoming webhook signatures?

Yes. Sources support HMAC signature verification for popular providers. You can configure a shared secret per source and GetHook will verify the provider's signature before persisting the event.

Is it safe for production?

GetHook uses AES-256-GCM encryption for all secrets at rest, SHA-256 hashed API keys (never stored plaintext), HMAC-SHA256 for delivery signatures, and per-tenant data isolation. It's designed for production from day one.

What happens if my destination goes down?

Nothing is lost. Events are persisted to Postgres before the ingest endpoint even returns 200. If your destination is unreachable for hours, GetHook queues the events and delivers them as soon as it recovers — following the full exponential backoff schedule.

Stop losing webhook events.

Deploy GetHook in under 5 minutes. Your first 10,000 events are free — no credit card, no expiry.