omni-benchASR

Upload results

How a producer publishes a scored run to the leaderboard.

omni-bench is a framework, not a runner: you score a run locally and publish the resulting result.json to the API. Uploads are authenticated with a personal API key and the row is owned by that key's account. This guide is the whole path — key, request, response.

Step 1

Get an API key

API keys live on your profile. Create one, copy it once (it is shown a single time), and keep it secret — it is your upload credential.

Open your profile →
Step 2

POST your result.json

Send the bare result document (the exact shape the scorer emits, validated .strict()) to POST /api/v1/results with your key in the x-api-key header. The body must carry schema_version — only 0.1.0 is accepted today.

curl
curl -X POST https://omni-bench.example/api/v1/results \
  -H "x-api-key: $OMNI_API_KEY" \
  -H "content-type: application/json" \
  --data-binary @result.json

The request body is validated against the versioned Result JSON Schema (the contract the scorer and the API share). Its TypeScript type and Zod validator are generated from that schema, so the API can't drift from the data.

Result contract & JSON Schema (methodology) →

Uploads are PUBLIC by default. To stage a result as private, add the header x-omni-visibility: private.

Step 3

Read the response

201 Created

On success the API returns the new result id and its identity key (the content-addressed key that groups re-scores of the same tuple).

{
  "resultId": "res_01J…",
  "identityKey": "sha256:8bbc0ff…"
}

Errors

  • 401Missing or invalid API key.
  • 422Invalid JSON, an unsupported schema_version, or a document that fails schema validation (the response lists the Zod issues).
  • 413Body over the 4 MB cap — a real result is a few KB, so this means an abusive payload.