Get work item type schema
Get the complete schema for a work item type: all standard fields, plus custom properties with their available options inline. LLMs and MCP integrations use it to find out which fields are available when they create or update work items.
The schema always includes these standard fields:
name,description_html,priority,state_id,assignee_ids,label_ids,start_date,target_date,parent_id
It includes custom fields when both of these are true:
- The
ISSUE_TYPESfeature is enabled. - A
type_idis provided, or the project has a default type.
Field options are included as follows:
state_idandpriorityoptions are always included.assignee_idsandlabel_idsoptions require?include=members,labels.estimate_point_idoptions are included when the project has estimates configured.
Path parameters
project_id:requiredstringThe unique identifier of the project.
workspace_slug:requiredstringThe workspace slug. It appears in your Plane URLs. In https://app.plane.so/my-team/projects/, the slug is my-team.
Query parameters
include:optionalstringComma-separated list of additional options to include: members, labels.
type_id:optionalstringWork item type ID. If you omit it, the response contains the default type's schema when work item types are enabled, or only the standard fields otherwise.
Scopes
projects.work_item_types:read
curl -X GET \
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/work-item-types/schema/?include=members&type_id=type-uuid" \
-H "X-API-Key: $PLANE_API_KEY" \
# Or use -H "Authorization: Bearer $PLANE_OAUTH_TOKEN"import requests
response = requests.get(
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/work-item-types/schema/?include=members&type_id=type-uuid",
headers={"X-API-Key": "your-api-key"}
)
print(response.json())const response = await fetch(
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/work-item-types/schema/?include=members&type_id=type-uuid",
{
method: "GET",
headers: {
"X-API-Key": "your-api-key",
},
},
);
const data = await response.json();{
"type_id": "550e8400-e29b-41d4-a716-446655440000",
"type_name": "Bug",
"type_description": "Example description",
"type_logo_props": {},
"fields": {
"name": {
"type": "string",
"required": true,
"max_length": 255
},
"priority": {
"type": "option",
"required": false,
"options": [
{
"value": "urgent",
"label": "Urgent"
},
{
"value": "high",
"label": "High"
}
]
},
"state_id": {
"type": "uuid",
"required": false,
"options": [
{
"id": "...",
"name": "Example Name",
"group": "backlog"
}
]
}
},
"custom_fields": {
"custom_field_severity": {
"id": "...",
"type": "OPTION",
"name": "Example Name",
"display_name": "Example Name",
"required": true,
"is_multi": false,
"options": [
{
"id": "...",
"name": "Example Name"
}
]
}
}
}
