Bulk export Pro+
Full database snapshot in one request. Ideal for nightly mirrors, research datasets and offline analysis. Costs you exactly one request against your monthly quota; the response is cached at the edge for 24 hours.
Endpoint
GET
https://api.suprabench.com/v1/export.json
Available on Pro tier and above. On Starter, returns
403 tier_forbidden.
Response shape
| Field | Type | Description |
|---|---|---|
| generatedAt | integer | Unix milliseconds when the snapshot was assembled. |
| models | ModelSummary[] | All non-hidden ranked models. Same shape as /v1/models but un-paginated. |
| benches | BenchSummary[] | All non-hidden benchmarks with quality + dimension data. |
| tags | TagInfo[] | Full tag taxonomy with counts. |
Per-submission score detail is not included in the
bulk export — it's available per-model via
GET /v1/models/:slug. Including it here would push
payloads past 50 MB.
Example
# Save the snapshot to disk for offline analysis
curl -sS https://api.suprabench.com/v1/export.json \
-H "Authorization: Bearer $SUPRABENCH_KEY" \
-o suprabench-$(date -u +%Y-%m-%d).json
import json, requests
snapshot = requests.get(
"https://api.suprabench.com/v1/export.json",
headers={"Authorization": f"Bearer {KEY}"},
).json()
print(f"snapshot generated {snapshot['generatedAt']}")
print(f" {len(snapshot['models'])} models")
print(f" {len(snapshot['benches'])} benches")
print(f" {len(snapshot['tags'])} tags")
import { writeFile } from "node:fs/promises";
const r = await fetch("https://api.suprabench.com/v1/export.json", {
headers: { Authorization: `Bearer ${process.env.SUPRABENCH_KEY}` },
});
if (!r.ok) throw new Error(`API ${r.status}`);
const snapshot = await r.json();
const day = new Date().toISOString().slice(0, 10);
await writeFile(`suprabench-${day}.json`, JSON.stringify(snapshot));
console.log(
`${snapshot.models.length} models, ${snapshot.benches.length} benches, `
+ `${snapshot.tags.length} tags`,
);
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
req, _ := http.NewRequest("GET",
"https://api.suprabench.com/v1/export.json", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SUPRABENCH_KEY"))
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
name := fmt.Sprintf("suprabench-%s.json", time.Now().UTC().Format("2006-01-02"))
f, _ := os.Create(name)
defer f.Close()
io.Copy(f, resp.Body)
}
When to use bulk export
- Nightly mirror into your own database for SQL-style queries.
- Research dataset for academic analysis.
- Powering a third-party leaderboard or comparison site (with attribution; see Terms § 14.6).
- Offline AI evaluation pipelines.
For interactive use cases (a "what's the best model right now"
widget), use /v1/best
instead — it's cheaper to call repeatedly and refreshes every
five minutes.
Performance tips
- Honour the cache. Response carries
Cache-Control: public, max-age=86400— cache it for 24 hours, not 60 seconds. - Use the freshness headers. Responses include
Cache-Control,Last-ModifiedandX-Computed-At; cache the snapshot until the advertised TTL expires instead of polling. - Prefer one-shot. Don't loop the list endpoints to reconstruct the export — that's strictly more expensive on quota and slower.
- Stream-parse for big snapshots. Use
ijsonin Python or a streaming parser in Node if you don't want to hold the whole document in memory.
Errors
| Status | Code | When |
|---|---|---|
| 403 | tier_forbidden | Starter tier — bulk export is Pro+ only. Upgrade in Profile → API & Billing. |