[New] Time Tracking Entries API - Query by Project, Portfolio, or User

Summary

The GET /time_tracking_entries endpoint now supports filtering by project, portfolio, task, and user. This enhancement allows you to retrieve time tracking entries across multiple contexts without needing to make separate API calls for each task or project.

What’s new

You can now query time tracking entries using these new optional parameters:

Parameter Type Description
attributable_to string Project GID to get all time tracking entries attributed to a specific project
portfolio string Portfolio GID to get all time tracking entries from projects within a portfolio
task string Task GID to get all time tracking entries for a specific task
user string User GID to get all time tracking entries for a specific user (requires workspace parameter)
workspace string Workspace GID (required when using user parameter)

Filter combinations

Multiple parameters can be combined using AND logic for more granular results. For example:

  • user + attributable_to = entries for a specific user on a specific project
  • portfolio + user = entries for a specific user across all projects in a portfolio
  • task + user = entries for a specific user on a specific task

Note: If both attributable_to and portfolio are provided, portfolio will be ignored since attributable_to is more specific.

Who’s affected

This enhancement is valuable for developers building:

  • Time tracking dashboards that need to aggregate entries across projects
  • Billing systems that require project-level or portfolio-level time reporting
  • User productivity tools that track individual time allocation
  • Project management applications with cross-project time analysis

Usage

Required parameters

At least one of the following parameter combinations is required:

  • attributable_to
  • portfolio
  • task
  • user + workspace

Example requests

Get all time entries for a user in a workspace:

GET /time_tracking_entries?user=23456&workspace=01234

Get all time entries attributed to a specific project:

GET /time_tracking_entries?attributable_to=34567

Get time entries for a user on a specific project:

GET /time_tracking_entries?user=23456&attributable_to=34567

Get all time entries across projects in a portfolio:

GET /time_tracking_entries?portfolio=45678

Example response

{
  "data": [
    {
      "gid": "12345",
      "resource_type": "time_tracking_entry",
      "duration_minutes": 30,
      "created_by": {
        "gid": "23456",
        "name": "Greg Sanchez",
        "resource_type": "user"
      },
      "attributable_to": {
        "gid": "34567",
        "name": "Sample Project 1",
        "resource_type": "project"
      },
      "entered_on": "2025-01-01"
    },
    {
      "gid": "123451",
      "resource_type": "time_tracking_entry",
      "duration_minutes": 40,
      "created_by": {
        "gid": "23456",
        "name": "Greg Sanchez",
        "resource_type": "user"
      },
      "attributable_to": {
        "gid": "45678",
        "name": "Sample Project 2",
        "resource_type": "project"
      },
      "entered_on": "2025-01-01"
    }
  ]
}

Timeline

This is now available!

Next steps

Consider updating your applications to take advantage of:

  • Simplified time tracking aggregation across multiple projects
  • Portfolio-level time reporting capabilities
  • Cross-project user time analysis
  • Reduced API calls for bulk time tracking data retrieval

For complete API documentation, visit the Time Tracking Entries reference.

4 Likes

Hi,

I tried the new endpoint, and it’s better than expected!

One thing is missing in the documentation there:

We can get all items of the whole workspace by using these parameters:

GET /time_tracking_entries?workspace=xyz&entered_on_start_date=2025-09-01&entered_on_end_date=2025-11-01

I found these parameter (entered_on_start_date) by accident, in the response of a bad request!
ErrorMessage: “You should specify one of entered_on_start_date, entered_on_end_date”

3 Likes

Hi @Frederic_Malenfant , thanks for calling this out!

We’ve gone ahead and updated the docs to include these parameters so others don’t have to discover them the hard way. Really appreciate you taking the time to highlight this!

1 Like