Skip to content

api

Submit External Evaluation Outputs

Create an external Run from actual first results, append missing Case responses, and explicitly complete its Trial for evaluation.

Submit External Evaluation Outputs

Definition

Use the organization/project/Benchmark/Version prefix and retrieve GET /case-manifest for exact frozen Cases. Product Runs and Trials retain the API's existing run-groups and child runs wire identities.

Create with actual results

The placeholder ID must be replaced with an issued manifest Case ID. This command atomically creates the Group and first child from real results; it does not reserve an empty reference Run.

Endpoint
POST /run-groups
Idempotency-Key: <logical-command-key>
JSON
{
  "name": "Application comparison",
  "results": [
    {
      "case_id": "<issued-case-id>",
      "output": "<response produced by the application>"
    }
  ]
}

Append and complete

Use the returned IDs and links. POST /run-groups/{groupId}/runs starts another child Trial in that external Group. GET/POST /run-groups/{groupId}/runs/{runId}/results reads or appends Case results.

Each item contains exactly one output or failure. Optional fields include exact membership/version references, trajectory, latency, usage and cost. Native JSON and whitespace are retained. Accepted Case results cannot be replaced.

POST .../complete accepts allow_partial. Missing Cases require explicit partial completion. Repeated completion returns the recorded outcome; an explicit failed-admission retry does not change accepted content.

Boundaries

Managed and controlled-evaluation Groups reject externally submitted responses. Corrections require a new child Trial. The existing external Group can accept that new child through its registered route; a new Group is also an explicit option. Accepted execution failures remain unavailable response judgments rather than fabricated rubric failures.

Request sequence

Configure BENCHMARK_URL with the quickstart. Prepare first-results.json using the body above, an actual manifest Case ID and its application response.

Retain Group and child Run IDs. Append additional batches under the child's results route with a key per logical batch. Recover a lost response with its original bytes and key.

Read import state before completing. Send {"allow_partial":false} to POST /run-groups/{groupId}/runs/{runId}/complete; use true only for intentionally missing Cases. A failed evaluation-admission retry uses retry:true and retains the original partial policy.

Read the manifest and submit first results
cURL
curl --fail-with-body \
  --header "Authorization: Bearer ${TEAMMATELY_API_KEY}" \
  "${BENCHMARK_URL}/case-manifest"

curl --fail-with-body \
  --header "Authorization: Bearer ${TEAMMATELY_API_KEY}" \
  --header 'Content-Type: application/json' \
  --header "Idempotency-Key: ${RESULT_OPERATION_KEY}" \
  --data-binary @first-results.json \
  "${BENCHMARK_URL}/run-groups"

Inspect the result

Read GET /runs/{runId} for judging progress, then retrieve results. Missing output, execution failure and an unfavorable rubric judgment are different outcomes. For a full local-file walkthrough, see CLI external outputs.

Found something unclear?

Report outdated, unsupported, or confusing docs so we can fix the source page.

Report a docs issue