generated: '2026-08-26'
method: searched
source: https://docs.evedex.com/developers/developers/public_exchange_data.md, https://docs.evedex.com/developers/developers/personalized_user_data.md, https://docs.evedex.com/developers/developers/market_data.md
docs: https://docs.evedex.com/developers/developers/public_exchange_data
spec_type: none
asyncapi_published: false
surface_type: websocket-channels
note: >-
EVEDEX publishes NO AsyncAPI document — searched the docs, the llms.txt index of every published
page, /asyncapi.yaml and /asyncapi.json on every API host, and the github.com/evedex-official
org. What it does publish is a genuinely complete prose event catalog: fourteen named Centrifugo
channels with TypeScript payload interfaces for each. This artifact captures that catalog as
found. It is NOT an AsyncAPI document and none has been authored on EVEDEX's behalf.
IMPORTANT: this is a WebSocket/Centrifugo subscription surface, not HTTP webhooks — EVEDEX
publishes no HTTP callback registration anywhere. The `Webhooks` pointer in apis.yml marks the
presence of a real, documented, subscribable event surface; read this file for what it actually is.
transport:
protocol: WebSocket
broker: Centrifugo (https://centrifugal.dev/)
features:
- message channels
- JWT-based channel access rights
- epochs and state recovery after connection loss
client: '@evedex/exchange-bot-sdk (pass a WebSocket implementation as centrifugeWebSocket)'
gateway_note: The SDK's `wsGateway` accessor is marked deprecated and not recommended for use.
environments:
prefix_variable: '{env}'
values:
production: futures-perp
beta: futures-perp-beta
demo: futures-perp-demo
development: futures-perp-dev
consistency_pattern:
name: initial snapshot with real-time updates
order: subscribe to the WS channel first, then GET the initial state over REST, then merge on the latest updatedAt
source: https://docs.evedex.com/developers/developers/toolkit.md
channels:
- channel: '{env}:heartbeat'
scope: public
payload: 'HeartbeatEvent { t: number }'
purpose: Liveness of the Async API. More than 30 seconds without an event means the connection is lost.
- channel: '{env}:info'
scope: public
payload: 'MatcherUpdateEvent { state: MatcherState, updatedAt: string }'
states: [active, request-status-fail, me-dead, db-admin-dead]
purpose: Global matcher state. Any value other than active is a venue-wide trading halt.
- channel: '{env}:instruments'
scope: public
payload: 'InstrumentUpdateEvent { id, name, displayName, lastPrice, high, low, volume, volumeBase, closePrice, markPrice, openInterest, minPrice, maxPrice, fatFingerPriceProtection, slippageLimit, trading, visibility, updatedAt }'
purpose: Snapshots of instrument state, including tradability (all/restricted/none/onlyClose) and visibility.
- channel: coin price feed
scope: public
purpose: Index/mark coin price updates. Listed in the Public Exchange Data catalog.
- channel: funding rate updates
scope: public
purpose: Funding rate changes per instrument.
- channel: order book depth
scope: public
purpose: Order book depth updates.
- channel: order book best
scope: public
purpose: Best bid/ask updates.
- channel: last trades
scope: public
purpose: Recent trade prints.
- channel: 'market-data:last-candlestick-{instrument}-{timeframe}'
scope: public
payload: 'Candle [timestamp_ms, open, close, high, low, volumeUsd, volume]'
purpose: Low-latency updates of the currently forming candlestick. Same tuple shape as the REST history response.
timeframes: ['1s','1m','3m','5m','15m','30m','1h','4h','6h','12h','1d','1w','1mo']
source: https://docs.evedex.com/developers/developers/market_data.md
- channel: 'user-{userExchangeId}'
scope: private
purpose: Account state updates.
- channel: 'position-{userExchangeId}'
scope: private
purpose: Position updates.
- channel: 'order-{userExchangeId}'
scope: private
purpose: Order updates. The only way to observe that an order actually executed after a NEW acknowledgement.
- channel: 'orderFills-{userExchangeId}'
scope: private
purpose: Individual order fill events.
- channel: 'order-fee-{userExchangeId}'
scope: private
purpose: Commission updates. Fee processing is asynchronous, so the REST `fee` field lags this channel.
- channel: 'tpsl-{userExchangeId}'
scope: private
purpose: Take-profit / stop-loss order updates.
- channel: 'funding-{userExchangeId}'
scope: private
purpose: Funding payment updates for the user.
- channel: 'transfer-update-{userExchangeId}'
scope: private
purpose: Deposit and withdrawal transfer state updates.
channel_count: 17
private_channel_auth: JWT-based channel access rights (Centrifugo), keyed on userExchangeId
gap: >-
Payload interfaces are published for heartbeat, matcher state, instruments and the candlestick
tuple. The remaining public market channels are named in the Public Exchange Data list without a
payload schema, and none of the seventeen channels has a machine-readable schema of any kind. An
AsyncAPI 3.x document over this catalog would be a small amount of work for EVEDEX and would make
the entire event surface machine-consumable; it is the single highest-leverage artifact missing here.
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/evedex-centrifugo-events"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.