# POST /v1/scheduled-posts/:scheduledPostId/reschedule (/docs/api/reference/publishing/reschedule-post)



<Endpoint method="POST" path="/v1/scheduled-posts/:scheduledPostId/reschedule" auth="Bearer" scope="publish:write" phase="1" />

Move a queued post to a different time. Only posts in `status: queued` are reschedulable - once a post is `publishing` or terminal, reschedule returns `409 CONFLICT`.

Captions and targets are immutable after scheduling. To change those, [cancel](/docs/api/reference/publishing/cancel-post) and re-schedule from the container.

<Parameters
  title="Path"
  rows="[
  { name: 'scheduledPostId', type: 'string', required: true, description: 'Id returned by schedule or publish.' },
]"
/>

<Parameters
  title="Body"
  rows="[
  { name: 'scheduledFor', type: 'string (ISO 8601, UTC Z)', required: true, description: 'New publish time. **Must be in the future** — a ~30s clock-skew tolerance applies, but anything further in the past returns `422 VALIDATION` with `details.issues[0].path = &#x22;scheduledFor&#x22;`. To publish a queued post immediately, [cancel](/docs/api/reference/publishing/cancel-post) it and re-issue via [`POST /v1/content/:id/publish`](/docs/api/reference/publishing/publish-content) instead — the `/reschedule` endpoint is for moving the time of a pre-publish row, not for converting it to publish-now.' },
]"
/>

<Callout type="warn">
  **Time zones.** `scheduledFor` is interpreted as a literal UTC instant, regardless of the project's `timezone` field. The project's `timezone` controls cron-driven managed-distribution slot generation; it does **NOT** shift partner-supplied `scheduledFor` values. To reschedule to "9am next Monday in the user's local timezone," convert in your application code first (e.g. `new Date("2026-05-25T09:00:00-04:00").toISOString()` → `"2026-05-25T13:00:00Z"`). Response timestamps (`scheduledFor`, `updatedAt`) are likewise always UTC with the `Z` suffix.
</Callout>

## Example request [#example-request]

<Tabs items="['curl', 'TypeScript', 'Python']">
  <Tab value="curl">
    ```bash
    curl -X POST https://api.layers.com/v1/scheduled-posts/sp_4c8e7d2f-9a1b-4c3d-8e7f-2a1b3c4d5e60/reschedule \
      -H "Authorization: Bearer lp_..." \
      -H "Content-Type: application/json" \
      -d '{ "scheduledFor": "2026-04-19T18:00:00Z" }'
    ```
  </Tab>

  <Tab value="TypeScript">
    ```ts
    const post = await layers.publishing.reschedule({
      id: "sp_4c8e7d2f-9a1b-4c3d-8e7f-2a1b3c4d5e60",
      scheduledFor: "2026-04-19T18:00:00Z",
    });
    ```
  </Tab>

  <Tab value="Python">
    ```python
    post = layers.publishing.reschedule(
        id="sp_4c8e7d2f-9a1b-4c3d-8e7f-2a1b3c4d5e60",
        scheduled_for="2026-04-19T18:00:00Z",
    )
    ```
  </Tab>
</Tabs>

## Response [#response]

<Response status="200" description="Rescheduled">
  ```json
  {
    "id": "sp_4c8e7d2f-9a1b-4c3d-8e7f-2a1b3c4d5e60",
    "status": "queued",
    "scheduledFor": "2026-04-19T18:00:00Z",
    "updatedAt": "2026-04-18T19:21:08Z"
  }
  ```
</Response>

## Errors [#errors]

| Status | Code              | When                                                                                                                           |
| ------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| 422    | `VALIDATION`      | `scheduledFor` is malformed or in the past (\~30s clock-skew tolerance applies). `details.issues[0].path` is `"scheduledFor"`. |
| 401    | `UNAUTHENTICATED` | Missing or invalid key.                                                                                                        |
| 403    | `FORBIDDEN_SCOPE` | Key lacks `publish:write`.                                                                                                     |
| 404    | `NOT_FOUND`       | Post not in your organization.                                                                                                 |
| 409    | `CONFLICT`        | Post is `publishing` or terminal - not reschedulable.                                                                          |

## See also [#see-also]

* [`DELETE /v1/scheduled-posts/:id`](/docs/api/reference/publishing/cancel-post) - cancel instead
* [`POST /v1/content/:id/schedule`](/docs/api/reference/publishing/schedule-content) - re-schedule from the container if you need to change captions or targets
