VRAMGlass API
Get live prices and price history for GPUs, AI workstations and memory, and which open-weight LLMs run on which hardware, over plain HTTP. The data is identical to the MCP server and uses the same API key.
https://api.vramglass.com/v1Authentication
Create an API key under Account › API & MCP and send it in the request header:
curl "https://api.vramglass.com/v1/prices/rtx-3090?market=xianyu" \ -H "Authorization: Bearer YOUR_KEY"
Keep the key on your server or your own computer, never in front-end web code. The API does not accept cross-origin browser requests.
Limits
Each request counts as one call and shares the daily limit with MCP tool calls. The limit resets at 00:00 UTC. See plans
| Free | Pro | |
|---|---|---|
| Per day | 50 calls | 2,000 calls |
| Per minute | 20 calls | 120 calls |
Successful responses and the 429 for an exhausted daily limit carry X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (daily limit, calls left, reset time); 429 and 503 also carry Retry-After in seconds.
Endpoints
All are GET and return JSON. Machine-readable description: /v1/openapi.json
| Endpoint | What it returns |
|---|---|
/v1/hardware?q=3090 | Search GPUs, workstations and memory; get ids |
/v1/prices/{id} | Current price (median, range, listing count, 24h change) |
/v1/prices?ids=rtx-3090,rtx-4090 | Current prices for up to 10 items at once |
/v1/prices/{id}/history | Daily price history (7, 30, 90 or 365 days) |
/v1/price-index | GPU price index |
/v1/models?q=qwen | Search open-weight models; get ids |
/v1/gpus/{id}/models | Models a GPU can run |
/v1/models/{family}/{version}/gpus | VRAM a model needs and which GPU to buy |
/v1/builds/{family}/{version} | Complete PC builds for running a large model |
/v1/rent/{id} | Cloud rental prices |
/v1/deals/{id} | The eBay picks shown on a GPU page |
/v1/strata | Measured Strata speeds |
/v1/usage | Calls used today (not counted) |
Example: current price
GET /v1/prices/{id} takes market: ebay, xianyu or amazon_jp, several separated by commas; leave it out to get all markets.
curl "https://api.vramglass.com/v1/prices/rtx-3090?market=xianyu&lang=en" \ -H "Authorization: Bearer $VRAMGLASS_KEY"
import os, requests
r = requests.get(
"https://api.vramglass.com/v1/prices/rtx-3090",
params={"market": "xianyu", "lang": "en"},
headers={"Authorization": f"Bearer {os.environ['VRAMGLASS_KEY']}"},
timeout=20,
)
r.raise_for_status()
print(r.json()["items"][0]["quotes"][0]["median"])const res = await fetch("https://api.vramglass.com/v1/prices/rtx-3090?market=xianyu&lang=en", {
headers: { Authorization: `Bearer ${process.env.VRAMGLASS_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();
console.log(data.items[0].quotes[0].median);{
"as_of": "2026-11-13T06:05:00Z",
"items": [{
"id": "rtx-3090",
"name": "GeForce RTX 3090",
"memory_gb": 24,
"page_url": "https://vramglass.com/gpu/rtx-3090",
"quotes": [{
"market": "xianyu", "status": "ok",
"currency": "CNY", "median": 5350, "q1": 5100, "q3": 5650,
"median_usd": 751, "per_gb_usd": 31.3,
"sample_count": 214, "change_24h": -0.006,
"published_at": "2026-11-13T06:00:00Z"
}]
}]
}The numbers above are illustrative. When you use the data, credit VRAMGlass and include the page_url.
Errors
| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_request | A parameter is wrong; message says which |
| 401 | invalid_token | No key, or the key expired or was revoked |
| 404 | unknown_id | No such hardware id; look it up with /v1/hardware |
| 404 | unknown_model | No such model id; look it up with /v1/models |
| 404 | not_found | No such endpoint |
| 405 | method_not_allowed | Only GET is supported |
| 429 | quota_exceeded | Daily limit used up; see reset_at |
| 429 | rate_limited | Too many requests this minute; wait a minute |
| 500 | internal_error | Something failed on our side; retry later |
| 503 | prices_data_unavailable etc. | Data temporarily unavailable; retry after Retry-After |
Every error response is {"error": {"code", "message"}}. Branch on code, not on message.