Fetch an eval suite (latest version)
const url = 'https://example.com/v1/eval-suites/example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/v1/eval-suites/example \ --header 'Authorization: Bearer <token>'An item more than one project serves (an environment order carries it to later environments) answers its newest active version that can run in a project the caller reads, and 404 when there is none. projectId narrows that to one project. An item with one project answers its latest active version.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”EvalSuiteId — stable string chosen by the caller (e.g. acme.drafting-accuracy).
Query Parameters
Section titled “Query Parameters”The newest active version that can run in this project, a project the caller reads; 404 when there’s none, or when the caller doesn’t read the project. An item with one project answers its latest version for its own project and 404 for any other; one that names no project (under kindgi dev, a pack’s agents, flows and tools) answers it for any. With authorization off, the caller reads every project. An older runtime ignores it and answers the latest version.
Responses
Section titled “Responses”Latest eval suite version.
object
The test set’s project: every version of a test set is in the one project. Absent when the runtime doesn’t record it: a pack kindgi dev serves from disk, or a runtime before Kindgi 0.1.6.
Semver — publishing a modified suite produces a new version.
Kind-specific suite body. For accuracy, typically { cases: [{ input, expectedOutput }], grader?: { adapterId, config? } }. For pairwise, typically { prompts, variantA, variantB }. For regression, typically { baseline, cases }. For human-review, typically { rubric, reviewerRole }. For benchmark, typically { benchmark: { name, version } }. For custom, typically { handler: { modulePath, entrypointPath }, cases }.
object
Present only on an unregistered version: one GET …/versions?includeTombstoned=true lists, or a retired test set (every version unregistered) as GET /v1/eval-suites?includeRetired=true lists it.
Example
{ "kind": "accuracy"}projectId is not a project id (a UUID).
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}Missing / malformed / expired / revoked bearer token.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}No eval suite with that id under this tenant.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}See also
GET /v1/eval-suites/{suiteId}/versions: List versions of an eval suiteGET /v1/eval-suites/{suiteId}/versions/{version}: Fetch a specific eval suite versionPOST /v1/eval-suites/{suiteId}/versions/from-judgments: Build a test set from judgmentsGET /v1/eval-suites/{suiteId}/versions/{version}/cases: List the cases of a judged eval suite version- Every error code