Webhooks as a service, built for SaaS products.
Stop maintaining the retry loop, the signing code, and the customer-facing log UI. Pushrail handles outbound webhooks end to end (signing, retries, replay, DLQ, observability) so you can ship the feature your customers actually asked for.
What ships in the box
Every primitive teams rebuild from scratch the first time, and the second time.
HMAC signing
Per-destination secrets, timestamped signatures, replay-attack protection, verified with one header.
Retries with backoff
Exponential backoff with jitter. Transient failures retry automatically. Permanent failures don't.
Replay
Re-run a single failure, a time window, or every event that hit a destination, without re-emitting from your service.
Dead-letter queue
Anything that exhausts retries lands in a DLQ you and your customers can inspect, fix, and replay.
Customer-visible log UI
Embed the delivery log inside your dashboard. Your customers see what failed without filing a ticket.
Idempotency keys
Producers can send the same event twice safely, duplicates are surfaced, not stored twice.
One ingest. Reliable delivery.
Send an event once. Pushrail signs, retries, and logs every delivery attempt.
POST /v1/events accepts the canonical event shape, eventType, occurredAt, payload, customerExternalId. Pushrail acks in under 100ms and routes the rest off the hot path.
Your customers register their webhook URL through your dashboard (or through the embedded portal). Pushrail signs every request with their secret, retries on transient failure, and keeps a per-attempt audit trail.
Failed deliveries don't disappear: they sit in a per-destination queue you (and your customer) can replay.
Replay anything
Pick a destination, a time window, or a single failed delivery. Pushrail re-sends with the exact payload your customer would have seen.
Your customers will ask for more than HTTP
Webhooks are step one. Pushrail also delivers to warehouses, queues, object storage, databases, and analytics, same ingest, same routing, same reliability primitives.
The first webhook customer asks for a JSON POST. The fifteenth asks for an S3 dump. The fiftieth asks for a BigQuery stream. Build the platform once.
Browse destinations →