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.
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.
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 -X POST https://omni-bench.example/api/v1/results \
-H "x-api-key: $OMNI_API_KEY" \
-H "content-type: application/json" \
--data-binary @result.jsonThe 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.
Uploads are PUBLIC by default. To stage a result as private, add the header x-omni-visibility: private.
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.