Trade on Aster - 5% Fee Rebate

Aster DEX API Reference: Every Public Endpoint, Verified by Calling It

By Concept211 (@Concept211)Updated: September 8, 202612 min read
Table of Contents

Somebody pasted a raw Aster endpoint URL into Google and landed on this site, on a page about how we check our figures rather than on anything describing the API. That gap is what this page closes.

This is an independent reference for Aster's public market-data API. Every endpoint below was called from a plain HTTPS client on September 8, 2026, and the field lists are read off what actually came back. Nothing here is paraphrased from documentation. Where an endpoint behaves differently from the Binance API it is modeled on, that difference is written down rather than smoothed over, because that difference is the reason an independent reference is worth reading at all.

Aster runs a Binance-compatible public API across four hosts and needs no key for market data. The two things most likely to break a client built on Binance assumptions: funding is not uniformly eight-hourly (323 of 736 markets settle hourly), and an unknown path returns an HTML error page rather than JSON.

Base URLs and what each host serves

Four hosts, split by product and by transport. All of them answered on the date above.

HostServesPath prefix
https://fapi.asterdex.comPerpetual futures REST/fapi/v1/
https://sapi.asterdex.comSpot REST/api/v1/
wss://fstream.asterdex.comFutures WebSocket streams/ws/ and /stream
wss://sstream.asterdex.comSpot WebSocket streams/ws/ and /stream

GET /fapi/v1/exchangeInfo reports "futuresType": "U_MARGINED", and the symbols it lists are quoted in USDT, USD1 and U. There is one perpetual universe rather than a split across sub-exchanges, which is worth saying because several competing venues do split theirs.

None of the endpoints below required a key, a signature, a timestamp or an account. Two related endpoints do: GET /fapi/v1/historicalTrades and GET /fapi/v1/leverageBracket both returned HTTP 401 with {"code":-2014,"msg":"API-key format invalid."} when called without one. The second is worth flagging for anyone modelling risk: maximum leverage per market cannot be read from the public API.

Public futures endpoints

All verified 2026-09-08 against https://fapi.asterdex.com.

Connectivity: ping and time

GET /fapi/v1/ping takes no parameters and returns an empty object, {}. GET /fapi/v1/time returns a single field:

{"serverTime":1788860272506}

Milliseconds since epoch, UTC. exchangeInfo reports "timezone":"UTC", and every timestamp on every endpoint below is milliseconds.

Exchange metadata: exchangeInfo

GET /fapi/v1/exchangeInfo takes no parameters and is the heaviest response on the API at roughly 800 KB. Top-level keys: timezone, serverTime, futuresType, rateLimits, exchangeFilters, assets, symbols.

At the moment of the snapshot it carried 588 symbols and 34 margin assets. Symbol statuses broke down as 568 TRADING, 15 SETTLING and 5 PENDING_TRADING, so a client that assumes everything listed is tradeable will try to price twenty markets that are not.

Each symbol object carries the Binance fields you would expect, plus several Aster does not share with it. Reading ASTERUSDT:

{
  "symbol": "ASTERUSDT",
  "pair": "ASTERUSDT",
  "contractType": "PERPETUAL",
  "status": "TRADING",
  "baseAsset": "ASTER",
  "quoteAsset": "USDT",
  "pricePrecision": 5,
  "onboardDate": 1758178800000,
  "orderTypes": ["LIMIT","MARKET","STOP","STOP_MARKET","TAKE_PROFIT","TAKE_PROFIT_MARKET","TRAILING_STOP_MARKET"],
  "timeInForce": ["GTC","IOC","GTX","HIDDEN"],
  "filters": ["PRICE_FILTER","LOT_SIZE","MARKET_LOT_SIZE","MAX_NUM_ORDERS","MAX_NUM_ALGO_ORDERS","MIN_NOTIONAL","PERCENT_PRICE"]
}

Two things in there are Aster-specific and neither appears in a Binance response.

timeInForce includes HIDDEN, on all 588 symbols. That is the venue's hidden encrypted order mode surfaced as a public order attribute, which makes it the only part of Aster's privacy positioning that is checkable from outside the app.

underlyingSubType classifies what the contract tracks, with values including STOCK, Semiconductor, Commodities, ETF, Meme, AI, pre-launch and USD1-RWA. That is how you separate crypto perps from the 24/7 tokenized stock and commodity markets programmatically, and it is the field our own listings register reads.

Also present on each symbol and absent from Binance: symbolType, tradingMode, name, channel, sequenceNo, twapMinNotional, imn, tags, settlePlan, triggerProtect, liquidationFee and marketTakeBound.

Order book: depth

GET /fapi/v1/depth?symbol=BTCUSDT&limit=5

{
  "lastUpdateId": 532816372677,
  "E": 1788860273018,
  "T": 1788860273000,
  "bids": [["78619.9","1.529"],["78618.7","1.355"]],
  "asks": [["78620.0","0.871"],["78622.5","0.011"]]
}

limit is not free-form. The values 5, 10, 20, 50, 100, 500 and 1000 all returned data. limit=3 returned {"code":-4021,"msg":"3 is not valid depth limit"} and limit=5000 returned -1130. Prices and quantities are strings, as they are everywhere on this API.

Trades: trades, aggTrades, historicalTrades

GET /fapi/v1/trades?symbol=BTCUSDT&limit=2 returns objects with id, price, qty, quoteQty, time, isBuyerMaker.

GET /fapi/v1/aggTrades?symbol=BTCUSDT&limit=1 returns the compressed form with a (aggregate id), p, q, f and l (first and last trade id), T, m:

[{"a":86864991,"p":"78641.5","q":"0.001","f":146767981,"l":146767981,"T":1788860290800,"m":false}]

GET /fapi/v1/historicalTrades requires a key and returned 401 without one.

Candles: klines and its three siblings

Four kline endpoints answered, all returning the same twelve-element array shape:

  • GET /fapi/v1/klines?symbol=&interval=&limit=
  • GET /fapi/v1/indexPriceKlines?pair=&interval=&limit= (note the parameter is pair, not symbol)
  • GET /fapi/v1/markPriceKlines?symbol=&interval=&limit=
  • GET /fapi/v1/premiumIndexKlines?symbol=&interval=&limit=
[[1788858000000,"78395.6","78632.7","78305.6","78630.7","256.739",
  1788861599999,"20135460.6338",2242,"138.708","10878107.3396","0"]]

In order: open time, open, high, low, close, volume, close time, quote volume, trade count, taker buy base volume, taker buy quote volume, and a trailing "0" that carries no information. On the three non-klines variants every volume field is "0", because an index or mark price has no volume. An invalid interval returns {"code":-1120,"msg":"Invalid interval."}.

Mark price and funding: premiumIndex

GET /fapi/v1/premiumIndex?symbol=BTCUSDT

{
  "symbol": "BTCUSDT",
  "markPrice": "78625.33116305",
  "indexPrice": "78650.73760870",
  "estimatedSettlePrice": "78465.85329783",
  "lastFundingRate": "0.00008144",
  "interestRate": "0.00010000",
  "nextFundingTime": 1788883200000,
  "time": 1788860274000
}

Called without a symbol it returns every market in one array. lastFundingRate is the rate for one settlement interval, and that interval is not the same on every market. See the funding section below before doing anything arithmetic with it.

Funding history and cadence: fundingRate and fundingInfo

GET /fapi/v1/fundingRate?symbol=BTCUSDT&limit=2 returns the settled history:

[{"symbol":"BTCUSDT","fundingTime":1788825600000,"fundingRate":"0.00003341"},
 {"symbol":"BTCUSDT","fundingTime":1788854400000,"fundingRate":"0.00006232"}]

GET /fapi/v1/fundingInfo is the endpoint most likely to be missed, and it is the one that makes the rest of the funding data safe to use. It takes no parameters and returned 736 rows:

{"symbol":"BTCUSDT","interestRate":"0.00010000","time":1788860399000,
 "fundingIntervalHours":8,"fundingFeeCap":0.003,"fundingFeeFloor":-0.003}

fundingIntervalHours is the settlement cadence for that specific market, and fundingFeeCap and fundingFeeFloor are its clamp. Both vary: caps observed on the same call ranged from 0.003 to 0.03.

Ticker: 24hr, price, bookTicker

GET /fapi/v1/ticker/24hr?symbol=BTCUSDT returns priceChange, priceChangePercent, weightedAvgPrice, lastPrice, lastQty, openPrice, highPrice, lowPrice, volume, quoteVolume, openTime, closeTime, firstId, lastId, count. quoteVolume is the USD-denominated figure, and it is the one to sum for a venue-wide volume number.

GET /fapi/v1/ticker/price?symbol=BTCUSDT returns {"symbol","price","time"} and GET /fapi/v1/ticker/bookTicker?symbol=BTCUSDT returns {"symbol","bidPrice","bidQty","askPrice","askQty","time","lastUpdateId"}. Both carry a time field that Binance's futures equivalents omit.

Open interest and index data

GET /fapi/v1/openInterest?symbol=BTCUSDT returns {"symbol","openInterest","time"}, where openInterest is denominated in the base asset. Multiply by mark price for a USD figure.

GET /fapi/v1/assetIndex returns the multi-asset collateral index per cross-quoted symbol, with index, bidBuffer, askBuffer, bidRate, askRate and the autoExchange variants of each.

GET /fapi/v1/indexInfo answered 200 with an empty array, []. It exists and carries nothing.

GET /futures/data/openInterestHist and GET /fapi/v1/constituents, both present on Binance, returned a 404 on Aster. There is no historical open-interest series in the public API.

Public spot endpoints

Spot lives on a different host with a different prefix: https://sapi.asterdex.com/api/v1/. ping, time, exchangeInfo, depth, trades, aggTrades, klines, ticker/price, ticker/bookTicker and ticker/24hr all answered with no key.

exchangeInfo carried 68 spot symbols, all TRADING, quoted in USDT, USD1 and FORM. Each symbol object carries a listingTime and a baseAssetAddress, the on-chain contract address of the base token, which the futures response has no equivalent of.

The one response shape that genuinely differs from Binance is spot trades:

[{"id":22920088,"price":"0.77041","qty":"25.96","baseQty":"33.69634351",
  "time":1788860309177,"isBuyerMaker":false}]

baseQty is not a Binance field. Spot depth rejects limit=3 with the same -4021 the futures endpoint uses, and accepts 5 through 1000.

Trade the Markets This API Prices

Sign up to Aster with code MMTz04. Per Aster's documented program terms the code is applied at sign-up and cannot be added to an existing account afterwards.

Trade on Aster - 5% Fee Rebate

WebSocket streams

Both stream hosts accept the Binance subscription grammar. Every stream below was opened and a real message read from it on the same date.

Futures, wss://fstream.asterdex.com:

StreamFirst message type
/ws/btcusdt@aggTrade{"e":"aggTrade","E","a","s","p","q","f","l","T","m"}
/ws/btcusdt@markPrice@1s{"e":"markPriceUpdate","E","s","p","P","i","r","T"}
/ws/btcusdt@kline_1m{"e":"kline","E","s","k":{...}}
/ws/btcusdt@bookTicker{"e":"bookTicker","u","s","b","B","a","A","T","E"}
/ws/btcusdt@depth5@100ms{"e":"depthUpdate","E","T","s","U","u","pu","b","a"}
/ws/!markPrice@arr@1san array of markPriceUpdate objects, all symbols
/stream?streams=a/b{"stream":"...","data":{...}}

On markPriceUpdate, p is mark price, i is index price, P is the estimated settle price, r is the funding rate for that market's own interval and T is its next funding time. The combined /stream form wraps each message in a stream and data envelope, exactly as Binance does.

Spot, wss://sstream.asterdex.com: /ws/asterusdt@aggTrade and /ws/asterusdt@ticker both delivered. The 24hrTicker payload uses the same single-letter keys as Binance (p, P, w, c, o, h, l, v, q, O, C, F, L, n).

Rate limits and response headers

exchangeInfo publishes the limits on each host, and they are not the same:

HostRequest weightOrders per minuteOrders per 10s
fapi.asterdex.com2400 / minute1200300
sapi.asterdex.com6000 / minute60001000

Every response carried an X-MBX-USED-WEIGHT-1M header giving the weight consumed in the current minute, which is the counter to watch rather than counting requests yourself. Responses also carried x-response-time and Access-Control-Allow-Origin: *, and CloudFront headers (X-Cache, X-Amz-Cf-Pop) showing the API is served from a CDN edge.

We did not deliberately breach the limit, so what Aster returns on an over-limit request is untested here and is deliberately not stated. Binance answers 429 and then 418; whether Aster matches that is not something this page can claim.

Error responses observed, all as JSON with an HTTP status to match:

CodeHTTPMessage
-1102400Mandatory parameter was not sent, was empty/null, or malformed
-1120400Invalid interval
-1121400Invalid symbol
-1130400Data sent for parameter is not valid
-4021400Not a valid depth limit
-2014401API-key format invalid

Where the behavior differs from a Binance client's assumptions

This is the section the rest of the page exists to support. Five differences, each measured rather than inferred, each dated 2026-09-08.

Funding is not eight-hourly

Reading fundingInfo for all 736 markets in one call gives four distinct cadences:

fundingIntervalHoursMarkets
1323
23
4136
8274

Only 274 of 736 settle on the eight-hour clock a Binance-shaped client assumes. Confirmed against settled history: BTCUSDT and ETHUSDT show eight-hour gaps in fundingRate, ASTERUSDT and XAUUSDT show four, and SUSHIUSDT shows one.

The practical consequence is that annualizing a rate as rate × 3 × 365 is correct for 37% of the market list and overstates an hourly market eightfold. The correct form reads the interval per symbol:

const info = await fetch('https://fapi.asterdex.com/fapi/v1/fundingInfo').then(r => r.json());
const hours = new Map(info.map(f => [f.symbol, f.fundingIntervalHours]));
const annualized = rate * (24 / (hours.get(symbol) ?? 8)) * 365;

We had this wrong on our own market pages until this reference was written, which is a reasonable illustration of how easily the assumption survives.

The symbol lists do not agree with each other

Four "list everything" endpoints, called in parallel at 09:42 UTC so the counts are one instant rather than a drifting sequence:

EndpointSymbols returned
/fapi/v1/exchangeInfo588
/fapi/v1/premiumIndex736
/fapi/v1/fundingInfo736
/fapi/v1/ticker/24hr583

149 symbols are priced by premiumIndex but are not listed in exchangeInfo at all, among them GNSUSD, AAPLUSD, USD1USD and the SHIELD-prefixed markets. One symbol, MBLUSDT, goes the other way. Build the tradeable universe from exchangeInfo and join the rest onto it, rather than trusting any single list to be complete.

An unknown path returns HTML, not JSON

GET /fapi/v1/nonexistent returns 404 with a full HTML error page. Any client that calls .json() on a non-2xx response will throw a parse error rather than surface the status, which is a confusing failure to debug. Check the status code before parsing.

Some Binance endpoints are simply absent

/futures/data/openInterestHist and /fapi/v1/constituents both 404. /fapi/v1/indexInfo exists but returns []. There is no public historical open-interest series.

Leverage caps are not public

/fapi/v1/leverageBracket needs a key. Per-market maximum leverage, including the 1001x mode Aster is known for, is not readable without an account, and exchangeInfo does not carry it either.

Warning

This page describes what endpoints return. It says nothing about what to do with the data, and no figure here is a signal, a strategy or a forecast. Aster ships changes quickly, so treat every shape above as a dated observation and re-check before depending on it.

Methodology

Every endpoint on this page was called from a plain HTTPS client with no API key, no proxy and no library, against the hosts named at the top, between 09:38 and 09:43 UTC on 2026-09-08. Field lists were read from the responses. Counts (588 symbols, 736 funding rows, the interval split) come from parsing those responses, not from any published figure.

This is an unofficial reference. Asterpedia is not affiliated with Aster DEX and has no access to anything a reader does not. Aster's own documentation lives at docs.asterdex.com, and the app itself is at asterdex.com. Where this page and the official documentation disagree, this page records what the endpoint returned on the date above, which may be a documentation lag or may be a change shipped since. It is not a claim that the documentation is wrong.

Nothing here documents authenticated or trading endpoints, and no credential appears on this page. Anyone building order placement against Aster should work from the official documentation, because a wrong assumption about a signed endpoint costs money in a way a wrong assumption about a ticker does not.

For how we verify figures across the rest of this site, see our methodology. For what Aster lists and when each market appeared, the listings register is built from exchangeInfo on every build.

Get a 5% Fee Rebate With Code MMTz04

Sign up to Aster with code MMTz04. Per Aster's documented program terms the code is applied at sign-up and cannot be added to an existing account afterwards.

Trade on Aster - 5% Fee Rebate

Frequently Asked Questions

Not for market data. Every endpoint documented on this page returned data over plain HTTPS with no key, no signature and no account. Two endpoints we tested do require a key and returned HTTP 401 with code -2014 without one: /fapi/v1/historicalTrades and /fapi/v1/leverageBracket. That second one matters, because it means maximum leverage per market is not readable from the public API.

There are four hosts. Perpetual futures REST is https://fapi.asterdex.com, spot REST is https://sapi.asterdex.com, futures WebSocket streams are at wss://fstream.asterdex.com and spot streams at wss://sstream.asterdex.com. The futures paths sit under /fapi/v1/ and the spot paths under /api/v1/.

It depends on the market, which is the single most common mistake made about this API. Reading GET /fapi/v1/fundingInfo on September 8, 2026 returned 736 symbols split across four cadences: 323 settle hourly, 3 every two hours, 136 every four hours and 274 every eight hours. Annualizing every rate as though it were eight-hourly overstates an hourly market by a factor of eight.

Largely, but not exactly. Paths, parameters and most response fields match Binance USD-M futures closely enough that a Binance client will work for common calls. The differences we measured are that unknown paths return an HTML error page rather than JSON, the /futures/data/ endpoints are absent, spot trades carry an extra baseQty field, and the symbol lists returned by exchangeInfo, premiumIndex and ticker/24hr do not agree with each other.

Yes, for the public market-data endpoints. Responses we checked carried Access-Control-Allow-Origin set to a wildcard, so a browser can call them from any origin without a proxy. That is an observation about the responses served on September 8, 2026, not a commitment by Aster to keep it that way.

Sources & Citation

How these figures were verified

  • Aster public futures API (fapi.asterdex.com) every futures endpoint path, parameter and response shape on this page, the 588 listed symbols, the 34 margin assets, the published rate limits, the funding interval distribution and the error codes. Checked .
  • Aster public spot API (sapi.asterdex.com) the spot endpoint paths, the 68 spot symbols, the spot rate limits and the extra baseQty field on spot trades. Checked .
  • Aster official documentation the product context around the endpoints: what Shield Mode, hidden orders and the RWA markets are, and Aster's own description of its API surface. Checked .

Aster revises its fee schedules, leverage caps and token mechanics regularly, so every figure here is a dated snapshot rather than a live feed. Where a number comes from Asterpedia’s own tracking rather than the documentation, it is labelled as such above.

Cite this page

Asterpedia. "Aster DEX API Reference: Every Public Endpoint, Verified by Calling It." Published September 8, 2026; last updated September 8, 2026. https://asterpedia.com/ecosystem/aster-api-reference
<a href="https://asterpedia.com/ecosystem/aster-api-reference">Aster DEX API Reference: Every Public Endpoint, Verified by Calling It</a> — Asterpedia, updated September 8, 2026

Reuse

You may republish these figures with attribution and a link to https://asterpedia.com/ecosystem/aster-api-reference.

Asterpedia is an independent, unofficial resource. It is not affiliated with, produced by, reviewed by, endorsed by or sponsored by Aster, asterdex.com, their operators, or their backers including YZi Labs. "Aster", "ASTER" and the Aster logo are trademarks of their respective owners, used here for identification only.

Disclaimer: Nothing here is financial, investment, legal or tax advice. Trading perpetual futures carries a substantial risk of loss. Whether any product described here is lawful or appropriate where you live, and how any trade is taxed, depends on your jurisdiction and your circumstances. Check the primary sources and speak to a qualified professional. This site contains referral links, and the full disclosure is in the site footer.

Ready to Start Trading?

Sign up to Aster with referral code MMTz04 and 5% of your trading fees come back to you as a rebate. Connect a wallet and you are trading in minutes.

Trade on Aster - 5% Fee Rebate