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
| Plan | Requests/min | Webhooks/month |
|---|---|---|
| Free | 100 | 1,000 |
| Pro | 1,000 | 50,000 |
| Business | 10,000 | 500,000 |