Getting Started

Send your first webhook in under 5 minutes. HookSniff handles delivery, retries, and monitoring so you can focus on building.

Quick Start

1. Get your API key

Sign up at hooksniff.vercel.app and grab your API key from the dashboard settings.

2. Create an endpoint

Register the URL where you want webhooks delivered:

curl -X POST https://hooksniff-api-1046140057667.europe-west1.run.app/v1/endpoints \
  -H "Authorization: Bearer hr_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://myapp.com/webhook"}'

3. Send a webhook

curl -X POST https://hooksniff-api-1046140057667.europe-west1.run.app/v1/webhooks \
  -H "Authorization: Bearer hr_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "endpoint_id": "ep_abc123",
    "event": "order.created",
    "data": {"order_id": "12345", "total": 99.99}
  }'

4. Verify the signature

Every webhook includes an HMAC-SHA256 signature in the X-HookSniff-Signature header:

import hmac, hashlib

def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = hmac.HMAC(
        secret.encode(), payload, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(f"sha256={expected}", signature)

Authentication

All API requests require authentication via a Bearer token in the Authorization header:

Authorization: Bearer hr_live_abc123xyz789

⚠️ Keep your API key secret. Never expose it in client-side code, public repos, or browser requests. Use environment variables.

Code Examples

Node.js

const response = await fetch('https://hooksniff-api-1046140057667.europe-west1.run.app/v1/webhooks', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.HOOKRELAY_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    endpoint_id: 'ep_abc123',
    event: 'user.created',
    data: { email: 'user@example.com' },
  }),
});

const result = await response.json();
console.log('Delivery ID:', result.id);

Python

import requests
import os

response = requests.post(
    'https://hooksniff-api-1046140057667.europe-west1.run.app/v1/webhooks',
    headers={
        'Authorization': f'Bearer {os.environ["HOOKRELAY_KEY"]}',
        'Content-Type': 'application/json',
    },
    json={
        'endpoint_id': 'ep_abc123',
        'event': 'payment.completed',
        'data': {'amount': 49.99, 'currency': 'USD'},
    },
)

print('Delivery ID:', response.json()['id'])

Go

body := `{"endpoint_id":"ep_abc123","event":"order.shipped","data":{"tracking":"1Z999"}}`
req, _ := http.NewRequest("POST", "https://hooksniff-api-1046140057667.europe-west1.run.app/v1/webhooks", strings.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("HOOKRELAY_KEY"))
req.Header.Set("Content-Type", "application/json")

resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()

Rate Limits

PlanRequests/minWebhooks/month
Free1001,000
Pro1,00050,000
Business10,000500,000
HookSniff — Webhook Delivery Service