---
title: "Set Custom Agent Labels"
method: PUT
path: "/agent/{custom_agent_id}/labels"
deprecated: true
---

# Set Custom Agent Labels

`PUT /agent/{custom_agent_id}/labels`

## Request

- Base URL: `https://api.tellers.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tellers.ai/agent/{custom_agent_id}/labels`
- Auth: none declared

> **Deprecated.**

Replace an assistant's curation labels.

Here rather than on the assistant routes because labels are not the
owner's to set — they exist to organise the review queue above, which
filters on them. The module's router-wide gate is what enforces that.

The body is the complete set: it replaces rather than merges, so removing
a label is sending the list without it. It replaces the owner's labels
too — the curator has the last word on what an assistant is filed under.

Every entry must name a label in the vocabulary. Minting one is
``PUT /label/{label_id}``, deliberately a separate act: a typo here should
be a refusal, not a new label nobody meant to create.

## Path parameters

- `custom_agent_id` string, uuid, required

## Headers

- `x-api-key` string, nullable
- `authorization` string, nullable

## Request body

- APICustomAgentLabelsRequest: The assistant's complete label set — this replaces, it does not merge. Slugs from the vocabulary, not free text: one that names no label is a refusal. On the owner-facing route the replacement is confined to the labels an owner may set, so a reviewer's curation is not something an author can drop by omitting it.
  - `labels` string[], required

## Response `204`

Successful Response

## Other responses

- `422`: Validation Error

---

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