Coinperps API Documentation

Tickers, funding rates, open interest and volume from 14 perpetual DEXs, in one REST API.

v1 · updated Get an API key

Quickstart

  1. Create an account and subscribe to the API plan.
  2. Generate your API key on the API page of your account.
  3. Send it in the X-API-Key header with every request.
curl "https://api.coinperps.com/api/v1/metrics/totals" \
  -H "X-API-Key: YOUR_API_KEY"

Base URL and Authentication

Every endpoint sits under https://api.coinperps.com/api/v1 and takes a GET request. Requests without a valid key return 401 UNAUTHORIZED. Keep your key on the server: anyone with it can use your quota.

Rate Limits

LimitRequests
Per minute600
Per day100,000

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix time). The API plan costs $39 a month, or $30 a month billed yearly (pricing).

Responses

Responses are JSON with a success flag. meta.cached and meta.cacheAge tell you whether the data came from cache. Prices and volumes are strings to keep full precision, so parse them before doing maths.

Success
{
  "success": true,
  "data": { ... },
  "meta": {
    "timestamp": 1704067200000,
    "cached": false,
    "cacheAge": null
  }
}
Error
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded"
  }
}

Endpoints

19 endpoints, all GET, relative to the base URL.

Exchanges

EndpointReturnsParameters
/exchanges Every supported exchange None
/exchanges/{exchangeId} One exchange’s details
exchangeId path, required
Exchange ID, e.g. hyperliquid

Tickers

EndpointReturnsParameters
/tickers Ticker data for every market on every exchange
exchange query
Filter by exchange, comma-separated
/tickers/{exchangeId} Every market on one exchange
exchangeId path, required
Exchange ID, e.g. hyperliquid
/ticker/{exchangeId}/{symbol} One market
exchangeId path, required
Exchange ID, e.g. hyperliquid
symbol path, required
Market symbol, e.g. BTC-PERP

Metrics

EndpointReturnsParameters
/metrics Aggregated metrics for every exchange None
/metrics/totals Totals across all exchanges None
/metrics/rankings Exchanges ranked by a metric
sortBy query, default volume24h
volume24h, volume30d, openInterest or fees24h
order query, default desc
asc or desc
/metrics/{exchangeId} Detailed metrics for one exchange
exchangeId path, required
Exchange ID, e.g. hyperliquid
/metrics/volume/history Daily trading volume
startDate query, default 30 days ago
YYYY-MM-DD
endDate query, default today
YYYY-MM-DD
exchangeId query, default all
One exchange only
limit query, default 365
Maximum days returned
/metrics/volume/cumulative Running total of trading volume None
/metrics/dex-cex-ratio DEX perpetual volume as a share of CEX volume, now None
/metrics/dex-cex-ratio/history The DEX to CEX volume ratio over time None

Logos and icons

EndpointReturnsParameters
/logos/exchanges Logo URLs for every exchange None
/logos/exchanges/{exchangeId} One exchange’s logo URL
exchangeId path, required
Exchange ID, e.g. hyperliquid
/logos/coins Logo URLs for every coin None
/logos/coins/{symbol} One coin’s logo URL
symbol path, required
Coin symbol, e.g. BTC
/tickers/icons Map of coin symbols to icon URLs None
/tickers/icons/{symbol} One coin’s icon URL
symbol path, required
Coin symbol

Ticker Fields

What /ticker/hyperliquid/BTC-PERP returns. The other ticker endpoints return arrays of the same object.

FieldTypeMeaning
exchangestringExchange ID
symbolstringMarket symbol
pricestringLast traded price
markPricestringMark price used for margin and liquidations
indexPricestringSpot index price
bid / askstringBest bid and best ask
volume24hstring24h volume in the base coin
volumeUsd24hstring24h volume in USD
priceChange24hstring24h price change
priceChangePercent24hstring24h price change in percent
openIntereststringOpen interest in the base coin
openInterestUsdstringOpen interest in USD
fundingRatestringCurrent funding rate as a decimal (0.0001 = 0.01%)
nextFundingTimenumberNext funding time, Unix milliseconds
timestampnumberWhen the data was read, Unix milliseconds
iconUrlstringCoin icon URL
Example response
{
  "success": true,
  "data": {
    "exchange": "hyperliquid",
    "symbol": "BTC-PERP",
    "price": "43250.50",
    "markPrice": "43250.50",
    "indexPrice": "43248.00",
    "bid": "43249.00",
    "ask": "43251.00",
    "volume24h": "15234.567",
    "volumeUsd24h": "658234567.89",
    "priceChange24h": "250.50",
    "priceChangePercent24h": "0.58",
    "openInterest": "5000.25",
    "openInterestUsd": "216256343.13",
    "fundingRate": "0.0001",
    "nextFundingTime": 1704070800000,
    "timestamp": 1704067200000,
    "iconUrl": "https://static.edgex.exchange/icons/coin/BTC.png"
  }
}

Supported Exchanges

ExchangeIDChain
Hyperliquid hyperliquid Hyperliquid L1
ApeX apex Multi-chain
Aster aster BNB Chain
Lighter lighter Ethereum L2
edgeX edgex Ethereum L2
GRVT grvt GRVT L2
Jupiter Perps jupiter Solana
Reya reya Reya Network
Drift drift Solana
SynFutures synfutures Base
dYdX dydx dYdX Chain (Cosmos)
Gains Network gains Arbitrum / Polygon
Paradex paradex Starknet
GMX gmx Arbitrum / Avalanche

See the same data live on Top decentralized perpetual exchanges.

Error Codes

CodeHTTPMeaning
UNAUTHORIZED401Missing or invalid API key
INVALID_API_KEY401API key format is invalid
API_KEY_EXPIRED401API key has expired
API_KEY_DISABLED401API key has been disabled
VALIDATION_ERROR400Invalid request parameters
EXCHANGE_NOT_FOUND404Exchange ID not recognised
SYMBOL_NOT_FOUND404Market not found
RATE_LIMIT_EXCEEDED429Per-minute limit reached
DAILY_LIMIT_EXCEEDED429Daily limit reached
INTERNAL_ERROR500Server error

On a 429, wait until X-RateLimit-Reset before retrying.

Code Examples

JavaScript

const res = await fetch('https://api.coinperps.com/api/v1/ticker/hyperliquid/BTC-PERP', {
  headers: { 'X-API-Key': process.env.COINPERPS_API_KEY },
})
const body = await res.json()
if (!body.success) throw new Error(body.error.message)
console.log(Number(body.data.fundingRate) * 100, '% funding')

Python

import os, requests

r = requests.get(
    "https://api.coinperps.com/api/v1/metrics/rankings",
    params={"sortBy": "openInterest"},
    headers={"X-API-Key": os.environ["COINPERPS_API_KEY"]},
)
body = r.json()
if not body["success"]:
    raise RuntimeError(body["error"]["message"])
print(body["data"])

Data Accuracy and Fair Use

Data comes from each exchange’s API and on-chain sources. It can be delayed, cached or wrong at the source, so do not use it to place or time trades. Nothing the API returns is financial advice.

You may use the data in your own apps and research within your plan’s limits and with credit to Coinperps. Reselling it as a competing feed is not allowed. The full rules are in our terms and conditions.

API FAQ

How much does the Coinperps API cost?
$39 a month, or $30 a month billed yearly. Every subscription includes 600 requests a minute and 100,000 a day on all endpoints. There is no free API tier, but everything on coinperps.com stays free to read.
Which exchanges does the API cover?
14 decentralized perpetual exchanges: Hyperliquid, ApeX, Aster, Lighter, edgeX, GRVT, Jupiter Perps, Reya, Drift, SynFutures, dYdX, Gains Network, Paradex and GMX. Centralized exchanges are not in the API yet.
Can I use Coinperps data in my own product?
Yes, within your plan’s limits and with credit to Coinperps. Reselling the data as a competing feed is not allowed. Email us if you need more.
Is the data suitable for trading?
Treat it as market research. Figures come from exchange APIs and on-chain sources, can be cached for a short time (meta.cached and meta.cacheAge show this) and can be wrong at the source. Check prices on the exchange before you trade.

Support

Questions, bugs or higher limits: [email protected]. Include your key prefix (never the full key), the endpoint and the response you got.