List time entries
list_time_entriesList logged time entries with server-side filters for project, work package, user, dates, and activity. Optionally compute an accurate total for all matching entries, grouped by activity.
Instructions
List logged time, filtered server-side, with an optional accurate total.
Use it to answer "how much time went into this ticket?", "what did I
book last week?" or "how much did the team spend on project X in June?".
Filters combine with AND, so project_id + user='me' + a date range is
one call.
Returns the standard list envelope: items of {id, hours, spent_on, comment, user, activity, work_package, project} plus pagination.
hours is a float (1.5 = 1h30), never an ISO duration. With
sum_hours=true the envelope also carries sums.total_hours over
all matches and one groups bucket per activity with its own
count and sums.total_hours — those cover the whole filtered set,
so never add pages up yourself.
Pitfalls. Visibility is permission-bound: without the
view-all-time-entries permission you see only your own entries, and a
small total may mean "not allowed to see" rather than "nobody booked
time". work_package_id scopes to that one work package — child
work packages are not included, so a parent's roll-up needs a query
per child. The summing path stops at 2000 entries and says so in
notes; narrow the date range or the project when that happens
rather than trusting the number.
Cross-references: book time with log_time; correct an entry with
update_time_entry and remove one with delete_time_entry; the
activity ids and names valid in a project come from
get_project_metadata; the work package itself (including its
aggregated spent_hours) comes from get_work_package.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. | |
| user | No | Whose time to list: a numeric user id, or the literal 'me' for the token owner. Omit for everyone you are allowed to see — on most instances that is only your own entries unless you hold the view-all-time-entries permission. | |
| to_date | No | Latest spent-on date, ISO YYYY-MM-DD, inclusive. | |
| fetch_all | No | Aggregate every page of rows into one result instead of returning page 1. Capped at 500 items with a note when the cap bites; mutually exclusive with page. sum_hours already reads every matching entry for its total, with or without fetch_all. | |
| from_date | No | Earliest spent-on date, ISO YYYY-MM-DD, inclusive. Combine with to_date for a range; either bound may be omitted for an open-ended one. | |
| page_size | No | Entries per page (max 100); the instance may clamp it lower and the returned pagination reports what actually came back. | |
| sum_hours | No | Compute an accurate total over EVERY matching entry (not just this page) and break it down per activity. Costs one request per 100 matches and is capped at 2000 entries — a cap hit is reported in 'notes'. Leave false when you only need rows. | |
| project_id | No | Only entries in this project (numeric id or identifier, from list_projects). Includes project-level entries that have no work package. | |
| activity_id | No | Only entries booked on this activity. Activity ids are instance-specific and come from get_project_metadata(project_id=...). | |
| work_package_id | No | Only entries booked on this work package. Ids come from search_work_packages / list_work_packages. The filter name differs between OpenProject versions; this tool probes the instance and uses the right one. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sums | No | Present only when show_sums was requested. | |
| items | No | The page of results. | |
| notes | No | Degradation markers: capped aggregations, unavailable modules, … | |
| groups | No | Present only when group_by was requested. | |
| pagination | Yes | Total/page/page_size/has_more. |