---
title: "List Launches"
method: GET
path: "/v2/launches"
tags: ["v2 - Launches"]
---

# List Launches

`GET /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

List launches with optional filters.

Filter by workspace, content, or status.

Access: Must have CONTENT_VIEW permission on the workspace/content.

## Query parameters

- `workspace_id` string, nullable: Filter by workspace
- `content_id` string, nullable: Filter by content
- `status` string, nullable: Filter by status
- `limit` integer
- `offset` integer

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

- LaunchListResponse: Response for listing launches.
  - `launches` LaunchResponse[], required: List of launches
    - `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
  - `total` integer, required: Total count (for pagination)
  - `limit` integer, required: Requested limit
  - `offset` integer, required: Requested offset
  - `published_total` integer: Launches in the same scope that are not handovers (Send to editor) and not ads only (a Meta ad created paused is not a publish), ignoring the status filter and the page. Answers 'has anything gone out' without reading every page.

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