Skip to content

Create a property option ​

POST/api/v2/workspaces/{slug}/projects/{project_id}/work-item-properties/{property_id}/options/

Add one more selectable choice to a project-level property whose property_type is OPTION. The new option becomes immediately pickable on work items that carry the property.

Use this when the property already exists and you are extending its list. If you are still creating the property, you can pass the full set of choices inline through the property's write-only options field instead — see Work item properties — and come back here only for later changes.

Path Parameters ​

slug:requiredstring

The workspace slug. It appears in your Plane URLs — in https://app.plane.so/my-team/projects/, the slug is my-team.

project_id:requiredstring (uuid)

The project that owns the property.

property_id:requiredstring (uuid)

The property to add the option to. It must be an OPTION property in this project — a property id from another project returns 404.

Body Parameters ​

name:requiredstring

The label shown in the picker, for example Blocker. Maximum 255 characters.

description:optionalstring

Free-form explanation of what the option means. Worth filling in when the label alone doesn't tell someone when to choose it.

is_default:optionalboolean

Make this the option that is preselected when a work item is created without an explicit value for this property. Defaults to false.

external_id:optionalstring

Your system's identifier for this option, for sync and import correlation. Maximum 255 characters. Nullable.

external_source:optionalstring

The system external_id came from, for example github or jira. Maximum 255 characters. Nullable. Send it alongside external_id — an external_id is only unique within its source.

sort_order is not writable

sort_order comes back on every read, but it is not a create field. Plane assigns the new option a position when it is created; there is no body parameter that places it.

Scopes ​

projects.work_item_properties:write

Errors ​

StatusCodeCause
400invalid_requestname missing, or a field over its 255-character limit.
401unauthorizedMissing or invalid credentials.
402payment_requiredThe feature this endpoint belongs to isn't enabled on your plan, or is switched off.
403forbiddenYour role or token scope can't write this project's properties.
404not_foundNo such property, project, or workspace — or the property belongs to a different project.
406not_acceptableThe Accept header asks for a representation the API can't produce.
409conflictThe workspace manages work item types at the workspace level, so this project-level write is rejected.
413payload_too_largeThe request body is over the size limit.
415unsupported_media_typeThe Content-Type isn't one this endpoint accepts.
429rate_limitedThrottled. Honor the Retry-After header before retrying.

Wrong mode is a 409, not a 404

A workspace manages work item types in exactly one mode. If yours is in workspace mode, this project-level POST returns 409 work_item_types_managed_at_workspace — the option isn't missing and you aren't unauthorized, the write simply belongs on the workspace surface. Create it through Property options (workspace) instead, and see Work item type modes for how to detect the mode first.

Create a property option
bash
curl -X POST \
  "https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-item-properties/c1a7f2d8-6b34-4e59-9f80-2d4a7c31e6b5/options/" \
  -H "X-Api-Key: $PLANE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Blocker",
  "description": "Stops all downstream work",
  "is_default": false
}'
Response201
json
{
  "id": "6f0c8a24-51d7-4e93-bb62-0a7e5c1d9483",
  "name": "Blocker",
  "description": "Stops all downstream work",
  "is_default": false,
  "sort_order": 45000,
  "external_id": null,
  "external_source": null
}
Response409
json
{
  "type": "conflict",
  "code": "work_item_types_managed_at_workspace",
  "detail": "Work item types are managed at the workspace level for this workspace."
}