---
title: "Schedule a campaign"
method: POST
path: "/v1/calendar/bulk-schedule"
tags: ["Calendar"]
---

# Schedule a campaign

`POST /v1/calendar/bulk-schedule`

## Request

- Base URL: `https://www.postquick.ai/api`
- URL: `https://www.postquick.ai/api/v1/calendar/bulk-schedule`
- Auth: HTTP bearer

Schedule up to 50 existing posts, videos, and stories, including unchanged published posts/stories sent to new destinations in one transaction. Every item must pass ownership, destination, media, and lifecycle checks; if one fails nothing is scheduled. Confirm all destinations and times first.

## Request body

- object
  - `items` object[], required
    - `kind` 'post' | 'video' | 'story', required
    - `id` string, uuid, required
    - `requestKey` string: Stable key for a cross-post delivery. Reuse after a lost response; use a new key after cancellation.
    - `scheduledFor` string, date-time, required
    - `platforms` string[], required

## Response `200`

Successful response.

- object
  - `success` true, required
  - `data` object, required
    - `scheduled` object[], required
      - `id` string, required
      - `kind` string, required
      - `scheduledFor` string, required
      - `deliveryJobId` string

## Other responses

- `400`: Invalid input.
- `404`: Not found or not owned.
- `409`: Content changed or cannot be edited in its current state.

---

[API](https://skmtc.dev/postquick/apis/postquickai-api.md) · [All operations](https://skmtc.dev/postquick/apis/postquickai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/postquick/apis/postquickai-api/revisions/d9bc2bcf3042?raw)
