Inferal Relay is a data relay platform for bidirectional integration with external systems: APIs, webhooks, databases, and event streams. Relay Webhooks is the self-service entry point: instant webhook endpoints that receive, store, and stream events on your behalf, running on a reliable edge network.
Every hostname under *.wh.relay.inferal.com is a dedicated endpoint. POST to claim one, get a read key back, and start consuming events. No signup, no API keys, no configuration.
Webhook senders expect a fast response. If your backend is slow, down, or deploying, you risk missed events, retries, or broken integrations. Relay Webhooks sits between the sender and your application: it accepts webhooks instantly at the edge and stores them until you are ready to process them. Collect first, process later.
/events with a cursor, as many times as you needHow it works: The first POST to any unclaimed hostname auto-provisions the endpoint. The response includes an X-Read-Key header (your secret key for reading events) and an X-Domain-Key header (for claiming sub-hostnames). Save both: they are only returned once. Use the read key to poll events over HTTP or stream them over WebSocket.
You can optionally prefix the hostname with a response class letter to control what the webhook sender sees (200 empty, 202 accepted, JSON, echo, etc.). Without a prefix, the default class a is used (200 empty). The class prefix is only relevant for ingestion: for reading events, my-app.wh.relay.inferal.com and a.my-app.wh.relay.inferal.com are the same endpoint.
Send a HEAD request to check if a hostname is available: 404 means unclaimed, 200 means taken. HEAD requests are never recorded and do not claim the endpoint.
If a hostname is already claimed and you send a non-HEAD request, it is still accepted and stored, but no X-Read-Key is returned. To claim additional hostnames under the same endpoint name, include the X-Domain-Key header from your first claim.
1. Check that your hostname is available (HEAD returns 404 if unclaimed):
# 404 = available, 200 = already taken curl -sI https://a.my-app.wh.relay.inferal.com/ HTTP/2 404
2. Claim it with your first request. The response includes your read key and domain key:
# First request returns X-Read-Key and X-Domain-Key headers curl -si -X POST https://a.my-app.wh.relay.inferal.com/ \ -H "Content-Type: application/json" \ -d '{"hello":"world"}' # Response includes: X-Read-Key: <your-read-key> X-Domain-Key: <your-domain-key>
3. Read events with your key:
# Poll events curl -H "Authorization: Bearer <your-read-key>" \ https://my-app.wh.relay.inferal.com/events # Or stream via WebSocket wscat -H "Authorization: Bearer <your-read-key>" \ -c "wss://my-app.wh.relay.inferal.com/stream"
Need multiple endpoints under the same name? Use the domain key from your first claim to create sub-hostnames:
# Claim a sub-hostname using your domain key curl -si -X POST https://a.staging.my-app.wh.relay.inferal.com/ \ -H "X-Domain-Key: <your-domain-key>" # Response includes a new read key for this sub-hostname: X-Read-Key: <staging-read-key>
Each sub-hostname stores events independently and gets its own read key. The domain key is shared across all hostnames under one endpoint name. Without the domain key, attempts to claim under an already-owned endpoint return 409 Conflict.
An optional first label controls what HTTP response the webhook sender sees. Without it, class a (200 empty) is used:
| Class | Name | Status | Body | Use case |
|---|---|---|---|---|
a | Acknowledge | 200 | (empty) | Silent acceptance (default) |
b | Basic | 200 | "ok" | Plain text confirmation |
c | aCcepted | 202 | (empty) | Async-style acceptance |
d | Discard | 204 | (no content) | Fire-and-forget senders |
e | Echo | 200 | (echoes body) | Mirror payload back |
j | JSON | 200 | {"ok":true} | JSON confirmation |
/events and /stream for up to 24 hours.| Operation | Method | Path | Auth |
|---|---|---|---|
| Check availability | HEAD | / | None |
| Ingest webhook | Any (except HEAD) | / | None |
| Poll events | GET | /events | Authorization: Bearer |
| Stream events | WebSocket | /stream | Authorization: Bearer |
Free tier. Available free of charge without an account. 24-hour event retention, no archive access.
For longer retention, archive access, custom domains, API key management, and SLAs:
Sign up at platform.inferal.com