Chord Streaming API

Server-sent events and the public WebSocket.

GitHub OpenAPI

Operations 2

GET /stream/market Server-sent events: prices #
GET /ws/live WebSocket: live candles, trades and board feeds #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/getchord-xyz:getchord-xyz-streaming-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

getchord-xyz-streaming-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Chord Streaming API
  version: '2026-10-05'
  summary: Trade, data and agent endpoints for eight EVM chains (Ethereum 1, Arbitrum One 42161, Base 8453, BNB Chain 56, Avalanche 43114, Monad 143, Arc 5042, Robinhood Chain 4663) and Solana (data and swaps).
  description: 'Chord is a non-custodial trading app and on-chain data index. The API has three kinds of endpoint:


    - **Trade**: `/quote` finds the best route across every venue on the chain; `/swap` turns it into a transaction you sign yourself. Chord never holds funds or keys.

    - **Read**: every swap on the chain, rolled up by token, venue and hour, from Chord''s own index — tokens, launches, holders, top wallets, portfolio PnL, liquidity positions and pools. No key needed. Avalanche, Base, BNB Chain, Arbitrum One and Ethereum have the same rollups under `/chains/{chain}/*`; Solana has its own data family under `/chains/solana/*` (base58 addresses, case-sensitive) and its swaps under `/sol/trade/*`.

    - **Agent**: the analyst (`/ask`) and the streams.


    Amounts are decimal strings in the token''s smallest unit. Timestamps are Unix seconds unless the field is `updatedAt` (milliseconds). `GET /portfolio/{wallet}` and `/portfolio/{wallet}/activity` differ on both: amounts there are in whole tokens and every time is in milliseconds. Reads answer anonymous callers at 60 requests a minute per IP; an `X-API-Key` header raises that to your plan. Every non-2xx body is `{ error, message }`.'
  contact:
    name: Chord
    url: https://getchord.xyz/developer
  x-logo:
    url: https://getchord.xyz/chord/pwa-192x192.png?v=20261019
servers:
- url: https://api.getchord.xyz/v1
  description: Production
tags:
- name: Streaming
  description: Server-sent events and the public WebSocket.
paths:
  /stream/market:
    get:
      tags:
      - Streaming
      operationId: streamMarket
      summary: 'Server-sent events: prices'
      description: 'One `text/event-stream` feed, no key, EventSource-friendly with automatic reconnect. Events: `rh-ticker` (fresh prices for chain 4663, about every 10 s, only addresses whose price moved), `ticker` / `whales` / `defi` (Monad), `ping` every 5 s. Capacity 500 clients (`503` beyond). Arc and Robinhood Chain boards stream faster over the WebSocket `prices` channel — see Concepts → Streaming.'
      responses:
        '200':
          description: '`text/event-stream`'
          content:
            text/event-stream:
              schema:
                type: string
              example: 'event: rh-ticker

                data: {"items":[{"address":"0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec","priceUsd":220.97,"change24h":-0.71}]}


                event: ping

                data: 1789891855

                '
        '503':
          description: At capacity.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /ws/live:
    get:
      tags:
      - Streaming
      operationId: wsLive
      summary: 'WebSocket: live candles, trades and board feeds'
      description: 'Upgrade to a WebSocket. No key needed, rate-limit exempt, up to 8 channels per connection. With an API key (`X-API-Key`, or `?apiKey=` from a browser) the connection joins a separate pool: up to 64 channels per connection and 20 connections per key (`429` beyond). Subscribe with `{op:"sub", channel:"candles", token, tf}`, `{op:"sub", channel:"trades", token}` or `{op:"sub", channel:"prices", chain}` (chain `5042`, `4663` or `143`); the server pushes `candle`, `trades` and `prices` frames (every print within ~400 ms; on 5042 / 4663 each item also carries the token''s live 24h volume and trade counts), `new` frames for tokens trading for the first time (5042 / 4663), `ping` every 25 s, and `error` with a code (`bad_op` · `bad_token` · `bad_tf` · `bad_chain` · `channel_cap`). Full protocol under Concepts → Streaming.'
      responses:
        '101':
          description: Switching protocols.
        '429':
          description: This API key already holds its maximum of live connections.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: '`WS_LIVE_DISABLED` or at capacity.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: Stable machine code, e.g. `INVALID_PARAMS`, `NOT_READY`, `RATE_LIMIT_EXCEEDED`.
        message:
          type: string
          description: For humans.
        statusCode:
          type: integer
          description: HTTP status, when included.
      description: Every non-2xx body.
      required:
      - error
      example:
        error: INVALID_PARAMS
        message: amount must be an integer string in the token's smallest unit
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: Optional on every read. A key from getchord.xyz/developer raises the rate limit to your plan and meters usage per key. Required for `?only=` on quotes and for the Ask agent API.
    Session:
      type: http
      scheme: bearer
      description: A Google sign-in session minted by the app (`nts_…`). Only the browser surfaces use it; agents use `ApiKey`.