---
title: "Call item.rename"
method: POST
path: "/api/v1/tools/item.rename"
tags: ["item"]
---

# Call item.rename

`POST /api/v1/tools/item.rename`

## Request

- Base URL: `https://app.goosybear.ai`
- URL: `https://app.goosybear.ai/api/v1/tools/item.rename`
- Auth: HTTP bearer

Rename an image, an uploaded file, a data table, an email, a whole site or app, an automation, a video or short, or a widget on a desk or project — 'name the sunset picture Cover art', 'rename the uploaded price sheet to Pricing 2026', 'the signups table should be called Webinar leads', 'call the first welcome email Your table is ready', 'call this site Harbor Dental Care', 'change the name of the Monday report automation to Weekly Digest', 'retitle the spring promo video Spring Is Here', 'call the leads number Daily leads'. Gives the item the name the member chose, the one its tile, its list and every project it sits in show; an email's name is its subject line, so renaming an email changes the subject its readers see, and an email that is set to send is refused until the member sends it back to draft. Only the name changes: what the item holds, an email's body, a site's address, pages and live site, an automation's steps and whether it is on, a video's script, scenes and renders, and what a widget shows stay as they are; nothing is rebuilt, sent or published, and it can be renamed again. Send `item_id` when a verb or the page showed you the item's id — a site's site_id, an automation's definition_id from `automations.list`, never its board_id, a video's video_unit_id, a widget's id from `widget.list`; otherwise send `current_name`, the member's words for what it is called now (an image with no name yet goes by the words of its prompt, an email by its subject, a video or a widget by its title; a site the member has open needs neither), and call it straight away — when several items match, the answer lists them so you can ask which. Not for a project or board, a course or series included — that is `board.rename` — nor one page inside a site, which is `page.set_page_label`, nor a library item named by a `library.search` id, which is `library.update`, nor what a widget shows, which is `widget.update`.

Every result names the workspace it ran in. Say which workspace the answer is about. When the account has more than one workspace and none is selected, this tool refuses with `workspace_ambiguous` and lists the choices — offer them, never pick one.

## Headers

- `x-request-id` string
- `Idempotency-Key` string, required

## Request body

- object
  - `item_kind` 'image' | 'file' | 'table' | 'email' | 'site' | 'automation' | 'video' | 'widget', required: What the item is: an image, an uploaded file, a data table, an email, a whole site or app, an automation, a video (a short is a video too), or a widget on a desk or project (a chart, a number, a note on a desk, a link, a button).
  - `item_id` string, uuid: The item's id, as a UUID a verb or the page showed you; for an automation, its definition_id; for a widget, its id from `widget.list`. Leave it out when you only have the member's words for it.
  - `current_name` string: The member's words for what the item is called now, when there is no item_id.
  - `name` string, required: The new name, in the member's own words.
  - `idempotency_key` string: Deprecated on REST: send the `Idempotency-Key` header instead. Still accepted until 2026-12-31; if both are sent they must match.
  - `workspace` string: Which workspace to run in — its slug. Omit to use your default. With more than one reachable workspace and no default, the call is refused and the choices are listed.

## Response `200`

The call was admitted and dispatched. `ok` says whether the tool succeeded — a refusal the tool itself produced is still a 200, exactly as it is a successful JSON-RPC result over MCP.

- union
  - object: The tool ran and answered.
    - `ok` true, required
    - `item_kind` 'image' | 'file' | 'table' | 'email' | 'site' | 'automation' | 'video' | 'widget', required
    - `item_id` string, uuid, required
    - `name` string, required
    - `answer_note` string, required
    - `replayed` boolean, required: True when this is the first result of an earlier call with the same idempotency_key, returned without renaming anything again.
    - `workspace` string, required: The slug of the workspace this call ran in.
    - `working_in` object, required: Which workspace this call ran in, and how that was decided. Present on every workspace-scoped result.
      - `label` string, required: The chip words — e.g. "working in: Acme Main".
      - `note` string, required: Why this workspace — e.g. "your default", "this call only".
      - `workspace` string, required: The resolved workspace's slug.
      - `source` 'call-override' | 'key-pin' | 'stored-default' | 'sole-reachable', required: Which rung of the R7 precedence resolved the workspace.
  - ToolRefusal: A call that was admitted and dispatched, and did not succeed.
    - `ok` false, required
    - `code` string, required: The typed reason — e.g. `workspace_ambiguous`, `invalid_arguments`, or the tool's own failure code.
    - `message` string, required: A sentence a person can act on.
    - `workspaces` string[]: On a workspace refusal: the slugs this key may pass as `workspace`.
    - `issues` object[]: On `invalid_arguments`: which fields failed, and why.
      - `path` string, required
      - `message` string, required
    - `path` string: On an authoring refusal: where in your call's input it points, e.g. `steps.<key>.params.<field>`.
    - `fix` string: On an authoring refusal: the change to your call that would pass.
    - `instruction` string: On an authoring refusal: what to do next with it.

## Other responses

- `400`: The request could not be used: the body is present but not a JSON object (`tenant_api.malformed_body`); it is a top-level array carrying more messages than this endpoint accepts (`tenant_mcp.batch_too_large`); or the `Idempotency-Key` header is malformed (`tenant_api.idempotency_key_invalid`), disagrees with the body's `idempotency_key` (`tenant_api.idempotency_key_conflict`), or was sent to an action that cannot replay a retry (`tenant_api.idempotency_unsupported`). Nothing ran.
- `401`: No bearer credential, or one that did not resolve. Deliberately ONE undifferentiated answer for absent / unknown / revoked / expired, so the endpoint is never an oracle over the key space.
- `403`: The credential is good but the surface is not open to it — the platform or account API switch is off, or the holder lacks the `api.access` capability. The `code` says which.
- `404`: No such tool. The body names no tool and is identical for every unrecognised name.
- `429`: Over this key's per-minute cap. Carries `Retry-After` and `error.retry_after_seconds`.

## Changes

- **2026-10-20** `f9b4aeb83edc`: 1 warning, 1 info
  - added the new `widget` enum value to the `oneOf[subschema #1]/item_kind` response property for the response status `200`
  - added the new `widget` enum value to the request property `item_kind`

[Operation history](https://skmtc.dev/goosybear/apis/goosy-bear-api/changes/api/v1/tools/item.rename/post.md)

---

[API](https://skmtc.dev/goosybear/apis/goosy-bear-api.md) · [All operations](https://skmtc.dev/goosybear/apis/goosy-bear-api/llms.txt) · [OpenAPI document](https://skmtc.dev/goosybear/apis/goosy-bear-api/revisions/6d82fb124064?raw)
