---
title: "Public Set Eval Task Splits"
method: PUT
path: "/v1/eval-groups/{slug}/splits"
tags: ["public-api"]
---

# Public Set Eval Task Splits

`PUT /v1/eval-groups/{slug}/splits`

## Request

- Base URL: `https://api.trainloop.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.trainloop.ai/v1/eval-groups/{slug}/splits`
- Auth: none declared

Label the group's tasks with the split of the team's benchmark each is
in: held_out (the group is scored on these) or train (training may use
these). The benchmark inventory sends this once per group it mirrors.

## Path parameters

- `slug` string, required

## Headers

- `authorization` string, nullable

## Request body

- EvalTaskSplits: ``PUT /v1/eval-groups/{slug}/splits``: each task's split, by slug. The benchmark inventory sends every task of the group it just mirrored, labelled from the team's held-out file, or null for each when the team has no file, so a file that is gone takes its labels with it. A slug that names no task of the group is a 404, and nothing is written. Tasks the body leaves out keep their split.
  - `splits` object, required: Task slug to its split, or null to clear it; every slug must name a task of this group

## Response `200`

Successful Response

- EvalTaskSplitsResponse: What the splits write labelled.
  - `group_slug` string, required
  - `held_out` integer, required: Tasks now labelled held_out
  - `train` integer, required: Tasks now labelled train

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-13** `b6483c242784`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/trainloop/apis/trainloop-api/changes/v1/eval-groups/:slug/splits/put.md)

---

[API](https://skmtc.dev/trainloop/apis/trainloop-api.md) - [All operations](https://skmtc.dev/trainloop/apis/trainloop-api/llms.txt) - [OpenAPI document](https://skmtc.dev/trainloop/apis/trainloop-api/revisions/f11e38cf6836?raw)
