Compute Comparison Public API — Live Rates from 129 GPU Cloud Providers & 70 LLM Providers
Free REST API for live GPU cloud compute and LLM inference pricing. Anonymous requests get the last 30 days of history. A free instant key from POST /api/v1/keys unlocks full history.
129 GPU Cloud Providers
91 with current pricing
70 LLM Providers
624 models
Free key available
30-day anon window
Are You a Provider?
Get your GPU cloud or LLM inference pricing listed on ComputeComparison. Reach developers actively comparing providers.
Get listed freeBase URL
https://computecomparison.com/api/v1Authentication
OptionalAll endpoints are publicly accessible — no API key needed for current prices, providers, and GPU summaries. A free API key unlocks full price history (anonymous requests are limited to the last 30 days). Register instantly at POST /api/v1/keys — no approval, no payment. Pass the key as Authorization: Bearer <key> or ?api_key=<key>.
GPU Compute Endpoints
Quick-Start Code Snippets
Copy-paste examples using the real public endpoint and real field names. No API key required.
# Cheapest 10 H100 listings across all providers curl "https://computecomparison.com/api/v1/prices?gpu=H100&sort=price&order=asc&per_page=10" # All listings for a specific provider curl "https://computecomparison.com/api/v1/prices?provider=runpod&per_page=200" # Live-only listings (exclude fallback/cached) curl "https://computecomparison.com/api/v1/prices?gpu=A100&source=live&sort=price&per_page=50"
/api/v1/prices Field Dictionary
Every field returned in each data[] item. Derived from the live API response — no fields are omitted or invented.
data[] — listing object
| Field | Type | Units | Meaning |
|---|---|---|---|
provider | string | — | Cloud provider display name, e.g. "RunPod", "Lambda Labs" |
gpu_model | string | — | GPU model name as listed by the provider, e.g. "H100 80GB", "A100 SXM 80GB" |
price_per_hour | number | USD / hr | On-demand rental price |
spot_price_per_hournullable | number | null | USD / hr | Spot / interruptible price when available; null if the provider does not offer spot for this listing |
availabilitynullable | string | null | — | "high", "medium", or "low" — provider-reported stock level; null when not reported |
regionnullable | string | null | — | Provider region identifier, e.g. "us-east-1", "US-TX-3"; null when not reported |
source | string | — | "live" — fetched this cycle from the provider API; "cached" — from the previous cycle; "fallback" — static rate used when the provider API is unavailable |
fetched_atnullable | string | null | ISO 8601 UTC | ISO 8601 timestamp of when this listing was last fetched from the provider; null for fallback rows |
quality_scorenullable | number | null | — | Internal data-quality score 0–100. 95+ = live, 70–94 = cached/estimated, below 70 = fallback |
quality_tiernullable | string | null | — | "live", "estimated", or "fallback" — human-readable version of quality_score |
is_outlier | boolean | — | true when this listing's price is a statistical outlier relative to other listings for the same GPU model (more than 3 standard deviations from the mean). Useful for filtering anomalous prices. |
node_idnullable | string | null | — | Provider-specific node or cluster identifier when available; null for most providers |
min_rentable_gpu_countnullable | number | null | — | Minimum number of GPUs that must be rented together; null when not reported (treat as 1) |
gpu_countnullable | number | null | — | Number of GPUs in this listing when the provider bundles multiple GPUs per SKU; null when not reported (treat as 1) |
pricing_tiernullable | string | null | — | Provider-specific pricing tier label, e.g. "reserved", "on-demand", "spot"; null when not reported |
meta — pagination envelope
| Field | Type | Meaning |
|---|---|---|
total | integer | Total number of listings matching the query (before pagination) |
page | integer | Current page number (1-indexed) |
per_page | integer | Number of results per page as requested |
total_pages | integer | Total number of pages for this query |
fetched_at | string | ISO 8601 timestamp of the most recent data refresh cycle |
CORS
Responses do not currently send CORS headers, so browsers block direct cross-origin fetch calls. Browser embedding works through the widget snippets below, which load data with JSONP and need no CORS headers. For other browser use, call the API from your own backend.
Data Freshness
Prices are fetched from each provider's public API and refreshed every 15 minutes. Each listing includes a source field:live (fetched this cycle),cached (from previous cycle), orfallback (static rates used when provider API is unavailable). Responses include Cache-Control: public, max-age=60.
Live API Status
Check provider health and uptime in real time
GPU HTML Embed Widgets
Copy and paste any widget below directly into your website's HTML. No build tools or frameworks required.
cc_live_demo0000000000000000000000 in the snippet. The demo key is rate-limited to 500 req / 15 min and should not be used in production.Price Ticker
Scrolling marquee showing every provider's best price per hour, right-to-left. Drop it into any page header or sidebar.
Preview (loading…)
<!-- GPU Price Ticker — computecomparison.com -->
<div id="cc-ticker-wrap" style="font-family:ui-monospace,monospace;background:#0a0a0f;border:1px solid #1e1e2e;border-radius:8px;overflow:hidden;display:flex;align-items:center;height:38px">
<a href="https://computecomparison.com" target="_blank" rel="noopener noreferrer"
style="shrink:0;padding:0 14px;border-right:1px solid #1e1e2e;font-size:10px;font-weight:700;color:#00ff88;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;height:100%;display:flex;align-items:center;text-decoration:none">
LIVE GPU PRICES
</a>
<div style="flex:1;overflow:hidden;position:relative">
<div id="cc-ticker-track" style="display:inline-flex;gap:0;white-space:nowrap;will-change:transform">
<span id="cc-ticker-inner" style="display:inline-flex;align-items:center;gap:0"></span>
<span id="cc-ticker-clone" style="display:inline-flex;align-items:center;gap:0"></span>
</div>
</div>
<a href="https://computecomparison.com" target="_blank" rel="noopener"
style="flex-shrink:0;padding:0 12px;border-left:1px solid #1e1e2e;font-size:9px;color:#555;text-decoration:none;height:100%;display:flex;align-items:center;white-space:nowrap">
Powered by ComputeComparison.com
</a>
</div>
<script>
(function () {
var API_KEY = 'YOUR_API_KEY';
var SPEED = 60; // pixels per second — increase to scroll faster
// Uses JSONP via <script> tag — works cross-origin with no CORS headers needed
var cbName = '__ccTicker_' + Math.random().toString(36).slice(2);
var done = false;
window[cbName] = function (json) {
done = true;
delete window[cbName];
var items = (json.data || [])
.filter(function (p) { return p.best_price_per_hour != null; })
.sort(function (a, b) { return a.best_price_per_hour - b.best_price_per_hour; });
function makeItems(container) {
container.innerHTML = '';
items.forEach(function (p) {
var sep = document.createElement('span');
sep.style.cssText = 'color:#1e1e2e;padding:0 10px;font-size:14px;user-select:none';
sep.textContent = '|';
var item = document.createElement('a');
item.href = p.profile_url || ('https://computecomparison.com/provider/' + p.name.toLowerCase().replace(/[^a-z0-9]+/g, '-'));
item.target = '_blank';
item.rel = 'noopener noreferrer';
item.style.cssText = 'display:inline-flex;align-items:center;gap:6px;padding:0 6px;text-decoration:none;cursor:pointer;border-radius:3px;transition:background 0.15s';
item.onmouseover = function() { this.style.background = 'rgba(0,246,255,0.07)'; };
item.onmouseout = function() { this.style.background = 'transparent'; };
item.innerHTML =
'<span style="color:#00f6ff;font-size:11px">' + p.name + '</span>' +
'<span style="color:#00ff88;font-size:12px;font-weight:700">$' + p.best_price_per_hour.toFixed(2) + '</span>' +
'<span style="color:#555;font-size:10px">/hr</span>';
container.appendChild(sep);
container.appendChild(item);
});
}
var inner = document.getElementById('cc-ticker-inner');
var clone = document.getElementById('cc-ticker-clone');
var track = document.getElementById('cc-ticker-track');
if (!inner || !clone || !track) return;
makeItems(inner);
makeItems(clone);
var offset = 0;
var last = null;
function tick(ts) {
if (!last) last = ts;
var dt = (ts - last) / 1000;
last = ts;
var width = inner.scrollWidth;
if (width > 0) {
offset += SPEED * dt;
if (offset >= width) offset -= width;
track.style.transform = 'translateX(-' + offset + 'px)';
}
requestAnimationFrame(tick);
}
requestAnimationFrame(tick);
};
var s = document.createElement('script');
s.src = 'https://computecomparison.com/api/v1/prices/providers?api_key=' + encodeURIComponent(API_KEY) + '&callback=' + cbName;
s.onerror = function () {
delete window[cbName];
var inner = document.getElementById('cc-ticker-inner');
if (inner) inner.innerHTML = '<span style="color:#555;font-size:11px;padding:0 14px">Could not load prices — check API_KEY</span>';
};
// Timeout fallback in case script loads but callback never fires (bad key returns non-JS)
setTimeout(function () {
if (!done) {
delete window[cbName];
var inner = document.getElementById('cc-ticker-inner');
if (inner && !inner.children.length) inner.innerHTML = '<span style="color:#555;font-size:11px;padding:0 14px">Could not load prices — check API_KEY</span>';
}
}, 5000);
document.head.appendChild(s);
})();
</script>Pricing Table
Full sortable table of live GPU listings. Configurable GPU filter and row count.
Preview (loading…)
<!-- GPU Pricing Table — computecomparison.com -->
<div id="cc-gpu-table" style="font-family:ui-monospace,monospace;background:#0a0a0f;border:1px solid #1e1e2e;border-radius:10px;overflow:hidden;max-width:100%">
<div style="padding:12px 16px;border-bottom:1px solid #1e1e2e;display:flex;align-items:center;justify-content:space-between">
<span style="color:#00ff88;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase">Live GPU Prices</span>
<a href="https://computecomparison.com" target="_blank" rel="noopener" style="color:#555;font-size:10px;text-decoration:none">computecomparison.com ↗</a>
</div>
<div style="overflow-x:auto">
<table id="cc-gpu-table-body" style="width:100%;border-collapse:collapse;font-size:12px">
<thead>
<tr style="border-bottom:1px solid #1e1e2e">
<th style="text-align:left;padding:8px 14px;color:#555;font-weight:500">Cloud Provider</th>
<th style="text-align:left;padding:8px 14px;color:#555;font-weight:500">GPU</th>
<th style="text-align:right;padding:8px 14px;color:#555;font-weight:500">On-Demand</th>
<th style="text-align:right;padding:8px 14px;color:#555;font-weight:500">Spot</th>
<th style="text-align:left;padding:8px 14px;color:#555;font-weight:500">Region</th>
</tr>
</thead>
<tbody id="cc-rows"></tbody>
</table>
</div>
<div style="padding:8px 16px;border-top:1px solid #1e1e2e;font-size:10px;color:#333">
Powered by <a href="https://computecomparison.com" target="_blank" rel="noopener" style="color:#00ff88;text-decoration:none">ComputeComparison</a>
</div>
</div>
<script>
(function() {
var API_KEY = 'YOUR_API_KEY';
var GPU_FILTER = 'H100'; // change or remove
var MAX_ROWS = 10;
var done = false;
var cbName = '__ccTable_' + Math.random().toString(36).slice(2);
window[cbName] = function(json) {
done = true;
delete window[cbName];
var tbody = document.getElementById('cc-rows');
if (!tbody || !json.data) return;
json.data.forEach(function(r) {
var tr = document.createElement('tr');
tr.style.borderBottom = '1px solid #111118';
tr.innerHTML =
'<td style="padding:8px 14px;color:#00f6ff">' + r.provider + '</td>' +
'<td style="padding:8px 14px;color:#c9d1d9">' + r.gpu_model + '</td>' +
'<td style="padding:8px 14px;color:#00ff88;text-align:right">$' + r.price_per_hour.toFixed(2) + '/hr</td>' +
'<td style="padding:8px 14px;color:#555;text-align:right">' + (r.spot_price_per_hour ? '$' + r.spot_price_per_hour.toFixed(2) + '/hr' : '—') + '</td>' +
'<td style="padding:8px 14px;color:#555">' + r.region + '</td>';
tbody.appendChild(tr);
});
};
setTimeout(function() {
if (!done) {
delete window[cbName];
var tbody = document.getElementById('cc-rows');
if (tbody && !tbody.children.length) tbody.innerHTML = '<tr><td colspan="5" style="padding:12px 14px;color:#555;text-align:center">Could not load prices — check API_KEY</td></tr>';
}
}, 5000);
var s = document.createElement('script');
s.onerror = function() {
delete window[cbName];
var tbody = document.getElementById('cc-rows');
if (tbody) tbody.innerHTML = '<tr><td colspan="5" style="padding:12px 14px;color:#555;text-align:center">Could not load prices — check API_KEY</td></tr>';
};
var url = 'https://computecomparison.com/api/v1/prices?sort=price&per_page=' + MAX_ROWS
+ (GPU_FILTER ? '&gpu=' + encodeURIComponent(GPU_FILTER) : '')
+ '&api_key=' + encodeURIComponent(API_KEY)
+ '&callback=' + cbName;
s.src = url;
document.head.appendChild(s);
})();
</script>Price Badge
Inline badge showing the best current price for a single GPU model.
Preview (loading…)
<!-- Best GPU Price Badge — computecomparison.com -->
<div id="cc-badge" style="display:inline-flex;align-items:center;gap:10px;font-family:ui-monospace,monospace;background:#0a0a0f;border:1px solid #1e1e2e;border-radius:8px;padding:10px 16px">
<span style="font-size:11px;color:#555" id="cc-badge-gpu">H100 80GB</span>
<span style="font-size:18px;font-weight:700;color:#00ff88" id="cc-badge-price">—</span>
<span style="font-size:10px;color:#555">/hr</span>
<span style="font-size:10px;color:#333">·</span>
<span style="font-size:10px;color:#555" id="cc-badge-provider">—</span>
<a href="https://computecomparison.com" target="_blank" rel="noopener" style="font-size:9px;color:#555;text-decoration:none;margin-left:6px;white-space:nowrap">Powered by ComputeComparison.com ↗</a>
</div>
<script>
(function() {
var API_KEY = 'YOUR_API_KEY';
var GPU = 'H100 80GB'; // exact model name
var done = false;
var cbName = '__ccBadge_' + Math.random().toString(36).slice(2);
window[cbName] = function(json) {
done = true;
delete window[cbName];
var match = (json.data || []).find(function(g) {
return g.gpu_model.toLowerCase() === GPU.toLowerCase();
});
if (!match) return;
var el = document.getElementById('cc-badge-price');
var prov = document.getElementById('cc-badge-provider');
var gpuEl = document.getElementById('cc-badge-gpu');
if (el) el.textContent = '$' + match.best_price_per_hour.toFixed(2);
if (prov) prov.textContent = match.best_provider || '';
if (gpuEl) gpuEl.textContent = match.gpu_model;
};
setTimeout(function() { if (!done) delete window[cbName]; }, 5000);
var s = document.createElement('script');
s.src = 'https://computecomparison.com/api/v1/prices/gpus?api_key=' + encodeURIComponent(API_KEY) + '&callback=' + cbName;
s.onerror = function() { delete window[cbName]; };
document.head.appendChild(s);
})();
</script>Compact List
Compact card showing best prices for a configurable list of GPU models.
Preview (loading…)
<!-- Compact GPU Price List — computecomparison.com -->
<div id="cc-compact" style="font-family:ui-monospace,monospace;background:#0a0a0f;border:1px solid #1e1e2e;border-radius:10px;padding:16px;max-width:340px">
<div style="font-size:11px;color:#00ff88;font-weight:700;letter-spacing:.08em;text-transform:uppercase;margin-bottom:12px">Best GPU Prices</div>
<div id="cc-compact-list" style="display:flex;flex-direction:column;gap:8px"></div>
<div style="margin-top:12px;font-size:10px;color:#555;display:flex;align-items:center;justify-content:space-between">
<a href="https://computecomparison.com" target="_blank" rel="noopener" style="color:#00ff88;text-decoration:none">View all ↗</a>
<a href="https://computecomparison.com" target="_blank" rel="noopener" style="color:#555;text-decoration:none">Powered by ComputeComparison.com</a>
</div>
</div>
<script>
(function() {
var API_KEY = 'YOUR_API_KEY';
var GPUS = ['H100 80GB', 'A100 80GB', 'RTX 4090', 'A10G']; // models to show
var done = false;
var cbName = '__ccCompact_' + Math.random().toString(36).slice(2);
window[cbName] = function(json) {
done = true;
delete window[cbName];
var list = document.getElementById('cc-compact-list');
if (!list) return;
(json.data || [])
.filter(function(g) { return GPUS.indexOf(g.gpu_model) !== -1; })
.sort(function(a, b) { return GPUS.indexOf(a.gpu_model) - GPUS.indexOf(b.gpu_model); })
.forEach(function(g) {
var row = document.createElement('div');
row.style.cssText = 'display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#111118;border-radius:6px';
row.innerHTML =
'<span style="color:#c9d1d9;font-size:12px">' + g.gpu_model + '</span>' +
'<div style="text-align:right">' +
'<span style="color:#00ff88;font-size:13px;font-weight:700">$' + g.best_price_per_hour.toFixed(2) + '</span>' +
'<span style="color:#555;font-size:10px">/hr</span>' +
'<div style="color:#555;font-size:10px">' + (g.best_provider || '') + '</div>' +
'</div>';
list.appendChild(row);
});
};
setTimeout(function() {
if (!done) {
delete window[cbName];
var list = document.getElementById('cc-compact-list');
if (list && !list.children.length) list.innerHTML = '<div style="color:#555;font-size:11px;padding:6px 0">Could not load prices — check API_KEY</div>';
}
}, 5000);
var s = document.createElement('script');
s.src = 'https://computecomparison.com/api/v1/prices/gpus?api_key=' + encodeURIComponent(API_KEY) + '&callback=' + cbName;
s.onerror = function() {
delete window[cbName];
var list = document.getElementById('cc-compact-list');
if (list) list.innerHTML = '<div style="color:#555;font-size:11px;padding:6px 0">Could not load prices — check API_KEY</div>';
};
document.head.appendChild(s);
})();
</script>GPU Webhooks
Subscribe to real-time GPU price change events. When GPU prices shift, ComputeComparison POSTs a signed JSON payload to your URL — no polling required.
Event Types
| Event | Fires when |
|---|---|
price.updated | Any GPU price changes (up or down). Default. |
price.drop | One or more GPU prices decrease. |
price.spike | One or more GPU prices increase. |
Payload Shape
{
"event": "price.drop",
"api_version": "v1",
"fired_at": "2025-01-15T12:15:00.000Z",
"changes": [
{
"provider": "RunPod",
"gpu_model": "H100 80GB",
"region": "US-TX-3",
"old_price": 2.99,
"new_price": 2.49,
"change_pct": -16.72,
"availability": "high"
}
]
}Verifying Signatures
Every delivery includes an X-CC-Signature header. Verify it to confirm the request came from ComputeComparison and wasn't tampered with.
const crypto = require('crypto');
function verifySignature(secret, rawBody, signatureHeader) {
const expected = 'sha256=' +
crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signatureHeader)
);
}
// Express example
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const sig = req.headers['x-cc-signature'];
if (!verifySignature(process.env.WEBHOOK_SECRET, req.body, sig)) {
return res.status(401).send('Invalid signature');
}
const payload = JSON.parse(req.body);
console.log(payload.event, payload.changes.length, 'changes');
res.sendStatus(200);
});import hmac, hashlib
def verify_signature(secret: str, raw_body: bytes, signature_header: str) -> bool:
expected = 'sha256=' + hmac.new(
secret.encode(), raw_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)
# Flask example
from flask import Flask, request
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
sig = request.headers.get('X-CC-Signature', '')
if not verify_signature(WEBHOOK_SECRET, request.get_data(), sig):
return 'Invalid signature', 401
payload = request.get_json()
print(payload['event'], len(payload['changes']), 'changes')
return '', 200Limits & Behaviour
- ›10 active webhooks per API key
- ›Delivery timeout: 10 seconds per attempt
- ›No automatic retries — use the delivery log to detect failures
- ›Price changes are checked every 60 seconds
- ›Delivery log retains the last 50 attempts per webhook
- ›Demo key webhooks are registered but never fired