> ## Documentation index
> Fetch the complete documentation index at: https://dash.robopost.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Edit and delete posts

Change a post with `PATCH`, remove it with `DELETE`. Both answer with the post as it is afterwards, so you
can check the result in the same call.

**You need:** the post's `id`, and ideally its `revision` from your last read (the `ETag` header).

## Change or reschedule a post

Send only the fields that change:

```bash
curl -X PATCH https://public-api.robopost.app/v1/scheduled_posts/8c1f2a40-… \
  -H "Authorization: Bearer $ROBOPOST_API_KEY" \
  -H "Content-Type: application/json" \
  -H 'If-Match: "4"' \
  -d '{"text": "New caption", "schedule_at": "2026-11-21T09:00:00Z"}'
```

You can change `text`, `schedule_at`, `first_comment`, `made_with_ai`, the media (`image_object_ids`,
`video_object_id`, `gif_object_id`), any network's settings object (it replaces that network's settings),
and the recurrence fields. Unknown fields are refused with `422`, so a typo never passes silently. The
channel can't change: delete the post and create it on the other channel.

## Don't overwrite someone else's change

With `If-Match: "<revision>"`, the change is applied only if nobody changed the post since you read it.
Otherwise you get `412 REVISION_MISMATCH` with `current_revision`: read the post again, decide, retry.
Without `If-Match` a change made at the same moment still never gets silently overwritten: you get `409`.

## Unschedule (cancel) a post

```json
{ "status": "draft" }
```

The post becomes a draft: it won't publish, and stays in the team's drafts. Schedule it again later with
`{"status": "scheduled"}` (and a new `schedule_at` if you like). A draft created for several channels at
once can't be scheduled this way: create the posts with `POST /v1/scheduled_posts` instead.

## Retry a failed post

```json
{ "status": "scheduled", "schedule_at": "2026-11-21T09:00:00Z" }
```

This clears the previous error and schedules the same post again, including failed posts the dashboard
already hides. Fix the cause first: `failure.action` says what to do. A post that failed with
`X_DELIVERY_UNCERTAIN` or timed out while publishing is refused with `409 RETRY_COULD_DUPLICATE`, because
the network may already show it; check the channel and create a new post only if it isn't there.

## When a post can't be changed

| Code | Why |
| --- | --- |
| `POST_IS_PUBLISHING` | It's being published right now |
| `POST_ALREADY_PUBLISHED` | It's live; editing here wouldn't change it on the network |
| `MEDIA_NOT_READY` | Its media is still being prepared |
| `POST_DELETED` | It was removed |
| `POST_IN_COLLECTION` | Collection posts are published by their collection |

## Delete a post

```bash
curl -X DELETE https://public-api.robopost.app/v1/scheduled_posts/8c1f2a40-… \
  -H "Authorization: Bearer $ROBOPOST_API_KEY"
```

The post is removed from Robopost: it won't publish and disappears from the dashboard. It stays readable
through the API with `is_deleted: true`, `deletion_reason: "deleted_via_api"`, `deleted_by` and
`deleted_at`. Deleting it again is harmless and returns the same record. A post that is publishing right
now can't be deleted (`409 POST_IS_PUBLISHING`); wait until it's published or failed.

## Delete a published post on the network too

Removing a post from Robopost doesn't remove it from the network. To do both, add `delete_on_platform=true`:

```bash
curl -X DELETE "https://public-api.robopost.app/v1/scheduled_posts/8c1f2a40-…?delete_on_platform=true" \
  -H "Authorization: Bearer $ROBOPOST_API_KEY"
```

The network deletion runs in the background. Read the post again to see `platform_deletion`:

| `platform_deletion.status` | Meaning |
| --- | --- |
| `requested` | Sent to the network, waiting for its answer |
| `deleted` | The network deleted it (`completed_at` says when) |
| `failed` | The network refused or the channel is disconnected (`detail` says which) |
| `not_supported` | The network doesn't let apps delete posts (Instagram, TikTok, Facebook Groups, WordPress.com) |
| `not_published` | There was nothing on the network to delete |

## Next

[Idempotency](https://dash.robopost.app/docs/api/idempotency.md)
