EchoRelay — HTTP relay for webhooks, APIs & events
Log in<br>We carry the traffic. You ship.
The universal relay
Connect everything.<br>Ship faster.
We carry the traffic. You ship.
The layer between your callers and every service: gateway, webhook broker, and AI-agent tool in one.
Start free<br>Learn more about EchoRelay
No credit card required.
Made for you.
If HTTP traffic is your product, the relay is your middle layer.
You ship models
AI builders
Stream model responses through one endpoint, and let your agent configure it.
See how
You resell APIs
API resellers
Your endpoint up front, with keys, limits and validation in the middle.
See how
You ingest events
Webhook-heavy teams
One event in, every consumer out: retried, replayable, nothing lost.
See how
Explore use cases
One call. Every service.
A real request, end to end. You POST once, we fan it out.
curl -X POST https://your-project.echorelay.cloud/v1/your-endpoint \<br>-H "Authorization: Bearer er_live_YOUR_KEY" \<br>-H "Content-Type: application/json" \<br>-d '{"event":"order.placed","orderId":"ord_42"}'
# EchoRelay validates, queues, fans out, retries. You get:<br>HTTP/1.1 202 Accepted<br>"status": "queued",<br>"requestId": "…"
Read the docs
What you can build
EchoRelay is the target your callers hit and the source that calls your services.<br>Pick a shape →
Fan-out<br>One request, every target.
See how
Streaming<br>Responses stream back, chunk by chunk.
See how
Mirror<br>Send it live, keep a shadow copy.
See how
Origin shield<br>Hide your servers behind us.
See how
Explore relay shapes
One call in, fanned out.
You call once, we authenticate, validate, bill, and fan it out to every service.<br>The relay runs in reverse, too.
Caller<br>Your app sends one request.
EchoRelay<br>Authenticated, validated, billed, then fanned out.
Queue<br>Durable queue. At-least-once, always.
Delivery<br>Delivered with retries; nothing lost.
Your targets<br>Every service you connect.
See fan-out docs
Always PROTECTED
Everything that reaches you went through us first.
Your servers, invisible.<br>Clients connect to us, never to you. Your real infrastructure stays completely off the map.
Flood protection, built in.<br>We stand between you and the internet. Threats hit us first. And stop there.
Confidential by design.<br>We can't read your stored secrets. Your keys, encrypted. Bring your own, we see nothing, keep nothing.
Nothing slips through.<br>Payloads validated against your schema. Malformed or malicious data stops here.
See security spec
Built for AI.
Your agent configures EchoRelay. You ship.
One endpoint, the whole control plane.
A single MCP server (Model Context Protocol: how AI agents call tools) exposes your API versions, endpoints, targets, billing.
Drops into any agent.
Claude, ChatGPT, Cursor, OpenCode. Bearer token in, project on rails.
No forms. No clicks.
Describe the integration in plain English. Your agent writes the config.
POST https://mcp.echorelay.dev<br>"jsonrpc": "2.0", "id": 1,<br>"method": "tools/call",<br>"params": {<br>"name": "create_endpoint",<br>"arguments": {<br>"lineKey": "v1",<br>"endpoint": {<br>"name": "Webhook",<br>"url": "/notify",<br>"httpMethod": "POST",<br>"targets": [{<br>"name": "Slack",<br>"targetUrl": "https://hooks.slack.com/..."<br>}]
View MCP docs
Built for AI.
Your agent configures EchoRelay. You ship.
One endpoint, the whole control plane.
A single MCP server (Model Context Protocol: how AI agents call tools) exposes your API versions, endpoints, targets, billing.
Drops into any agent.
Claude, ChatGPT, Cursor, OpenCode. Bearer token in, project on rails.
No forms. No clicks.
Describe the integration in plain English. Your agent writes the config.
Your agent does this:
POST https://mcp.echorelay.dev<br>"jsonrpc": "2.0", "id": 1,<br>"method": "tools/call",<br>"params": {<br>"name": "create_endpoint",<br>"arguments": {<br>"lineKey": "v1",<br>"endpoint": {<br>"name": "Webhook",<br>"url": "/notify",<br>"httpMethod": "POST",<br>"targets": [{<br>"name": "Slack",<br>"targetUrl": "https://hooks.slack.com/..."<br>}]
View MCP docs
Always ON.
Our status page is public and probes production around the clock. Watch us run.
r.ok ? r.json() : Promise.reject(new Error('HTTP ' + r.status)))<br>.then(d => {<br>let up = 0, total = 0;<br>d.components.forEach(c => (c.history || []).forEach(b => { up += b.up_count; total += b.total_count; }));<br>if (total > 0) {<br>uptime = (Math.round((up / total) * 10000) / 100).toFixed(2);<br>days = ((d.components[0] || {}).history || []).length;<br>operational = d.overall === 'operational';<br>components = d.components.map(c => ({ name: c.name, status: c.status, uptime24h: c.uptime_24h }));<br>})<br>.catch(e => console.error('status API unavailable:', e))"
uptime, last days. Measured, not promised.
All systems operational
0">
% · 24 h
Full history
Take it with you.
The status page in your pocket: live health for every component, wherever you are.
View status page
Plans & Pricing
Best price. No surprises.
Just<br>€0<br>forever
Prices exclude VAT. Applicable taxes are calculated at checkout based on your...