> ## 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.

# Add images to a post

> Three upload paths, and which to reach for.

Images are uploaded to the studio first, then attached to a post. Pick the path
that matches your client.

## When a human is around

Hand them a browser link:

```text theme={null}
Give me an upload link for that draft so I can add the screenshots.
```

`create_upload_session` returns a URL valid for 30 minutes. They open it, drop in
files of any size, and the files attach themselves to the post. Then:

```text theme={null}
Show me the post again.
```

`get_post` lists the attached assets.

## When the client can make HTTP requests

```text theme={null}
Attach cover.png to the draft.
```

The assistant runs three steps:

<Steps>
  <Step title="Request an upload URL">
    `request_asset_upload` with `kind: "image"` and `mimeType: "image/png"`
    returns `{ assetId, uploadUrl, expiresAt }` — the URL is good for 10 minutes.
  </Step>

  <Step title="PUT the bytes">
    ```bash theme={null}
    curl -X PUT --data-binary @cover.png "$uploadUrl"
    ```
  </Step>

  <Step title="Attach">
    `attach_asset` with the `postId` and `assetId`. This confirms the bytes
    landed and enforces size and count limits.
  </Step>
</Steps>

## When it can't

`upload_asset_inline` takes base64 bytes directly in the tool call — no HTTP
needed. It is capped at 5 MB decoded; anything larger returns
`inline_too_large_use_presign`. Follow it with `attach_asset` as above.

## Limits worth knowing

| Constraint        | Value                 |
| ----------------- | --------------------- |
| Image types       | JPEG, PNG, GIF        |
| Max image size    | 10 MB                 |
| Images per post   | 9 on LinkedIn, 4 on X |
| Inline upload cap | 5 MB                  |

<Note>
  Video and documents can be uploaded and attached, but publishing them isn't
  wired up yet — a post carrying one fails with
  `publishing_video_not_supported_yet`. Detach it to publish the text and images.
</Note>

## Removing one

```text theme={null}
Drop the second image from that post.
```

`detach_asset` unlinks it while keeping the stored file, so it can go on a
different post later.
