ProductPlan Launches API
Manage launches, checklist sections, and tasks
Manage launches, checklist sections, and tasks
openapi: 3.0.3
info:
title: ProductPlan REST Bars Launches API
description: 'The ProductPlan REST API (v2) provides programmatic access to roadmaps, strategy (objectives and key results), discovery (ideas and opportunities), launch management, users, teams, and account status. It enables synchronization with internal systems and third-party tools such as Jira, GitHub, Slack, and Trello.
'
version: v2
contact:
name: ProductPlan Support
url: https://docs.productplan.com/api/
termsOfService: https://www.productplan.com/terms/
servers:
- url: https://app.productplan.com/api/v2
description: ProductPlan production API
security:
- bearerAuth: []
tags:
- name: Launches
description: Manage launches, checklist sections, and tasks
paths:
/launches:
get:
operationId: listLaunches
summary: List launches
tags:
- Launches
parameters:
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
- $ref: '#/components/parameters/q'
responses:
'200':
description: List of launches
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createLaunch
summary: Create a launch
tags:
- Launches
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchCreate'
responses:
'201':
description: Launch created
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/UnprocessableEntity'
/launches/{id}:
get:
operationId: getLaunch
summary: Retrieve a launch
tags:
- Launches
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: A single launch
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateLaunch
summary: Update a launch
tags:
- Launches
parameters:
- $ref: '#/components/parameters/id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchUpdate'
responses:
'200':
description: Launch updated
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
delete:
operationId: deleteLaunch
summary: Delete a launch
tags:
- Launches
parameters:
- $ref: '#/components/parameters/id'
responses:
'204':
description: Launch deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/launches/{launch_id}/checklist-sections:
get:
operationId: listChecklistSections
summary: List checklist sections for a launch
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
responses:
'200':
description: List of checklist sections
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistSectionList'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
operationId: createChecklistSection
summary: Create a checklist section
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistSectionCreate'
responses:
'201':
description: Section created
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistSectionResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/UnprocessableEntity'
/launches/{launch_id}/checklist-sections/{id}:
get:
operationId: getChecklistSection
summary: Retrieve a checklist section
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/id'
responses:
'200':
description: A single checklist section
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistSectionResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateChecklistSection
summary: Update a checklist section
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistSectionUpdate'
responses:
'200':
description: Section updated
content:
application/json:
schema:
$ref: '#/components/schemas/ChecklistSectionResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
delete:
operationId: deleteChecklistSection
summary: Delete a checklist section
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/id'
responses:
'204':
description: Section deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/launches/{launch_id}/tasks:
get:
operationId: listLaunchTasks
summary: List tasks for a launch
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
responses:
'200':
description: List of tasks
content:
application/json:
schema:
$ref: '#/components/schemas/TaskList'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
operationId: createLaunchTask
summary: Create a task for a launch
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaskCreate'
responses:
'201':
description: Task created
content:
application/json:
schema:
$ref: '#/components/schemas/TaskResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/UnprocessableEntity'
/launches/{launch_id}/tasks/{id}:
get:
operationId: getLaunchTask
summary: Retrieve a launch task
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/id'
responses:
'200':
description: A single task
content:
application/json:
schema:
$ref: '#/components/schemas/TaskResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateLaunchTask
summary: Update a launch task
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaskUpdate'
responses:
'200':
description: Task updated
content:
application/json:
schema:
$ref: '#/components/schemas/TaskResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
delete:
operationId: deleteLaunchTask
summary: Delete a launch task
tags:
- Launches
parameters:
- name: launch_id
in: path
required: true
schema:
type: integer
- $ref: '#/components/parameters/id'
responses:
'204':
description: Task deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
schemas:
LaunchList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Launch'
meta:
$ref: '#/components/schemas/Pagination'
Task:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
completed:
type: boolean
due_date:
type: string
format: date
assignee_id:
type: integer
nullable: true
launch_id:
type: integer
checklist_section_id:
type: integer
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Error:
type: object
properties:
error:
type: string
message:
type: string
errors:
type: array
items:
type: string
ChecklistSection:
type: object
properties:
id:
type: integer
name:
type: string
position:
type: integer
launch_id:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
TaskCreate:
type: object
required:
- name
properties:
name:
type: string
description:
type: string
completed:
type: boolean
default: false
due_date:
type: string
format: date
assignee_id:
type: integer
checklist_section_id:
type: integer
Pagination:
type: object
properties:
current_page:
type: integer
page_size:
type: integer
total_count:
type: integer
total_pages:
type: integer
TaskList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Task'
meta:
$ref: '#/components/schemas/Pagination'
TaskResponse:
type: object
properties:
data:
$ref: '#/components/schemas/Task'
LaunchCreate:
type: object
required:
- name
properties:
name:
type: string
description:
type: string
launch_date:
type: string
format: date
LaunchResponse:
type: object
properties:
data:
$ref: '#/components/schemas/Launch'
ChecklistSectionResponse:
type: object
properties:
data:
$ref: '#/components/schemas/ChecklistSection'
Launch:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
launch_date:
type: string
format: date
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
TaskUpdate:
type: object
properties:
name:
type: string
description:
type: string
completed:
type: boolean
due_date:
type: string
format: date
assignee_id:
type: integer
checklist_section_id:
type: integer
ChecklistSectionList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ChecklistSection'
meta:
$ref: '#/components/schemas/Pagination'
ChecklistSectionUpdate:
type: object
properties:
name:
type: string
position:
type: integer
ChecklistSectionCreate:
type: object
required:
- name
properties:
name:
type: string
position:
type: integer
LaunchUpdate:
type: object
properties:
name:
type: string
description:
type: string
launch_date:
type: string
format: date
responses:
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
UnprocessableEntity:
description: Validation errors
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Invalid authentication credentials
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
id:
name: id
in: path
required: true
schema:
type: integer
description: The unique numeric identifier of the resource
page:
name: page
in: query
schema:
type: integer
default: 1
description: Page number (1-based)
page_size:
name: page_size
in: query
schema:
type: integer
default: 200
maximum: 500
description: Number of results per page (max 500)
q:
name: q
in: query
schema:
type: object
description: 'Filtering and sorting object. Supports attributes such as id, name, description, position, created_at, updated_at depending on resource.
'
style: deepObject
explode: true
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Personal Access Token (64-character hash). Generate in ProductPlan under Settings > Integrations. Include as: Authorization: Bearer <token>
'