Cryptocurrency — entry 032 of 53

dYdX

Verified Jul 2026

dYdX is a decentralized perpetuals exchange that migrated from its StarkEx-based v3 to a Cosmos-chain v4 architecture, replacing the old exchange API with an open-source Indexer exposing markets, orderbooks, trades, and candles over REST and WebSocket. Anyone can run their own Indexer instance, but the public one at indexer.dydx.trade needs no signup for market-data reads — it's rate-limited rather than API-key gated.

dYdX v4's Indexer is a keyless, read-only REST and WebSocket service that mirrors on-chain state for the dYdX Cosmos appchain — markets, orderbooks, trades, and candles all live here, built by parsing the chain rather than sitting in the trading path itself.

perpetualsdexderivativescosmosmarket-data
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSON, WebSocketResponses can be requested as JSON or WebSocket.

GreatAPIs Score

Score94out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs14/20Documentation URL provided
Formats15/15Supports 2 response formats
Freshness20/20Verified within 6 months

Embed this badge

Scored 94 on greatapis.com
<a href="https://greatapis.com/api/dydx/"><img src="https://greatapis.com/badge/dydx.svg" alt="Scored 94 on greatapis.com"></a>

Auth quickstart

  1. No API key required — the public Indexer at `indexer.dydx.trade` is a keyless, read-only, eventually-consistent view. Every response carries live `ratelimit-limit`/`ratelimit-remaining`/`ratelimit-reset` headers (a live response showed `ratelimit-limit: 100` per short rolling per-IP window) rather than a fixed number published in the docs, so track those headers instead of assuming a hardcoded ceiling.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Get the current BTC-USD perpetual market

GEThttps://indexer.dydx.trade/v4/perpetualMarkets?ticker=BTC-USD

200 application/json; charset=utf-8

{
  "markets": {
    "BTC-USD": {
      "clobPairId": "0",
      "ticker": "BTC-USD",
      "status": "ACTIVE",
      "oraclePrice": "64446.05606",
      "priceChange24H": "326.81984",
      "volume24H": "4279317.6325",
      "trades24H": 2286,
      "nextFundingRate": "0.000001546875",
      "initialMarginFraction": "0.02",
      "maintenanceMarginFraction": "0.012",
      "openInterest": "305.8626",
      "atomicResolution": -10,
      "quantumConversionExponent": -9,
      "tickSize": "1",
      "stepSize": "0.0001",
      "stepBaseQuantums": 1000000,
      "subticksPerTick": 100000,
      "marketType": "CROSS",
      "openInterestLowerCap": "0",
      "openInterestUpperCap": "0",
      "baseOpenInterest": "782.0931",
      "defaultFundingRate1H": "0"
    }
  }
}

Developer reference

Base URLhttps://indexer.dydx.trade/v4
Rate limit

100 requests per short rolling per-IP window, per the live `ratelimit-limit`/`ratelimit-remaining`/`ratelimit-reset` response headers on indexer.dydx.trade — docs.dydx.xyz does not publish a fixed public number itself.

Gotchas & limits

  • The response nests a single market under `markets`, keyed by ticker (e.g. `markets["BTC-USD"]`) — even a `?ticker=`-filtered request still returns an object, not a flat record or an array.
  • v3 (the original StarkEx-based exchange API) is gone — v4's open-source Indexer is the only public dYdX market-data API today; v3 endpoint paths and client code won't work against it.
  • Almost every numeric-looking field (`oraclePrice`, `priceChange24H`, `volume24H`, the margin fractions, `openInterest`) is a JSON string; only a handful like `trades24H`, `atomicResolution`, and `stepBaseQuantums` come through as real numbers.
  • A live response carried a `geo-origin-status: restricted` header alongside `geo-origin-country`/`geo-origin-region` — the Indexer geo-tags requests and can restrict access by jurisdiction, so don't assume every caller gets identical responses regardless of origin.