Skip to main content

Tracked Times API

The Tracked Times API allows you to retrieve time tracking entries for projects and team members. Time entries represent work hours logged by team members on tasks, as well as leave, overhead, and other non-project time.

Ben Walker avatar
Written by Ben Walker
Updated this week

Authentication

All API requests require authentication using a Bearer token. See the API Authentication documentation for details.

All endpoints are scoped to a specific account and require appropriate permissions.


The Tracked Time Object

A tracked time object represents a time entry logged by a team member.

Attributes

Attribute

Type

Description

id

integer

Unique identifier for the time entry.

date

string

Date the time was logged (ISO 8601 format: YYYY-MM-DD).

duration

integer

Duration in seconds.

duration_hours

decimal

Duration in hours (computed from duration).

note

string | null

Optional note describing the work performed.

billable

boolean

Whether this time is billable to the client.

time_type

string

Type of time entry: standard, overtime, vacation, holiday, sick, other.

billing_status

string

Billing status: unbilled, partial, or billed.

account_user_id

integer

ID of the team member who logged this time.

account_user_name

string

Full name of the team member.

task_id

integer | null

ID of the associated task (null for non-project time).

task_name

string | null

Name of the task (null for non-project time).

project_name

string | null

Name of the project (null for non-project time).

project_procedure_id

integer | null

ID of the project procedure/phase.

resource_type_id

integer | null

ID of the resource type (role/discipline).

resource_type_name

string | null

Name of the resource type.

leave_type_id

integer | null

ID of leave type (for leave entries only).

leave_type_name

string | null

Name of leave type (for leave entries only).

business_overhead_id

integer | null

ID of business overhead category (for overhead time).

business_overhead_name

string | null

Name of business overhead category.

time_credit_type_id

integer | null

ID of time credit type (for time in lieu/credits).

time_credit_type_name

string | null

Name of time credit type.

created_at

string

Timestamp when the entry was created (ISO 8601 format).

updated_at

string

Timestamp when the entry was last updated (ISO 8601 format).

Financial Attributes (requires view_project_metrics permission)

Attribute

Type

Description

currency

string

Three-letter ISO currency code (e.g., "AUD", "USD").

billable_rate_cents

integer

Billable rate per hour in cents.

billable_amount_cents

integer

Total billable amount for this entry in cents.

invoice_duration

integer | null

Duration that has been invoiced in seconds.

invoice_duration_hours

decimal | null

Duration that has been invoiced in hours.

invoice_amount_cents

integer

Amount that has been invoiced in cents.

unbillable_duration

integer | null

Duration marked as unbillable in seconds.

unbillable_duration_hours

decimal | null

Duration marked as unbillable in hours.

billed_duration

integer

Duration that has been billed in seconds.

Resource Financial Attributes (requires resource_financials permission)

These fields contain sensitive salary/cost information and require special permission.

Attribute

Type

Description

expense_rate_cents

integer

Cost rate (salary rate) per hour in cents.

expense_amount_cents

integer

Total cost for this entry in cents.

Example Object

{
"id": 12345,
"date": "2025-11-07",
"duration": 28800,
"duration_hours": 8.0,
"note": "Implemented user authentication API endpoints",
"billable": true,
"time_type": "standard",
"billing_status": "unbilled",
"account_user_id": 42,
"account_user_name": "John Doe",
"task_id": 789,
"task_name": "Backend Development",
"project_name": "Mobile App Project",
"project_procedure_id": 101,
"resource_type_id": 5,
"resource_type_name": "Senior Developer",
"leave_type_id": null,
"leave_type_name": null,
"business_overhead_id": null,
"business_overhead_name": null,
"time_credit_type_id": null,
"time_credit_type_name": null,
"created_at": "2025-11-07T09:30:00Z",
"updated_at": "2025-11-07T09:30:00Z",
"currency": "AUD",
"billable_rate_cents": 15000,
"billable_amount_cents": 120000,
"invoice_duration": null,
"invoice_duration_hours": null,
"invoice_amount_cents": 0,
"unbillable_duration": null,
"unbillable_duration_hours": null,
"billed_duration": 0
}

List Project Tracked Times

Retrieve all time entries for tasks within a specific project.

Endpoint

GET /api/v1/projects/:project_id/tracked_times

Authentication

Required.

Permissions

  • Requires api_read permission

  • Requires permission to view the project (based on project visibility settings and team membership)

  • Financial data requires view_project_metrics permission

  • Resource cost data requires resource_financials permission

Path Parameters

Parameter

Type

Required

Description

account_id

integer

Yes

The account ID.

project_id

integer

Yes

The project ID.

Query Parameters (Filters)

Parameter

Type

Description

start_date

string

Filter to entries on or after this date (YYYY-MM-DD).

end_date

string

Filter to entries on or before this date (YYYY-MM-DD).

account_user_id

integer

Filter to entries by a specific team member.

task_id

integer

Filter to entries for a specific task.

project_procedure_id

integer

Filter to entries for a specific project procedure/phase.

billing_status

string

Filter by billing status: unbilled, partial, or billed.

time_type

string

Filter by time type: standard, overtime, vacation, holiday, sick, other.

resource_type_id

integer

Filter to entries by resource type (role).

page

integer

Page number for pagination (default: 1).

items

integer

Items per page (default: 20).

Example Request

curl "https://app.getdrum.com/api/v1/projects/42/tracked_times" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Example Request with Filters

curl "https://app.getdrum.com/api/v1/projects/42/tracked_times?start_date=2025-11-01&end_date=2025-11-07&billing_status=unbilled&account_user_id=42" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Response

Returns a paginated array of tracked time objects, ordered by date (descending), then created_at (descending).

{
"data": [
{
"id": 12345,
"date": "2025-11-07",
"duration": 28800,
"duration_hours": 8.0,
"note": "Implemented user authentication API endpoints",
"billable": true,
"time_type": "standard",
"billing_status": "unbilled",
"account_user_id": 42,
"account_user_name": "John Doe",
"task_id": 789,
"task_name": "Backend Development",
"project_name": "Mobile App Project",
"project_procedure_id": 101,
"resource_type_id": 5,
"resource_type_name": "Senior Developer",
"leave_type_id": null,
"created_at": "2025-11-07T09:30:00Z",
"updated_at": "2025-11-07T09:30:00Z",
"currency": "AUD",
"billable_rate_cents": 15000,
"billable_amount_cents": 120000,
"invoice_amount_cents": 0
}
],
"pagination": {
"page": 1,
"items": 20,
"count": 1,
"pages": 1,
"from": 1,
"to": 1,
"prev": null,
"next": null
}
}

Retrieve a Tracked Time Entry

Get details for a specific time entry within a project.

Endpoint

GET /api/v1/projects/:project_id/tracked_times/:id

Authentication

Required.

Permissions

Same as list endpoint.

Path Parameters

Parameter

Type

Required

Description

account_id

integer

Yes

The account ID.

project_id

integer

Yes

The project ID.

id

integer

Yes

The tracked time entry ID.

Example Request

curl "https://app.getdrum.com/api/v1/projects/42/tracked_times/12345" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Response

Returns a single tracked time object.

{
"id": 12345,
"date": "2025-11-07",
"duration": 28800,
"duration_hours": 8.0,
"note": "Implemented user authentication API endpoints",
"billable": true,
"time_type": "standard",
"billing_status": "unbilled",
"account_user_id": 42,
"account_user_name": "John Doe",
"task_id": 789,
"task_name": "Backend Development",
"project_name": "Mobile App Project",
"resource_type_id": 5,
"resource_type_name": "Senior Developer",
"created_at": "2025-11-07T09:30:00Z",
"updated_at": "2025-11-07T09:30:00Z",
"currency": "AUD",
"billable_rate_cents": 15000,
"billable_amount_cents": 120000
}

List Member Tracked Times

Retrieve all time entries for a specific team member across all projects they have access to.

Endpoint

GET /api/v1/members/:member_id/tracked_times

Authentication

Required.

Permissions

  • Requires api_read permission

  • User must be:

    • Viewing their own time entries, OR

    • An admin user, OR

    • Have manage_staff_timesheets permission

  • Only returns time entries from projects the current user has access to

Path Parameters

Parameter

Type

Required

Description

account_id

integer

Yes

The account ID.

member_id

integer

Yes

The account user ID (team member ID).

Query Parameters (Filters)

Parameter

Type

Description

start_date

string

Filter to entries on or after this date (YYYY-MM-DD).

end_date

string

Filter to entries on or before this date (YYYY-MM-DD).

project_id

integer

Filter to entries for a specific project.

task_id

integer

Filter to entries for a specific task.

project_procedure_id

integer

Filter to entries for a specific project procedure.

billing_status

string

Filter by billing status: unbilled, partial, or billed.

time_type

string

Filter by time type.

resource_type_id

integer

Filter by resource type.

page

integer

Page number for pagination.

items

integer

Items per page.

Example Request

curl "https://app.getdrum.com/api/v1/members/42/tracked_times" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Example Request with Filters

curl "https://app.getdrum.com/api/v1/members/42/tracked_times?start_date=2025-11-01&end_date=2025-11-07&time_type=standard" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Response

Returns a paginated array of tracked time objects. Includes project time, leave, overhead, and other time types.

{
"data": [
{
"id": 12345,
"date": "2025-11-07",
"duration": 28800,
"duration_hours": 8.0,
"note": "Backend development work",
"billable": true,
"time_type": "standard",
"billing_status": "unbilled",
"account_user_id": 42,
"account_user_name": "John Doe",
"task_id": 789,
"task_name": "Backend Development",
"project_name": "Mobile App Project",
"resource_type_id": 5,
"resource_type_name": "Senior Developer",
"created_at": "2025-11-07T09:30:00Z",
"updated_at": "2025-11-07T09:30:00Z"
},
{
"id": 12346,
"date": "2025-11-06",
"duration": 28800,
"duration_hours": 8.0,
"note": null,
"billable": false,
"time_type": "vacation",
"billing_status": "unbilled",
"account_user_id": 42,
"account_user_name": "John Doe",
"task_id": null,
"task_name": null,
"project_name": null,
"leave_type_id": 5,
"leave_type_name": "Annual Leave",
"created_at": "2025-11-06T08:00:00Z",
"updated_at": "2025-11-06T08:00:00Z"
}
],
"pagination": {
"page": 1,
"items": 20,
"count": 2,
"pages": 1,
"from": 1,
"to": 2,
"prev": null,
"next": null
}
}

Retrieve a Member's Tracked Time Entry

Get details for a specific time entry for a team member.

Endpoint

GET /api/v1/members/:member_id/tracked_times/:id

Authentication

Required.

Permissions

Same as list member tracked times.

Path Parameters

Parameter

Type

Required

Description

account_id

integer

Yes

The account ID.

member_id

integer

Yes

The account user ID.

id

integer

Yes

The tracked time entry ID.

Example Request

curl "https://app.drumhq.com/api/v1/members/42/tracked_times/12345" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Response

Returns a single tracked time object.

{
"id": 12345,
"date": "2025-11-07",
"duration": 28800,
"duration_hours": 8.0,
"note": "Implemented user authentication API endpoints",
"billable": true,
"time_type": "standard",
"billing_status": "unbilled",
"account_user_id": 42,
"account_user_name": "John Doe",
"task_id": 789,
"task_name": "Backend Development",
"project_name": "Mobile App Project",
"created_at": "2025-11-07T09:30:00Z",
"updated_at": "2025-11-07T09:30:00Z"
}

Time Types

Time entries can have different types depending on what the time represents:

Type

Description

standard

Regular work hours on tasks.

overtime

Overtime work hours.

vacation

Vacation/annual leave time.

holiday

Public holiday time.

sick

Sick leave time.

other

Other types of time (training, overhead, etc.).


Billing Status

Time entries track their billing status:

Status

Description

unbilled

Time has not been invoiced yet.

partial

Some of the time has been invoiced.

billed

All of the time has been invoiced.


Non-Project Time

Time entries don't always belong to projects. They can also represent:

  • Leave: Time off (vacation, sick leave, public holidays)

  • Business Overhead: Internal activities (meetings, admin, training)

  • Time Credits: Time in lieu or other time bank entries

For these entries:

  • task_id, task_name, and project_name will be null

  • One of leave_type_id, business_overhead_id, or time_credit_type_id will be present

  • The corresponding name field will contain the category name


Financial Data Visibility

Financial data in tracked time entries has multiple permission levels:

Public Data (always visible)

  • Duration, date, note

  • Task and project associations

  • Billable flag

  • Billing status

Project Metrics (view_project_metrics permission)

  • Billable rates and amounts

  • Invoice amounts and durations

  • Currency information

Resource Financials (resource_financials permission)

  • Expense rates (salary/cost rates)

  • Expense amounts

  • ⚠️ Sensitive: Contains employee compensation information


Error Responses

Status Code

Description

200

Success - Request completed successfully.

401

Unauthorized - Invalid or missing authentication token.

403

Forbidden - Insufficient permissions to access project or member.

404

Not Found - Project, member, or tracked time entry not found.


Notes

Duration Format

  • duration: Stored in seconds (e.g., 28800 = 8 hours)

  • duration_hours: Computed field in decimal hours for convenience (e.g., 8.0)

Project Access Filtering

When listing member tracked times, results are automatically filtered to only projects the current user has access to. This ensures users can't view time entries for projects they don't have permission to see.

Team-Based Permissions

If a user doesn't have "all projects" permission, they may only see tracked times for:

  • Projects they're assigned to

  • Projects with team members they share a team with

  • Their own time entries (when viewing via member endpoint)

Pagination

Default pagination settings apply (20 items per page). Results are ordered by date (most recent first), then by creation time.

Monetary Values

All monetary amounts are in cents. To display as currency:

  1. Divide by 100

  2. Format according to the currency field

  3. Example: billable_amount_cents: 120000 = $1,200.00 AUD

Did this answer your question?