لم تُترجَم هذه الصفحة إلى العربية بعد. يتم عرض النص الإنجليزي الأصلي.

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/benchmarks

First, 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

sourcestring

Filter by score source (artificial-analysis, openrouter, …). Must match the stored value exactly.

task_typestring

Filter by task type.

benchmark_typestring

Filter by benchmark, such as gpqa_diamond.

max_resultsnumber

Maximum 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.

json
{
  "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.notestring

Present 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 | null

The 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_permaslugstring

The model identifier used by the source.

model_idstring | null

The 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 | null

Display name.

sourcestring

Where 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 | null

The benchmark, such as gpqa_diamond. Together with source and model_permaslug it identifies a row.

task_typestring | null

Task type.

categorystring | null

Classification.

intelligence_indexnumber | null

Composite intelligence index. coding_index and agentic_index are indices of the same form. Rows are sorted by this value, descending, by default.

accuracynumber | null

Accuracy, with accuracy_stddev as its standard deviation.

avg_cost_per_tasknumber | null

Average 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 | null

Number of tasks in the evaluation.

pricingobject | null

The pricing object the source supplied alongside the scores. Its shape varies by source, and it is not in KRW either.

last_run_timestampstring | null

When 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_atstring

When we last refreshed the row (ISO 8601, UTC).

json
{
  "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

Statuserror_typeWhen
400invalid_requestmax_results is not an integer from 1 to 1000
401invalid_api_keyNo header. A token without one of our prefixes. An unknown, switched-off, or revoked key
401expired_api_keyThe key has expired
402insufficient_creditsThe key is suspended_no_credit
403key_suspendedAn administrator suspended the key
500serverAny other server-side failure

No data is not an error: it comes back as {"data": []} with status 200.

آخر تحديث ٠٥‏/٠٩‏/٢٠٢٦