Skip to content

List property contexts ​

GET/api/v2/workspaces/{slug}/work-item-properties/{property_id}/contexts/

Return every context defined on a workspace-level property, as a paginated list. Use it to see where a property applies and how it behaves in each place before you add a new context or edit an existing one.

Read the whole list rather than a single context when you need to reason about precedence: a context's effect depends on which other contexts exist. Contexts are returned in sort_order by default.

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.

property_id:requiredstring (uuid)

The workspace-level property whose contexts you want. A project-level property id is not addressable here and returns 404 not_found.

Query parameters ​

Check the spelling of order_by and paginate. Neither is validated, so a misspelled value fails silently. An unrecognized order_by value falls back to the default ordering, and anything other than paginate=cursor uses offset pagination. A typo shows up as an unexpected sort order or envelope, not as an error.

Ordering ​

order_by:optionalstring

Field to sort by. Prefix with - for descending.

  • sort_order , -sort_order: the property's own context order. This is the default.
  • created_at , -created_at: when each context was added
  • id , -id

Pagination ​

per_page:optionalinteger

Page size. Defaults to 50, maximum 200. A property usually has a handful of contexts, so one page is normally the whole set.

offset:optionalinteger

Number of rows to skip from the start of the result set. Maximum 10000. Use the next value from the response instead of computing offsets yourself.

paginate:optionalstring

Set to cursor to switch to the keyset envelope, which skips the COUNT query and returns next_cursor and has_more instead of next and total_count. Pair it with order_by=created_at or order_by=id. The default sort_order ordering isn't unique, so it can't be used with a cursor, and the request is rejected with ordering_not_cursor_eligible.

count:optionalboolean

Defaults to true. Set to false to skip the COUNT(*) behind total_count. The field is then omitted from the response.

Response shaping ​

fields:optionalstring

Comma-separated list of fields to return on each row. Fields you don't request are left out of the response instead of coming back as null, so a missing key means you didn't ask for it and null means the value is null. id is always included, whether or not you name it.

Pass all to get every requestable field. An unknown field name returns 400 with the list of valid names and the closest match, so a typo is caught instead of being silently ignored.

Requestable here: applies_to_all_projects, applies_to_all_work_item_types, created_at, default_value, external_id, external_source, id, is_default, is_multi, is_required, issue_type_ids, name, options, project_ids, settings, sort_order, updated_at, updated_by_id.

See Sparse fields.

Scopes ​

workspaces.work_item_properties:read

Errors ​

StatusCodeCause
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 read workspace property settings.
404not_foundNo such workspace or property, or it's outside your tenant.
406not_acceptableThe Accept header asks for a representation the API can't produce.
429rate_limitedThrottled. Honor the Retry-After header before retrying.

Reads work in either mode

Listing contexts does not depend on how the workspace manages work item types. Only POST, PATCH, and DELETE depend on the mode. See Work item type modes.

List property contexts
bash
curl -X GET \
  "https://api.plane.so/api/v2/workspaces/my-team/work-item-properties/d1f7a3c9-5b62-4e08-9a41-7c3e2f8b6d05/contexts/?order_by=sort_order&per_page=50" \
  -H "X-Api-Key: $PLANE_API_KEY"
Response200
json
{
  "data": [
    {
      "id": "2f8c40a6-9d13-4b7e-85c0-1e6a3f9b7d52",
      "name": "Default",
      "is_required": false,
      "is_multi": false,
      "is_default": true,
      "default_value": [],
      "settings": {},
      "sort_order": 65535,
      "applies_to_all_projects": true,
      "applies_to_all_work_item_types": true,
      "external_id": null,
      "external_source": null,
      "created_at": "2026-01-14T09:22:41.478363Z",
      "updated_at": "2026-01-14T09:22:41.478363Z",
      "updated_by_id": null,
      "project_ids": [],
      "issue_type_ids": [],
      "options": [
        {
          "id": "5d0a9e34-7c62-4f18-b93d-0a4e6f2c8b71",
          "name": "Low",
          "is_default": false,
          "sort_order": 10000
        },
        {
          "id": "81b4f27c-3a05-4e96-8d21-7f6c0b4a9e53",
          "name": "High",
          "is_default": false,
          "sort_order": 20000
        }
      ]
    },
    {
      "id": "6e2b90d4-1c73-4f58-a09e-3d8b5c14e7f2",
      "name": "Bug severity",
      "is_required": true,
      "is_multi": false,
      "is_default": false,
      "default_value": [],
      "settings": {},
      "sort_order": 75535,
      "applies_to_all_projects": false,
      "applies_to_all_work_item_types": false,
      "external_id": null,
      "external_source": null,
      "created_at": "2026-02-03T11:05:17.204918Z",
      "updated_at": "2026-02-03T11:05:17.204918Z",
      "updated_by_id": null,
      "project_ids": [
        "4af68566-94a4-4eb3-94aa-50dc9427067b",
        "9c3d7e21-6b45-4a80-8f19-2e0c7b5d3a64"
      ],
      "issue_type_ids": ["b7e04a95-2f18-4c63-9d57-8a12e6b0f439"],
      "options": [
        {
          "id": "c58e2f01-4d97-4b3a-8e26-1f0b7a9c5d34",
          "name": "S1 — Critical",
          "is_default": false,
          "sort_order": 10000
        },
        {
          "id": "a49b6c72-8e15-4d30-b57c-2f81e0a6d938",
          "name": "S2 — Major",
          "is_default": true,
          "sort_order": 20000
        },
        {
          "id": "f13c8a60-7d24-4e59-9b02-6a5f1c3e8d47",
          "name": "S3 — Minor",
          "is_default": false,
          "sort_order": 30000
        }
      ]
    }
  ],
  "next": null,
  "previous": null,
  "total_count": 2,
  "pagination": {
    "style": "offset"
  }
}
Response200
json
{
  "data": [
    {
      "id": "2f8c40a6-9d13-4b7e-85c0-1e6a3f9b7d52",
      "name": "Default",
      "is_required": false,
      "is_multi": false,
      "is_default": true,
      "default_value": [],
      "settings": {},
      "sort_order": 65535,
      "applies_to_all_projects": true,
      "applies_to_all_work_item_types": true,
      "external_id": null,
      "external_source": null,
      "created_at": "2026-01-14T09:22:41.478363Z",
      "updated_at": "2026-01-14T09:22:41.478363Z",
      "updated_by_id": null,
      "project_ids": [],
      "issue_type_ids": [],
      "options": []
    }
  ],
  "next_cursor": "b3A9MTcx",
  "has_more": true,
  "pagination": {
    "style": "cursor"
  }
}

Reading the scope of each row ​

Two fields decide coverage on each axis, and you need to read them in the right order:

  • applies_to_all_projects first, project_ids second. The first row above covers every project. Its project_ids is empty because of the wildcard, not because the scope is empty.
  • applies_to_all_work_item_types first, issue_type_ids second, read the same way.

Rank the rows to find which one a given work item uses. The most specific wins: listed projects and listed types beat listed projects and all types, which beat all projects and listed types, which beat all projects and all types. See Property contexts overview for the full precedence rules.