Gemini API
Free Gemini public API with no key: bid, ask, last price and 24-hour volume in both base and quote currency for any trading pair. Tested curl example and live response.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Gemini API?
The Gemini public API is a free, key-free market data API. Its pubticker endpoint returns the current bid, ask and last trade price for a pair, plus 24-hour volume expressed in both the base and the quote currency.
Gemini is a New York trust company, and that shapes its API more than you might expect: the public surface is deliberately small, stable and well-behaved, with no versioning churn and no key for market data. The v1 pubticker endpoint has looked the same for years, which is worth something when you are choosing a dependency.
The response has one structural quirk worth knowing. Volume is not a scalar — it is a nested object holding the 24-hour figure in **both** currencies of the pair, so `volume.BTC` and `volume.USD` describe the same trading in different denominations, alongside a millisecond timestamp. Every price is a string to avoid float rounding, and the volume window is a rolling 24 hours that rolls at the top of each hour rather than a UTC calendar day.
Quick facts
- Base URL
https://api.gemini.com/v1- Authentication
- No key for public market data. Order placement, balances and account endpoints require API credentials with request signing.
- Rate limit
- Roughly 120 requests per minute per IP for public endpoints, with short bursts allowed.
- Pricing
- Free for public market data.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Gemini API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Live BTC/USD ticker
GET https://api.gemini.com/v1/pubticker/btcusd
curl 'https://api.gemini.com/v1/pubticker/btcusd'const res = await fetch("https://api.gemini.com/v1/pubticker/btcusd");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.gemini.com/v1/pubticker/btcusd", timeout=20)
res.raise_for_status()
print(res.json()){
"bid": "76485.20000",
"ask": "76486.77000",
"last": "76486.65000",
"volume": {
"BTC": "406.75781525",
"USD": "31111542.6497914125",
"timestamp": 1787298300000
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | path segment | Required | Trading pair in lowercase with no separator, such as `btcusd` or `ethbtc`. btcusd |
/pubticker/{symbol} | path | Required | The v1 ticker used in the example — the smallest and most stable shape. btcusd |
/v2/ticker/{symbol} | path | Optional | The v2 ticker adds open, high, low, close and recent hourly candles. btcusd |
Response fields
bidstring- Highest current bid price. A string, not a number.
askstring- Lowest current ask price. The gap to `bid` is the spread.
laststring- Price of the most recent trade — the number most people mean by 'the price'.
volumeobject- Nested object rather than a scalar, holding volume in both currencies of the pair.
volume.{BASE}string- 24-hour volume denominated in the base currency, for example BTC.
volume.{QUOTE}string- The same 24 hours denominated in the quote currency, for example USD.
volume.timestampinteger- Unix **milliseconds** marking the end of the volume window.
What you can build with the Gemini API
- Show a live crypto price on a dashboard or website
- Compare bid-ask spreads across exchanges
- Read 24-hour volume in either currency without converting it yourself
- Monitor a pair without holding exchange credentials
Common errors and how to fix them
404
Unknown symbol.
Fix: Symbols are lowercase with no separator — `btcusd`, not `BTC-USD` or `BTC/USD`.
429
Rate limit exceeded.
Fix: Back off and cache. A ticker cached for a few seconds is indistinguishable from a live one for most displays.
Volume field is not a number
`volume` is an object keyed by currency.
Fix: Read `volume.BTC` or `volume.USD` explicitly. Which keys exist depends on the pair you requested.
Timestamp a thousand years out
Milliseconds parsed as seconds.
Fix: `volume.timestamp` is in milliseconds. Divide by 1000 for a seconds-based date function.
Gemini API — frequently asked questions
Is the Gemini API free without an API key?
Yes, all public market data — ticker, order book, trades and candles — needs no key. Only trading and account endpoints require credentials with request signing.
Why is volume an object instead of a number?
Because Gemini reports the same 24 hours of trading in both currencies of the pair. `volume.BTC` and `volume.USD` are two views of one figure, plus a timestamp for the window end.
What is the difference between the v1 and v2 ticker?
v1 pubticker returns bid, ask, last and volume in a minimal shape. v2 adds open, high, low, close and recent hourly candles. Use v1 for a price display and v2 when you need intraday context.
Can I call Gemini's public API from the browser?
Yes. The public endpoints return permissive CORS headers, so a direct fetch works. Since no key is involved, there is also no secret to expose by doing so.
Tools that pair with this API
Percentage Change Calculator
Work out the percentage increase or decrease between an old and a new value. See the absolute change and whether it went up or down, instantly and privately.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Timestamp Converter
Convert timestamps to human-readable dates and dates back to timestamps. Auto-detects seconds vs milliseconds, shows local, UTC and ISO 8601 formats.
Gemini is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.