Create a custom property
Create an issue property.
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.
type_id:requiredstringThe unique identifier of the work item type.
Body parameters
relation_type:optionalstringWhat a relation property links to:
ISSUE- IssueUSER- User
options:optionalarrayOptions to create when property_type is OPTION. Each option needs a name and can include description, is_default, external_id, and external_source.
display_name:requiredstringThe property's display name.
description:optionalstringThe property's description.
property_type:requiredstringThe type of value the property holds:
TEXT- TextDATETIME- DatetimeDECIMAL- DecimalBOOLEAN- BooleanOPTION- OptionRELATION- RelationURL- URLEMAIL- EmailFILE- FileFORMULA- Formula
is_required:optionalbooleanWhether the property requires a value.
default_value:optionalarrayThe property's default value.
settings:optionalobjectSettings for the property.
is_active:optionalbooleanWhether the property is active.
is_multi:optionalbooleanWhether the property accepts multiple values.
validation_rules:optionalobjectValidation rules for the property's values.
external_source:optionalstringThe system external_id came from, for example github or jira.
external_id:optionalstringYour system's identifier for this record, for sync and import correlation.
formula_config:optionalstringFormula configuration, for FORMULA properties.
Scopes
projects.work_item_properties:write
curl -X POST \
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/work-item-types/type-uuid/work-item-properties/" \
-H "X-API-Key: $PLANE_API_KEY" \
# Or use -H "Authorization: Bearer $PLANE_OAUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Example Name",
"description": "Example description",
"property_type": "OPTION",
"external_id": "550e8400-e29b-41d4-a716-446655440000",
"external_source": "github"
}'import requests
response = requests.post(
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/work-item-types/type-uuid/work-item-properties/",
headers={"X-API-Key": "your-api-key"},
json={
"name": "Example Name",
"description": "Example description",
"property_type": "OPTION",
"external_id": "550e8400-e29b-41d4-a716-446655440000",
"external_source": "github"
}
)
print(response.json())const response = await fetch(
"https://api.plane.so/api/v1/workspaces/my-workspace/projects/project-uuid/work-item-types/type-uuid/work-item-properties/",
{
method: "POST",
headers: {
"X-API-Key": "your-api-key",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Example Name",
description: "Example description",
property_type: "OPTION",
external_id: "550e8400-e29b-41d4-a716-446655440000",
external_source: "github",
}),
},
);
const data = await response.json();{
"id": "550e8400-e29b-41d4-a716-446655440000",
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"name": "Example Name",
"display_name": "Example Name",
"description": "Example description",
"property_type": "TEXT",
"deleted_at": "2024-01-01T00:00:00Z",
"relation_type": "ISSUE",
"logo_props": "example-value",
"sort_order": 1,
"is_required": true
}
