---
title: "Reschedule Launch"
method: PATCH
path: "/v2/launches/{launch_id}/reschedule"
tags: ["v2 - Launches"]
---

# Reschedule Launch

`PATCH /v2/launches/{launch_id}/reschedule`

## Request

- Base URL: `https://api.jubjubapp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.jubjubapp.com/v2/launches/{launch_id}/reschedule`
- Auth: HTTP bearer

Move a launch that has not started to a new time.

Works for pending, scheduled and awaiting_approval launches. The queued
Cloud Task(s) for the old time are cancelled first (until 2026-09-30 this
route only rewrote the field, so the old task still fired). A launch that
carried the workspace owner's approval is re-parked for a fresh one — the
time is part of what was approved; one waiting for approval keeps waiting
with the new time recorded. Anything else is re-queued for the new time.

Access: Must have PUBLISH_SCHEDULE permission on the launch's workspace.
Agents: Require ``publish:schedule`` scope.

## Path parameters

- `launch_id` string, required

## Query parameters

- `scheduled_for` string, date-time, required
- `timezone` string, nullable

## Headers

- `Authorization` string
- `X-JubJub-Service-Key` string
- `X-JubJub-Agent-Key` string
- `X-JubJub-Platform-Key` string
- `Origin` string
- `Referer` string
- `X-JubJub-Trial-Token` string

## Response `200`

Successful Response

- LaunchResponse: Response for a launch.
  - `launch_id` string, required: Unique launch identifier
  - `content_id` string, required: ID of the content being published
  - `content_title` string, nullable: Title of the content
  - `content_thumbnail_url` string, nullable: Thumbnail URL of the content
  - `workspace_id` string, required: Workspace ID
  - `created_by` string, nullable: Creator's profile ID: only the caller's own (or for a platform admin)
  - `created_by_you` boolean: Whether the caller created this launch
  - `creator` PublicPerson: A person by public profile. Never an ID, never an email.
    - `member_ref` string, nullable
    - `display_name` string, required
    - `avatar_url` string, nullable
    - `handle` string, nullable
    - `is_you` boolean
    - `role` string, nullable
    - `via_team` string, nullable
  - `status` string, required: Overall status: pending, awaiting_approval, scheduled, in_progress, completed, partial_failure, failed, cancelled, handed_over (sent to the creator's own editor to post; JubJub published nothing), unknown (stored value unrecognised; never executed)
  - `platforms` PlatformLaunchResponse[], required: Status per platform
    - `platform` string, required: Platform type (youtube, instagram, etc.)
    - `config_id` string, required: PlatformConfig ID
    - `credential_name` string, nullable: Name of the credential/account used
    - `status` string, required: Status: pending, in_progress, success, failed, skipped, handed_over (given to the creator's editor on that platform, not published), sent_to_ad_library (Meta Ads: the media is in the ad account's library; promotion, not published), unknown (stored value unrecognised; never published)
    - `published_url` string, nullable: URL of published content
    - `published_id` string, nullable: ID on the platform
    - `error` string, nullable: Error message if failed
    - `error_code` string, nullable: Machine-readable reason this platform failed or was not sent: SHARE_REVOKED, MEMBER_REMOVED, ROLE_NOT_PERMITTED, CONNECTION_MISSING, NOT_PERMITTED, MEDIA_TYPE_UNSUPPORTED, UNKNOWN_OUTCOME, or an adapter's own code. docs/dashboard-contract-2026-10.md lists them.
    - `started_at` string, date-time, nullable: When publishing started
    - `completed_at` string, date-time, nullable: When publishing completed
    - `first_comment` object, nullable: Outcome of the optional first comment posted after publish: {status: posted|failed|skipped, comment_id, error, at}. Null when none was asked for. A failed comment never fails the publish.
  - `error_code` string, nullable: Why the launch as a whole is waiting or stopped: AWAITING_OWNER_APPROVAL (a shared account's owner must approve), AWAITING_WORKSPACE_APPROVAL (the workspace owner must release it), APPROVAL_REJECTED, MEMBER_REMOVED (cancelled: its launcher left the team), or the one code every failed platform shares. Null otherwise.
  - `scheduled_for` string, date-time, nullable: Scheduled publish time
  - `timezone` string, nullable: Timezone for scheduled_for
  - `platform_schedules` object, nullable: Per-platform schedule overrides keyed by config_id
  - `platform_overrides` object, nullable: Per-platform settings overrides keyed by config_id
  - `first_comment` string, nullable: General first comment for this launch (per-platform ones win)
  - `first_comment_notice` string, nullable: Where the general first comment is NOT being posted, and why, in one line (e.g. 'Instagram first comments are coming soon, so this one was not posted on Instagram.'). Null when it goes everywhere it was sent. Tell the user: the launch still publishes, only the comment stops.
  - `created_at` string, date-time, required: When launch was created
  - `updated_at` string, date-time, nullable: Last update time
  - `completed_at` string, date-time, nullable: When launch completed
  - `sent_to_ad_library_count` integer: Legs sent to a Meta ad account's media library (not published; not in successful_count)
  - `notices` string[]: Plain sentences about this request, e.g. that Meta Ads campaign settings were ignored
  - `total_platforms` integer, required: Total number of platforms
  - `successful_count` integer, required: Number of successful platforms
  - `failed_count` integer, required: Number of failed platforms
  - `approvals` LaunchApprovalSummary[]
    - `approval_id` string, required
    - `policy_source` string, required: workspace_owner | channel_ownership | meta_ads_activation
    - `status` string, required
    - `platform` string, nullable: '*' for a workspace_owner approval
    - `credential_name` string, nullable
    - `approver` PublicPerson: A person by public profile. Never an ID, never an email.
      - `member_ref` string, nullable
      - `display_name` string, required
      - `avatar_url` string, nullable
      - `handle` string, nullable
      - `is_you` boolean
      - `role` string, nullable
      - `via_team` string, nullable
    - `is_approver` boolean: Whether the caller may decide it
    - `decided_at` string, nullable
    - `resolution_note` string, nullable
  - `sent_now` boolean

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/jubjubapp/apis/jubjub-api.md) - [All operations](https://skmtc.dev/jubjubapp/apis/jubjub-api/llms.txt) - [OpenAPI document](https://skmtc.dev/jubjubapp/apis/jubjub-api/revisions/353157b296f2?raw)
