Instant Webhook Endpoints

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.

Why Use Relay Webhooks?

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.

How 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.

POST / webhook in
→
j ↑ response class
.
my-app ↑ endpoint name
.
wh.relay.inferal.com
→
/events events out

Quick Start

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"

Sub-Hostnames

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.

Response Classes

An optional first label controls what HTTP response the webhook sender sees. Without it, class a (200 empty) is used:

ClassNameStatusBodyUse case
aAcknowledge200(empty)Silent acceptance (default)
bBasic200"ok"Plain text confirmation
caCcepted202(empty)Async-style acceptance
dDiscard204(no content)Fire-and-forget senders
eEcho200(echoes body)Mirror payload back
jJSON200{"ok":true}JSON confirmation

Retention

API Endpoints

OperationMethodPathAuth
Check availabilityHEAD/None
Ingest webhookAny (except HEAD)/None
Poll eventsGET/eventsAuthorization: Bearer
Stream eventsWebSocket/streamAuthorization: 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