Skip to main content
POST
Reuses a file already in the Asset Library. Nothing is uploaded. For a new file, use POST /posts/{post}/media or POST /posts/{post}/media/from-url. Owner, Admin, and Member can call this. Viewers get 403. Find IDs with GET /assets. MCP: attach-existing-asset-tool.

Path parameters

string
required
Post UUID. Must belong to this workspace. Otherwise 404.

Body parameters

string
required
Asset UUID from GET /assets. Must be a UUID. Missing, other-workspace, logo, or avatar IDs return 422 on asset_id: Asset not found.
string
Optional image alt text. Max 2000 characters. Ignored for video and PDF.
  • Send a non-empty alt to replace the library alt_text on this attachment.
  • Omit alt, or send null / "", to keep the library item’s existing alt_text.

Behaviour

  • The post must be draft or scheduled.
  • The file type must be allowed by every enabled platform on the post. If no platform is enabled, any type is allowed. Example: a post that only targets TikTok video rejects an image (422 on asset_id: This file type is not supported by the platforms enabled on the post.).
  • Calling again with the same asset_id does nothing: no duplicate, and alt is not updated.
  • The post stores a copy of the library fields (id, path, url, type, mime_type, original_filename, size, and meta when the library had any). If the library meta is empty, the post item has no meta key. The file on disk is shared — the same path as the library item.

Errors

Response

The updated post, same shape as GET /posts/{post}. The library item is now in media[].