> ## Documentation Index
> Fetch the complete documentation index at: https://grow-hub.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Error reference

> The tool-error messages Studio returns and what to do about each.

Failed tool calls come back as MCP tool errors (`isError: true`) whose text is a
short, stable message. They are not exceptions — the call completes, and the
message tells you what to do next.

## Posts

| Message                      | Meaning                        | Fix                                   |
| ---------------------------- | ------------------------------ | ------------------------------------- |
| `not_found`                  | No such post in this studio    | Check the id; ids don't cross studios |
| `cannot_edit_scheduled_post` | Retargeting a scheduled post   | `unschedule_post` first               |
| `cannot_edit_posted_post`    | Editing something already live | Create a new draft                    |
| `post_modified_concurrently` | The row changed mid-update     | Re-read with `get_post` and retry     |
| `dispatch_in_progress`       | Deleting a `queued` post       | Wait for it to settle                 |

## Publishing and scheduling

| Message                                        | Meaning                              | Fix                                         |
| ---------------------------------------------- | ------------------------------------ | ------------------------------------------- |
| `only_draft_can_be_published`                  | Post isn't a draft                   | Check `status` first                        |
| `specify_platform`                             | Post targets several platforms       | Pass `platform`                             |
| `post_does_not_target_x`                       | Requested platform isn't a target    | Update `targetPlatforms` or pick another    |
| `content exceeds 3000 characters for linkedin` | Body over the platform limit         | Shorten the content                         |
| `not_connected`                                | Platform isn't linked to this studio | `connect_platform`                          |
| `token_expired`                                | Stored token can't be refreshed      | Reconnect the platform                      |
| `scheduled_at_must_be_future`                  | Timestamp is past or unparseable     | Send ISO 8601 with an offset, in the future |
| `cannot_schedule_posted_post`                  | Post is already live                 | Create a new draft                          |

## Assets

| Message                              | Meaning                               | Fix                                   |
| ------------------------------------ | ------------------------------------- | ------------------------------------- |
| `mime_not_allowed: image/webp`       | MIME type isn't allowed for the kind  | Convert to an allowed type            |
| `unsupported_kind`                   | Unknown asset kind                    | Use `image`, `video`, or `document`   |
| `inline_too_large_use_presign`       | Inline upload over 5 MB               | Use `request_asset_upload`            |
| `too_large`                          | File over the kind's ceiling          | Compress, or split the post           |
| `bytes_missing`                      | Attaching before the `PUT` finished   | Upload the bytes, then attach         |
| `too_many_images`                    | More images than the platform allows  | Detach some (9 LinkedIn, 4 X)         |
| `asset_not_found` / `post_not_found` | Wrong id, or another studio's         | Re-check the ids                      |
| `publishing_video_not_supported_yet` | Video/document publishing isn't wired | Detach it, or publish text and images |

## Access

| Message                | Meaning                       | Fix                          |
| ---------------------- | ----------------------------- | ---------------------------- |
| `forbidden`            | Tool needs `owner` or `admin` | Ask a studio admin to run it |
| `unauthorized`         | No valid session              | Reconnect the MCP server     |
| `No studio membership` | The user belongs to no studio | Sign in to the web app once  |

## Platform errors

When a platform rejects the post, its message is passed through:

* **Permanent** (platform 4xx that isn't a rate limit) — the post is not
  published, and a scheduled post is marked `failed` without retrying.
* **Transient** (429 and 5xx) — a scheduled post retries with exponential backoff
  up to 5 attempts before failing.

For a failed post, read `failureReason` — it is prefixed with the platform, e.g.
`linkedin: …`.
