list_work_packages
List OpenProject work packages using structured filters for status, assignee, priority, dates, and more. Sort, group, and select specific fields to retrieve exactly the data you need.
Instructions
List work packages with structured filters and no free-text query requirement.
version_status filters by the status of a work package's assigned version: one of 'open', 'closed', or 'locked'.
assignee filters by any user (username, id, or "me"). assignee_me takes precedence.
status/priority filter by exact OpenProject status/priority name or numeric ID (case-insensitive) — not meta-values like 'open'/'closed'; set open_only=true to restrict results to not-closed work packages instead.
Date filters accept YYYY-MM-DD format:
created_on/updated_on/due_on: exact date match
created_between/updated_between/due_between: inclusive date range [start, end] Cannot specify both _on and _between for the same field.
sort_by accepts a list of sort criteria in format "field:direction" (e.g., ["status:desc", "priority:asc"]). Direction defaults to "asc" if omitted. Common sortable fields: id, subject, status, priority, type, assignee, author, created_at, updated_at, start_date, due_date.
group_by accepts a field name to group results by (e.g., "status", "assignee"). Common groupable fields: status, priority, type, assignee, author, version, category.
select restricts each result row to the given fields (e.g. ["id", "subject", "status"]); an invalid name returns the allowed set. Common fields: id, display_id, subject, type, status, priority, assignee, project, version, parent_id, parent_display_id, start_date, due_date, estimated_time, spent_time, created_at, updated_at, author, category, description, schedule_manually, derived_start_date, derived_due_date, percentage_done, derived_percentage_done, readonly, ignore_non_working_days. parent_display_id is only populated on OpenProject 17.5+ (semantic mode); it stays null on older/classic instances even when parent_id is set.
limit is capped at OPENPROJECT_MAX_PAGE_SIZE (default 50); pass the returned next_offset as the next call's offset to page past the cap. total is the real matching count only when the query is provably restricted to OPENPROJECT_READ_PROJECTS server-side — scope is unrestricted, an explicit project was given, or (no project, restricted scope) a server-side filter for the resolved allowed project IDs was sent. Otherwise total falls back to this page's item count, and next_offset/truncated are based on whether this page came back full rather than the server's own total, so nothing here ever reveals how many matches exist in projects you can't see. Page until next_offset is null either way.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| due_on | No | ||
| offset | No | ||
| select | No | ||
| status | No | ||
| project | No | ||
| sort_by | No | ||
| version | No | ||
| assignee | No | ||
| group_by | No | ||
| priority | No | ||
| open_only | No | ||
| created_on | No | ||
| updated_on | No | ||
| assignee_me | No | ||
| due_between | No | ||
| version_status | No | ||
| created_between | No | ||
| updated_between | No |