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 yetAlready published
Change the textPUT /posts/{id}POST /posts/{id}/revise
Publish it nowPOST /posts/{id}/publish—
Remove it from Bulkit onlyDELETE /posts/{id}DELETE /posts/{id}
Remove it from the social networkPOST /posts/{id}/retractPOST /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.remoteEdit on GET /platforms (null means no edits), and manageStatus on GET /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"
Response
{
  "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.

On this page