Work Items API
Work items (also known as issues) are the core building blocks of project management in Plane. This API allows you to manage issues, their relationships, comments, attachments, and activities.
Endpoints
List Work Items
Retrieve a list of work items in a project.
Path Parameters
Workspace slug identifier
Query Parameters
Comma-separated fields to expand: assignees, labels, state, cycle, module
Search term to filter work items
Example Request
curl -X GET "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/work-items/?expand=assignees,labels" \
-H "X-Api-Key: your_api_key"
Response
[
{
"id": "650e8400-e29b-41d4-a716-446655440000",
"name": "Fix authentication bug",
"description_html": "<p>Users unable to log in with SSO</p>",
"sequence_id": 42,
"state": "450e8400-e29b-41d4-a716-446655440000",
"priority": "high",
"assignees": [
{
"id": "350e8400-e29b-41d4-a716-446655440000",
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
"avatar_url": "https://example.com/avatar.jpg"
}
],
"labels": [
{
"id": "250e8400-e29b-41d4-a716-446655440000",
"name": "bug",
"color": "#FF0000"
}
],
"start_date": "2024-03-01",
"target_date": "2024-03-15",
"project_id": "550e8400-e29b-41d4-a716-446655440000",
"workspace_id": "750e8400-e29b-41d4-a716-446655440000",
"created_by": "350e8400-e29b-41d4-a716-446655440000",
"created_at": "2024-03-01T10:00:00Z",
"updated_at": "2024-03-09T14:30:00Z"
}
]
Create Work Item
Create a new work item in a project.
Path Parameters
Workspace slug identifier
Request Body
HTML-formatted description (sanitized for security)
Binary description data (validated)
State ID (must belong to the project)
Priority level: urgent, high, medium, low, none
Array of user IDs to assign (must be project members with role ≥ 15)
Array of label IDs (must belong to the project)
Start date (YYYY-MM-DD). Cannot exceed target_date
Target/due date (YYYY-MM-DD)
Parent issue ID for sub-issues
Estimate point ID for story points
Issue type ID (defaults to project’s default type)
External integration source identifier
External system identifier for tracking
Example Request
curl -X POST "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/work-items/" \
-H "X-Api-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Implement user authentication",
"description_html": "<p>Add OAuth 2.0 authentication flow</p>",
"state": "450e8400-e29b-41d4-a716-446655440000",
"priority": "high",
"assignees": ["350e8400-e29b-41d4-a716-446655440000"],
"labels": ["250e8400-e29b-41d4-a716-446655440000"],
"start_date": "2024-03-10",
"target_date": "2024-03-20"
}'
Response
{
"id": "650e8400-e29b-41d4-a716-446655440000",
"name": "Implement user authentication",
"description_html": "<p>Add OAuth 2.0 authentication flow</p>",
"sequence_id": 43,
"state": "450e8400-e29b-41d4-a716-446655440000",
"priority": "high",
"assignees": ["350e8400-e29b-41d4-a716-446655440000"],
"labels": ["250e8400-e29b-41d4-a716-446655440000"],
"start_date": "2024-03-10",
"target_date": "2024-03-20",
"project_id": "550e8400-e29b-41d4-a716-446655440000",
"workspace_id": "750e8400-e29b-41d4-a716-446655440000",
"created_at": "2024-03-09T15:00:00Z",
"updated_at": "2024-03-09T15:00:00Z"
}
Get Work Item
Retrieve a specific work item by ID.
Path Parameters
Workspace slug identifier
Example Request
curl -X GET "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/work-items/650e8400-e29b-41d4-a716-446655440000/" \
-H "X-Api-Key: your_api_key"
Update Work Item
Update a work item’s properties.
Request Body
All fields from the create endpoint are supported. Only include fields you want to update.
Example Request
curl -X PATCH "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/work-items/650e8400-e29b-41d4-a716-446655440000/" \
-H "X-Api-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"state": "850e8400-e29b-41d4-a716-446655440000",
"priority": "urgent"
}'
Delete Work Item
Delete a work item.
Example Request
curl -X DELETE "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/work-items/650e8400-e29b-41d4-a716-446655440000/" \
-H "X-Api-Key: your_api_key"
Request Body
HTML-formatted comment (sanitized)
JSON representation of comment
Access level: internal, external
Example Request
curl -X POST "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/work-items/650e8400-e29b-41d4-a716-446655440000/comments/" \
-H "X-Api-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"comment_html": "<p>This looks good to me!</p>",
"access": "internal"
}'
Work Item Links
Create Link
Request Body
Example Request
curl -X POST "https://api.plane.so/api/v1/workspaces/acme/projects/550e8400-e29b-41d4-a716-446655440000/work-items/650e8400-e29b-41d4-a716-446655440000/links/" \
-H "X-Api-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Design mockups",
"url": "https://figma.com/file/abc123"
}'
Work Item Attachments
Upload Attachment
Request Body
File size in bytes (max: 5MB by default)
Work Item Activities
List Activities
Retrieve the activity history for a work item.
Search Work Items
Search for work items across a workspace.
Query Parameters
Filter by specific project
Example Request
curl -X GET "https://api.plane.so/api/v1/workspaces/acme/work-items/search/?q=authentication" \
-H "X-Api-Key: your_api_key"
Get Work Item by Identifier
Retrieve a work item using the human-readable identifier (e.g., PROJ-42).
Example Request
curl -X GET "https://api.plane.so/api/v1/workspaces/acme/work-items/ACME-42/" \
-H "X-Api-Key: your_api_key"
Validation Rules
- HTML Content: All HTML fields are sanitized for XSS prevention
- Date Range:
start_date cannot exceed target_date
- Assignees: Must be active project members with role ≥ 15
- Labels: Must belong to the same project
- State: Must belong to the same project
- Parent: Must be an issue in the same project and workspace
- Estimate Point: Must belong to the same project and workspace
Error Responses
Validation Error
{
"error": "Start date cannot exceed target date"
}
Invalid HTML
{
"error": "html content is not valid"
}
Invalid State
{
"error": "State is not valid please pass a valid state_id"
}