Endpoint shape
| URL | GET https://api.mobula.io/api/2/perp/pairs |
| Auth header | Authorization: <YOUR_API_KEY> (raw key, no Bearer) |
| Query | chain (optional) — filter to a single chain/venue |
| Response | { "data": [ ...pairs ] } |
Query parameter
| Parameter | Type | Required | Description |
|---|---|---|---|
chain | enum | No | Restrict the result to one chain/venue. Omit it to get every chain and DEX in one list. |
chain values
| Value | Meaning | DEX |
|---|---|---|
arbitrum | Gains markets on Arbitrum | gains |
base | Gains markets on Base | gains |
arbitrum-sepolia | Gains markets on Arbitrum Sepolia (test) | gains |
lighter | Lighter markets | lighter |
Quick start — curl
Response
data is the full list of tradable markets — there is no pagination.
Market model
| Field | Type | Description |
|---|---|---|
name | string | Human-readable base/quote label, e.g. "BTC/USD". |
baseToken | string | Base asset symbol, e.g. "BTC". |
quoteToken | string | Quote asset symbol, e.g. "USD". |
minLeverage | number | Minimum allowed leverage. |
maxLeverage | number | Maximum allowed leverage. Always > 0 (disabled markets are excluded). |
dex | enum | "gains" or "lighter". |
chain | enum | "arbitrum", "base", "arbitrum-sepolia", or "lighter". |
assetClass | enum | "crypto", "forex", "stocks", "indices", "commodities", "degen", or "new". |
dexMarketId | integer (≥ 0) | The DEX’s internal market id — Gains pairIndex / Lighter market_id. Use it when referencing the market in quote/execution calls. |
socialUrl | string | Reserved for a social/info URL. Currently empty. |
pairFullName | string | Full name of the market as reported by the DEX. |
percentageChange24h | number | 24h price change, in percent. |
price | number | Latest/mark price in USD (0 if no price is currently available). |
logo | string | null | Base-asset logo URL, or null when unknown. |
TypeScript
Common pitfalls
Bearerprefix in the Authorization header. Don’t add it — pass the raw API key.- Expecting disabled markets. They are filtered out. If a market isn’t in the response, it isn’t tradable.
- Using
dexMarketIdacross DEXes. It is only unique within a(dex, chain). Pair it withdex/chainwhen keying markets.
Related
Perp Quote
Quote a perp position once you’ve picked a market.
Execute Perp Action
Submit signed payloads via
/2/perp/execute-v2.DEX Status
Lighter / Gains uptime, probe results and maintenance windows.
Perps Data Model
Indexed event shapes for perps.
Need help?
Telegram
Fast support
Discord
Community
Slack
Enterprise
Contact us