> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update tag

> Update one tag by tag ID.

Updates one [`Tag`](/en/api-reference/tags#tag-object).

<Note>
  The `{id}` path segment is the tag ID on this route, not the tag group ID.
</Note>

## Headers

<ParamField header="Authorization" type="string" required>
  Bearer token containing your Fini workspace API key. Format: `Bearer fini_...` The key needs `write` scope.
</ParamField>

<ParamField header="Content-Type" type="string" required>
  `application/json`
</ParamField>

## Path parameters

<ParamField path="id" type="string" required>
  Tag ID to update.
</ParamField>

## Body parameters

<ParamField body="tagName" type="string">
  Updated tag label.
</ParamField>

<ParamField body="tagDescription" type="string">
  Updated tag description or instruction text.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request PUT \
    --url 'https://api-prod.usefini.com/v2/tag-groups/0dc53764-a417-4a4f-b7f4-63149529f530/tags/public' \
    --header 'Authorization: Bearer fini_your_api_key' \
    --header 'Content-Type: application/json' \
    --data '{
      "tagName": "resolved_without_escalation",
      "tagDescription": "Use when the assistant fully resolved the request without handing off."
    }'
  ```

  ```python Python theme={null}
  import requests

  tag_id = "0dc53764-a417-4a4f-b7f4-63149529f530"
  response = requests.put(
      f"https://api-prod.usefini.com/v2/tag-groups/{tag_id}/tags/public",
      headers={
          "Authorization": "Bearer fini_your_api_key",
          "Content-Type": "application/json",
      },
      json={
          "tagName": "resolved_without_escalation",
          "tagDescription": "Use when the assistant fully resolved the request without handing off.",
      },
  )
  tag = response.json()
  ```

  ```javascript Node.js theme={null}
  const tagId = "0dc53764-a417-4a4f-b7f4-63149529f530";

  const response = await fetch(
    `https://api-prod.usefini.com/v2/tag-groups/${tagId}/tags/public`,
    {
      method: "PUT",
      headers: {
        Authorization: "Bearer fini_your_api_key",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        tagName: "resolved_without_escalation",
        tagDescription:
          "Use when the assistant fully resolved the request without handing off.",
      }),
    }
  );
  const tag = await response.json();
  ```
</RequestExample>

## Response

Returns the updated [`Tag`](/en/api-reference/tags#tag-object).

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "id": "0dc53764-a417-4a4f-b7f4-63149529f530",
    "createdAt": "2026-06-19T07:32:10.000Z",
    "tagGroupId": "f770d0bb-d5ea-44e7-a92a-fcfa2d5a32d5",
    "tagName": "resolved_without_escalation",
    "tagDescription": "Use when the assistant fully resolved the request without handing off."
  }
  ```
</ResponseExample>

<Note>
  Current controller behavior: unknown tag IDs currently surface as `500 Internal Server Error` on this route. Tags in Fini-managed groups are also not part of the supported write contract.
</Note>

## Errors

<AccordionGroup>
  <Accordion title="400 Bad Request" icon="circle-exclamation">
    The body is malformed.
  </Accordion>

  <Accordion title="401 Unauthorized" icon="lock">
    The API key is missing, malformed, revoked, or invalid.
  </Accordion>

  <Accordion title="403 Forbidden" icon="shield-halved">
    The API key does not include the `write` scope required for this route.
  </Accordion>

  <Accordion title="500 Internal Server Error" icon="triangle-exclamation">
    Fini failed while resolving the tag or updating it in storage.
  </Accordion>
</AccordionGroup>
