Endpoints · v1 / Quotes
Latest market data for one or more assets: price, market cap, volume and eight percent-change windows.
An asset with no market data is not in the response. Sending five ids can return three rows, and the response does not say which two are missing — market data is only collected for a subset of the catalogue, so "no quote" is ordinary rather than an error.
Query parameters
idcsv of integersUp to 100. Exact matchsymbolcsv of stringsUp to 100. Not unique — one ticker can return several unrelated assets. Case-insensitive. May be non-ASCII; URL-encode itslugcsv of stringsUp to 100. Uniquepageinteger ≥ 1Page mode. Takes precedence overlimit/offsetsizeintegerDefault20Page mode. Over 100 is a400in either mode — the check runs before the mode is chosen, so?limit=10&size=500is a400too — not a truncation;0or a negative value falls back to the defaultlimitintegerDefault20Offset mode. Over 100 is a400;0or a negative value falls back to the defaultoffsetinteger ≥ 0Default0Offset mode. Max 100000sortid|name|symbol|slug, optionally:asc/:descDefaultid:ascSorting by price or market cap is not available yet
Filters are ANDed.
Response
Item fields
| Field | Type | Notes |
|---|---|---|
id |
number | The same asset id /assets returns, and the same JSON number |
name / symbol / slug / logo |
string | As in /assets |
price |
string | Stored as decimal(36,18) |
market_cap |
string or null |
null when upstream has no market cap. Never "0" for unknown |
volume |
string | 24-hour volume, decimal(36,8) |
percent_change |
object | Eight windows, every value a string. New windows may be added here; the object is the extension point |
A window is not a promise about its length. Each figure is computed against the earliest snapshot we hold inside that window, not against a point exactly that far back. An asset we began recording four hours ago reports a
24hfigure spanning four hours, and nothing in the response says so. Treat the keys as labels for "roughly this far back", not as durations you can do arithmetic with.
Every money-shaped value is a JSON string, deliberately.
priceisdecimal(36,18)and the percent-change windows aredecimal(36,12)— more significant digits than an IEEE-754 double holds. Sent as JSON numbers they would be rounded byJSON.parsebefore your code ever ran, with no error on either side. Parse them with a decimal library, not as floats.
idis a JSON number while these are strings, and that is not an oversight — see the note under/assets.
Not implemented
total_supply, circulating_supply, fully_diluted_market_cap and
minted_market_cap are not returned. Adding a field later is non-breaking;
removing one is not.
Examples
/quotes reads id, symbol, slug, page, size, limit, offset and
sort. There is no fields= here — the quote fields are not opt-in — and an
unknown parameter is ignored rather than rejected.
# Default listing (20 items, sorted by id ascending)
curl -H "X-Api-Key: <your-api-key>" \
"https://open-api.coinworldcap.com/openapi/v1/quotes"
# Page-based pagination, sorted by name descending
curl -H "X-Api-Key: <your-api-key>" \
"https://open-api.coinworldcap.com/openapi/v1/quotes?page=1&size=10&sort=name:desc"
# Look up specific assets by slug, which is unique — use symbol instead and one
# ticker can come back as several unrelated assets
curl -H "X-Api-Key: <your-api-key>" \
"https://open-api.coinworldcap.com/openapi/v1/quotes?slug=bitcoin,ethereum"
# Show the response headers, including X-Request-Id
curl -i -H "X-Api-Key: <your-api-key>" \
"https://open-api.coinworldcap.com/openapi/v1/quotes?limit=1"
Anything other than a 200 is in Errors, which covers every endpoint here.