Skip to main content
The WebSocket gateway lets your engine push signals with lower latency than HTTP webhooks. It uses the same JSON schema as inbound webhooks and the developer API.

Endpoint

The gateway is a Socket.IO v4 server, not a plain WebSocket. Connect a Socket.IO client to:
That is host mcp.echozero.app, Socket.IO path /socket.io/ (the default) and namespace /ws/signals. A raw WebSocket client pointed at wss://mcp.echozero.app/ws/signals will not connect.

Authentication

Pass your developer API key in the Socket.IO handshake:
  • Header: x-api-key: ez_live_..., or
  • Auth payload: { "apiKey": "ez_live_..." }
Connection-level HMAC is not used on WebSocket. REST API-key requests require request signing; protect credentials in transit (TLS only). On success the server emits authenticated ({ "ok": true }). Invalid or missing keys receive an error event ({ "message": "Invalid or expired API key" }) and are disconnected.

Send a signal

Emit event signal. Every payload needs developerAgentId (one of your agents) plus a structured signal envelope:
The legacy minimal shape { "developerAgentId", "action": "buy" | "sell", "tokenAddress", "amount" } is also accepted.
Natural-language text signals (for example "BUY SOL $100") are not parsed on the WebSocket gateway and are rejected with Missing required fields. Send text signals to the HTTP inbound webhook instead.

Responses

Responses are not correlated to requests (there is no request id or ack callback). Use idempotencyKey on every signal and match on the returned signalId.

Rate limits

Connection inherits your API key rate limit tier (60/300/1000 req/min on REST; burst behavior on WebSocket is enforced server-side). Use idempotencyKey on every message.

Reconnect pattern

  1. Reconnect with the same API key
  2. Re-send unacknowledged signals with the same idempotencyKey
  3. Do not assume ordering across reconnects

vs HTTP webhook

SDK

The SDK ships a signal client in all four languages (version 0.2.0 and later). It handles the Socket.IO handshake, authentication and pings. The TypeScript and Python clients also reconnect automatically.
Without the SDK, any Socket.IO v4 client works: