Edit, delete and take down posts
Change a post before or after it is published, delete it, or remove it from the platform.
What you can do depends on one question: is the post already live?
| I want to… | Not published yet | Already published |
|---|---|---|
| Change the text | PUT /posts/{id} | POST /posts/{id}/revise |
| Publish it now | POST /posts/{id}/publish | — |
| Remove it from Bulkit only | DELETE /posts/{id} | DELETE /posts/{id} |
| Remove it from the social network | POST /posts/{id}/retract | POST /posts/{id}/retract |
Edit a post that is not published yet
PUT /posts/{id} replaces the whole post. Send the full post every time,
in the same shape as POST /posts.
Any channel you leave out is removed from the post. Get the post first
with GET /posts/{id}, change what you need, then send all of it back.
curl -X PUT "$BULKIT_URL/posts/POST_ID" \
-H "x-api-key: $BULKIT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"intent": "schedule",
"scheduledAt": "2026-10-16T09:00:00Z",
"channels": [
{ "channelId": "CHANNEL_ID", "blocks": [{ "content": "Fixed a typo." }] }
]
}'Fixing a typo does not use up your plan. Only new channels count.
Edit a post that is already live
POST /posts/{id}/revise changes the text on the social network itself.
Rules:
- You can change words only. You cannot add or remove channels or blocks, and you cannot change images or videos.
- Send every channel and every block, in the same order, even the ones you did not change. Unchanged blocks are not sent to the platform.
- Only for posts that are already live. For a scheduled post, use
PUT. - The platform's limits still apply. A text that is too long is refused.
- Not every platform allows edits. Check
limits.remoteEditonGET /platforms(nullmeans no edits), andmanageStatusonGET /channels.
curl -X POST "$BULKIT_URL/posts/POST_ID/revise" \
-H "x-api-key: $BULKIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channels": [
{ "channelId": "CHANNEL_ID", "blocks": [{ "content": "Updated text." }] }
]
}'The response has two lists: revised (changed on the platform) and
unchanged (nothing to change, or the platform said no — reason explains).
Delete a post from Bulkit
curl -X DELETE "$BULKIT_URL/posts/POST_ID" -H "x-api-key: $BULKIT_API_KEY"This removes the post from Bulkit only. If it was already published, it stays live on the social network. If it was scheduled, it will not be published.
Take a post down from the social network
This cannot be undone
Retracting deletes the post on the social network, with its likes, replies and link.
curl -X POST "$BULKIT_URL/posts/POST_ID/retract" -H "x-api-key: $BULKIT_API_KEY"{
"removed": [{ "channelId": "chn_x", "platform": "x", "reason": null }],
"remaining": [
{ "channelId": "chn_ig", "platform": "instagram", "reason": "Instagram does not let apps delete posts." }
]
}removed— gone from the platform and from Bulkit.remaining— still live, with a reason. The post still exists in Bulkit with only these channels. You can call retract again later.
Some platforms do not allow deleting at all. Check limits.supportsRemoteDelete
on GET /platforms and manageStatus on GET /channels before you promise a
user that a post can be removed.