このページはまだ日本語に翻訳されていません。英語の原文を表示します。
GET /benchmarks
Benchmark snapshots
Per-model benchmark scores: intelligence, coding and agentic indices, accuracy, average cost per task, and related figures.
GET https://openrouter.myip.co.kr/api/v1/benchmarksFirst, the important part: it is empty
Authentication
Authorization: Bearer <key> is required. Both inference and management keys are accepted; without a key you get 401 invalid_api_key. openrouter requires a key for this dataset too, so we kept the same rule — and since this runs no inference, it spends no credit.
Request parameters
sourcestringFilter by score source (artificial-analysis, openrouter, …). Must match the stored value exactly.
task_typestringFilter by task type.
benchmark_typestringFilter by benchmark, such as gpqa_diamond.
max_resultsnumberMaximum rows to return: an integer from 1 to 1000, default 1000.
Request example
curl https://openrouter.myip.co.kr/api/v1/benchmarks \
-H "Authorization: Bearer $MYIP_API_KEY"Empty response
This is what no data looks like. It is not an error — it is 200 with an empty array — and meta explains why. The body below is what this service actually returns today.
{
"data": [],
"meta": {
"as_of": null,
"model_count": 0,
"source": null,
"task_type": null,
"version": "v1",
"note": "벤치마크 데이터가 없습니다. 동기화에 OPENROUTER_API_KEY 가 필요하고, rankings·apps 와 달리 벤치마크에는 샘플 픽스처를 만들지 않았습니다 — 없는 점수를 지어내면 실측값으로 오인되기 때문입니다. 빈 배열을 0 점으로 표시하지 마세요.",
"sync": {
"status": "skipped",
"trigger": "admin",
"error": "OPENROUTER_API_KEY 없음 — benchmarks 는 픽스처가 없습니다",
"finished_at": "2026-09-04T20:13:00.347Z"
}
}
}meta.notestringPresent only when the result is empty. A response that carries data has no such field, so the presence of note is by itself a reliable empty-state test. Like every other message from this API, it is written in Korean.
meta.syncobject | nullThe last benchmark sync job's status, trigger, error and finished_at, or null if the job has never run. Also present only when the result is empty.
A filter that matches no rows produces the same shape — so note means "this request returned nothing", not strictly "the table is empty".
The response once data is present
model_permaslugstringThe model identifier used by the source.
model_idstring | nullThe result of matching against our catalogue, or null when there is no match — meaning scores for models we do not serve can appear here too.
display_namestring | nullDisplay name.
sourcestringWhere the score came from — values such as artificial-analysis or openrouter; entries that do not name a source are stored as openrouter. Do not compare scores from different sources on one axis.
benchmark_typestring | nullThe benchmark, such as gpqa_diamond. Together with source and model_permaslug it identifies a row.
task_typestring | nullTask type.
categorystring | nullClassification.
intelligence_indexnumber | nullComposite intelligence index. coding_index and agentic_index are indices of the same form. Rows are sorted by this value, descending, by default.
accuracynumber | nullAccuracy, with accuracy_stddev as its standard deviation.
avg_cost_per_tasknumber | nullAverage cost of one task. This is in the source's own currency, not in won. This dataset is the one place where we store a figure exactly as received rather than converting it. For our prices, read pricing from GET /models — those are KRW.
total_tasksnumber | nullNumber of tasks in the evaluation.
pricingobject | nullThe pricing object the source supplied alongside the scores. Its shape varies by source, and it is not in KRW either.
last_run_timestampstring | nullWhen the benchmark itself was last run (ISO 8601). The field name follows openrouter; our column is called last_run_at. Not the same as synced_at — it is when the score was measured, not when we fetched it.
synced_atstringWhen we last refreshed the row (ISO 8601, UTC).
{
"data": [
{
"model_permaslug": "lgai/exaone-4.0-32b",
"model_id": "lgai/exaone-4.0-32b",
"display_name": "LG AI: EXAONE 4.0 32B",
"source": "artificial-analysis",
"benchmark_type": "gpqa_diamond",
"task_type": "reasoning",
"category": "science",
"intelligence_index": 41.2,
"coding_index": 38.5,
"agentic_index": null,
"accuracy": 0.514,
"accuracy_stddev": 0.018,
"avg_cost_per_task": 0.00412,
"total_tasks": 198,
"pricing": null,
"last_run_timestamp": "2026-08-30T00:00:00.000Z",
"synced_at": "2026-09-04T00:16:02.394Z"
}
],
"meta": {
"as_of": "2026-09-04T00:16:02.394Z",
"model_count": 1,
"source": null,
"task_type": null,
"version": "v1"
}
}Errors
| Status | error_type | When |
|---|---|---|
| 400 | invalid_request | max_results is not an integer from 1 to 1000 |
| 401 | invalid_api_key | No header. A token without one of our prefixes. An unknown, switched-off, or revoked key |
| 401 | expired_api_key | The key has expired |
| 402 | insufficient_credits | The key is suspended_no_credit |
| 403 | key_suspended | An administrator suspended the key |
| 500 | server | Any other server-side failure |
No data is not an error: it comes back as {"data": []} with status 200.
Related
- GET /datasets/rankings-daily — daily model usage
- GET /datasets/app-rankings — app rankings
- GET /models — the model catalogue and KRW prices
- Errors and debugging — the full
error_typetable
最終更新 2026/09/05