---
title: "Create Launch"
method: POST
path: "/v2/launches"
tags: ["v2 - Launches"]
---

# Create Launch

`POST /v2/launches`

## 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`
- Auth: HTTP bearer

Create a new multi-platform launch.

This endpoint allows publishing content to multiple platforms at once.
If `scheduled_for` is provided, the launch will be scheduled for that time.
Otherwise, it will execute immediately.

**Request body:**
- `content_id`: ID of the content to publish
- `platform_config_ids`: List of PlatformConfig IDs to publish to
- `scheduled_for`: (optional) When to publish
- `timezone`: (optional) Timezone for scheduled_for

Access: Must have PUBLISH_EXECUTE permission on the content's workspace.
Agents: Require ``publish:execute`` scope.

## 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

## Request body

- CreateLaunchRequest: Request to create a new launch.
  - `content_id` string, required: ID of the content to publish
  - `platform_config_ids` string[], required: List of PlatformConfig IDs to publish to
  - `title` string, nullable: Title for THIS launch, as typed in the Publish dialog. Stored on the launch and used wherever the launch is displayed. When absent, the content's own title is used. Never written back to the content — publishing does not rename the piece.
  - `first_comment` string, nullable: General first comment for this launch: posted as a comment on the new post on every selected YouTube, LinkedIn and Farcaster platform, and Facebook and Instagram where the workspace's meta_engagement_enabled is true, that has no first comment of its own (a platform's own, in platform_overrides or its config, wins). Refused with 422 when it is over a selected platform's limit; never truncated.
  - `scheduled_for` string, date-time, nullable: When to publish. If None, publishes immediately.
  - `timezone` string, nullable: Timezone for scheduled_for (e.g., 'America/Sao_Paulo')
  - `idempotency_key` string, nullable: Client-provided key to prevent duplicate launches
  - `platform_schedules` object, nullable: Per-platform schedule overrides keyed by PlatformConfig ID. When set, that platform publishes at the given time instead of scheduled_for. Each timestamp must be in the future.
  - `platform_overrides` object, nullable: Per-platform settings overrides keyed by PlatformConfig ID. Each value is merged on top of PlatformConfig.settings (override wins) at publish time. Use to set per-publish YouTube category, Vimeo privacy, TikTok duet flags, etc.

## Response `201`

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)
