Catalog Evals (OPVS)
2 endpoints from the published OpenAPI import.
POST/api/v1/catalog/models/{model_ref}/evals
Contribute Eval
Contribute a machine-eval aggregate (kind:auto) or human rating (kind:human).
Upserts into the kind-scoped partial-unique key space so a re-report of the same (model_ref, task_type, source[, rated_by]) updates in place and the two kinds never collide (G4). kind:human requires the master/super_admin actor; a broker key is 403'd.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
model_ref | path | string | true |
Try it
Examples
cURL
curl -X POST 'https://spideriq.ai/api/v1/catalog/models/{model_ref}/evals' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"kind": "string",
"source": "string",
"task_type": "string",
"runs": 0,
"successes": 0,
"failures": 0,
"no_gate_runs": 0,
"success_rate": 0.0,
"avg_cost_usd": 0.0,
"avg_turns": 0.0,
"avg_gate_duration_ms": 0,
"method": "string",
"window_first_run_at": "2026-01-01T00:00:00Z",
"window_last_run_at": "2026-01-01T00:00:00Z",
"confidence": "string",
"stars": 0.0,
"rated_by": "string",
"review_text": "string",
"provenance": {}
}'Python
import httpx
resp = httpx.post(
"https://spideriq.ai/api/v1/catalog/models/{model_ref}/evals",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"kind": "string", "source": "string", "task_type": "string", "runs": 0, "successes": 0, "failures": 0, "no_gate_runs": 0, "success_rate": 0.0, "avg_cost_usd": 0.0, "avg_turns": 0.0, "avg_gate_duration_ms": 0, "method": "string", "window_first_run_at": "2026-01-01T00:00:00Z", "window_last_run_at": "2026-01-01T00:00:00Z", "confidence": "string", "stars": 0.0, "rated_by": "string", "review_text": "string", "provenance": {}},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/catalog/models/{model_ref}/evals", {
method: "POST",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"kind": "string", "source": "string", "task_type": "string", "runs": 0, "successes": 0, "failures": 0, "no_gate_runs": 0, "success_rate": 0.0, "avg_cost_usd": 0.0, "avg_turns": 0.0, "avg_gate_duration_ms": 0, "method": "string", "window_first_run_at": "2026-01-01T00:00:00Z", "window_last_run_at": "2026-01-01T00:00:00Z", "confidence": "string", "stars": 0.0, "rated_by": "string", "review_text": "string", "provenance": {}})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"kind": "string", "source": "string", "task_type": "string", "runs": 0, "successes": 0, "failures": 0, "no_gate_runs": 0, "success_rate": 0.0, "avg_cost_usd": 0.0, "avg_turns": 0.0, "avg_gate_duration_ms": 0, "method": "string", "window_first_run_at": "2026-01-01T00:00:00Z", "window_last_run_at": "2026-01-01T00:00:00Z", "confidence": "string", "stars": 0.0, "rated_by": "string", "review_text": "string", "provenance": {}}`)
req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/catalog/models/{model_ref}/evals", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
201 | Successful Response |
422 | Validation Error |
PATCH/api/v1/catalog/models/{model_ref}/evals/{eval_id}
Patch Eval
Update one eval row by id (COALESCE-preserve — only supplied fields change).
The periodic auto rollup PATCHes its own auto rows; it can NEVER reach a human row — a "broker" actor is 403'd from touching kind='human' (G4 at the API layer). Identity columns (model_ref / kind / source / task_type) are immutable.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
model_ref | path | string | true | |
eval_id | path | integer | true |
Try it
Examples
cURL
curl -X PATCH 'https://spideriq.ai/api/v1/catalog/models/{model_ref}/evals/{eval_id}' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"runs": 0,
"successes": 0,
"failures": 0,
"no_gate_runs": 0,
"success_rate": 0.0,
"avg_cost_usd": 0.0,
"avg_turns": 0.0,
"avg_gate_duration_ms": 0,
"method": "string",
"window_first_run_at": "2026-01-01T00:00:00Z",
"window_last_run_at": "2026-01-01T00:00:00Z",
"confidence": "string",
"stars": 0.0,
"review_text": "string",
"provenance": {}
}'Python
import httpx
resp = httpx.patch(
"https://spideriq.ai/api/v1/catalog/models/{model_ref}/evals/{eval_id}",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={"runs": 0, "successes": 0, "failures": 0, "no_gate_runs": 0, "success_rate": 0.0, "avg_cost_usd": 0.0, "avg_turns": 0.0, "avg_gate_duration_ms": 0, "method": "string", "window_first_run_at": "2026-01-01T00:00:00Z", "window_last_run_at": "2026-01-01T00:00:00Z", "confidence": "string", "stars": 0.0, "review_text": "string", "provenance": {}},
)
resp.raise_for_status()
print(resp.json())JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/catalog/models/{model_ref}/evals/{eval_id}", {
method: "PATCH",
headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
body: JSON.stringify({"runs": 0, "successes": 0, "failures": 0, "no_gate_runs": 0, "success_rate": 0.0, "avg_cost_usd": 0.0, "avg_turns": 0.0, "avg_gate_duration_ms": 0, "method": "string", "window_first_run_at": "2026-01-01T00:00:00Z", "window_last_run_at": "2026-01-01T00:00:00Z", "confidence": "string", "stars": 0.0, "review_text": "string", "provenance": {}})
});
const data = await resp.json();
console.log(data);Go
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"runs": 0, "successes": 0, "failures": 0, "no_gate_runs": 0, "success_rate": 0.0, "avg_cost_usd": 0.0, "avg_turns": 0.0, "avg_gate_duration_ms": 0, "method": "string", "window_first_run_at": "2026-01-01T00:00:00Z", "window_last_run_at": "2026-01-01T00:00:00Z", "confidence": "string", "stars": 0.0, "review_text": "string", "provenance": {}}`)
req, _ := http.NewRequest("PATCH", "https://spideriq.ai/api/v1/catalog/models/{model_ref}/evals/{eval_id}", body)
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}Responses
| Status | Description |
|---|---|
200 | Successful Response |
422 | Validation Error |