Replace an Instagram post
Replaces the whole document: every field left out is reset to its default. PATCH changes only the fields sent. Update an existing Instagram post.
Access: an API key with content:instagram-posts:write (or a master above it: content:instagram-posts:all, content:all, admin:all). In published mode (the default) it goes live too, so the key also needs content:instagram-posts:publish (or a master above it); send aposMode=draft (or a draft _id and no aposMode) to change only the draft. A signed-in person may call it as far as their own permissions allow; anyone else gets 403.
Rate limit: the key’s own writes-per-minute limit, set when the key is created (default 120); over it, 429 with Retry-After.
Authorizations
Path Parameters
Query Parameters
Body
InstagramPost content type
The post image (a first-party media-library image). Used for manual posts and for synced posts when “re-host” storage is on. Falls back to the image URL below when empty. The related @apostrophecms/image documents, in order (empty when none). To set it, send a list of { "_id": "…" }, one per document (one at most); a document the site can’t find is left out.
1The playable clip as a first-party file (a piece from the Videos library). Set by a sync when “re-host” video storage is on; also pickable by hand for a manual post. Takes precedence over the video URL below — and, unlike it, never expires and needs no cookie consent to play. The related video documents, in order (empty when none). To set it, send a list of { "_id": "…" }, one per document (one at most); a document the site can’t find is left out.
1A direct, hot-linked video file URL (set by a sync for video/reel posts under “hot-link” video storage). Played in-place in the on-site lightbox; the still image above is the poster. Instagram CDN video URLs expire quickly (~32h) — the site re-checks freshness and the cron keeps it rotating, and a visitor who has not accepted functional cookies gets the still instead (the file loads from Meta). Re-host the video to avoid both. When set, a URL; empty or null when not.
Response
Success
InstagramPost content type
The post image (a first-party media-library image). Used for manual posts and for synced posts when “re-host” storage is on. Falls back to the image URL below when empty. The related @apostrophecms/image documents, in order (empty when none). To set it, send a list of { "_id": "…" }, one per document (one at most); a document the site can’t find is left out.
1The playable clip as a first-party file (a piece from the Videos library). Set by a sync when “re-host” video storage is on; also pickable by hand for a manual post. Takes precedence over the video URL below — and, unlike it, never expires and needs no cookie consent to play. The related video documents, in order (empty when none). To set it, send a list of { "_id": "…" }, one per document (one at most); a document the site can’t find is left out.
1A direct, hot-linked video file URL (set by a sync for video/reel posts under “hot-link” video storage). Played in-place in the on-site lightbox; the still image above is the poster. Instagram CDN video URLs expire quickly (~32h) — the site re-checks freshness and the cron keeps it rotating, and a visitor who has not accepted functional cookies gets the still instead (the file loads from Meta). Re-host the video to avoid both. When set, a URL; empty or null when not.
Why this post’s clip is still loading from Instagram instead of your own media library. Anything other than the first value means the video expires in ~32h and is hidden from visitors who declined functional cookies. “Too large” is fixable: raise the cap in Connections → Instagram.
, too-large, not-video, failed, null Hidden comments.
The draft’s preview share key, while its share link is on: the link is the draft’s _url with aposShareKey and aposShareId (the draft’s _id) in its query. Absent otherwise, and on published documents.
"k3v9x2m7q1z8w4p6"