Skip to content

WebWork Tracker REST API V2 (2.0.0)

Modern REST API for WebWork Tracker with OAuth2 authentication. This API provides access to workspaces, members, projects, and time tracking features.

Languages
Servers
Production Server
https://api.webwork-tracker.com/api/v2/

Workspaces

Read workspace information for the authenticated user for using it in the other endpoints

Operations

Members

Manage workspace members - invite, update roles, and remove members

Operations

Projects

Manage projects within workspaces

Operations

Contracts

Manage contracts (project-member assignments) within workspaces. Contracts define which members are assigned to which projects, with settings for rates, hours limits, and screenshot modes. Rate information is only visible if you have permission to view rates and the project is billable.

Operations

Tasks

Manage tasks within projects

Operations

Project Viewers

Manage project viewers - external users who can view specific projects

Operations

Timesheets

Manage timesheet approvals and submissions

Operations

Time Requests

Manage manual time requests and approvals

Operations

Leaves

Manage leave requests, balances, and policies

Operations

Expenses

Manage expenses and expense categories

Operations

Time Tracking

Track and manage time entries

Operations

Reports

Generate and retrieve various reports including tracked hours, timeline, activity descriptions, tasks, and activity level reports

Operations

Get Tracked Hours Report

Request

Retrieve tracked hours report data for a workspace. Supports filtering by users, projects, teams, and titles. Data is always grouped by day. Always returns: Day-by-day breakdown grouped by date (date as key), with users array inside each date. Tracked time is returned in minutes (total_minutes field), aggregated across all tracking methods and grouped by user_id, project_id, and contract_id. If user has access to rates (rate_status = 1), also returns total_amount as an object with currency codes as keys. When user_id is provided: Results are filtered to that specific user only. Date range is limited to maximum 31 days (1 month) when user_id is provided. Security: Only workspace owners and executive managers can access this endpoint.

Security
oauth2 or apiKey
Query
workspace_idintegerrequired

ID of the workspace (team_id from owner_user_rel table)

Example: workspace_id=1
user_idinteger

Filter by specific user ID. When provided, results are filtered to that user only. Date range is limited to maximum 31 days.

Example: user_id=100
start_datestring(date)

Start date for the report (Y-m-d format). Defaults to start of current week if not provided. Maximum 31 days from end_date when user_id is provided.

Example: start_date=2024-01-01
end_datestring(date)

End date for the report (Y-m-d format). Defaults to end of current week if not provided. Maximum 31 days from start_date when user_id is provided.

Example: end_date=2024-01-31
usersArray of integers

Filter by user IDs (comma-separated or array)

Example: users=1&users=2&users=3
projectsArray of integers

Filter by project IDs (comma-separated or array)

Example: projects=10&projects=20
teamsArray of integers

Filter by team IDs (comma-separated or array)

Example: teams=5
titlesArray of integers

Filter by title IDs (comma-separated or array)

Example: titles=1
currenciesArray of strings

Filter by currency codes (comma-separated or array). Only applicable when user has access to rates (rate_status = 1).

Example: currencies=USD&currencies=EUR
curl -i -X GET \
  'https://api.webwork-tracker.com/api/v2/reports/tracked-hours?workspace_id=1' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Tracked hours report retrieved successfully

Bodyapplication/json
successboolean
Example: true
dataobject(TrackedHoursReport)
messagestring
Example: "Tracked hours report retrieved successfully"
metaobject(Meta)
Response
application/json
{ "success": true, "data": { "report_type": "tracked_hours", "start_date": "2024-01-01", "end_date": "2024-01-31", "total": {}, "daily_breakdown": {} }, "message": "Tracked hours report retrieved successfully", "meta": { "api_version": "2.0.0", "timestamp": "2024-01-15T10:30:00Z" } }

Get Daily Timeline Report

Request

Retrieve daily timeline report data for a specific date, paginated by user IDs. Returns time entries with details for each user including start/end times, project, task, activity description, tracking method, and activity metrics.\n\nKey Features:\n- Single date only: This endpoint accepts only one date (not a date range). Date must be within the last year and not more than a year in the future.\n- Pagination: Results are paginated by user_ids. Default is 30 users per page, maximum 100.\n- Rate visibility: total_amount and currency fields are only included if the workspace has rate_status = 1 (rate visibility enabled).\n- Activity metrics: Both user-level and time entry-level activity_level are calculated using the TimelineService::activity() method based on mouse, keyboard, and scroll actions.\n- Timezone handling: Times are returned in ISO 8601 format with timezone offset based on the workspace owner's system_timezone.\n- Security: Only workspace owners and executive managers can access this endpoint.

Security
oauth2 or apiKey
Query
workspace_idintegerrequired

ID of the workspace (team_id from owner_user_rel table)

Example: workspace_id=1
datestring(date)^\d{4}-\d{2}-\d{2}$required

Date for the timeline report (Y-m-d format, e.g., 2024-01-15). Only single date is supported, not a date range. Date must be within the last year and not more than a year in the future.

Example: date=2024-01-15
user_idsArray of integers

Filter by specific user IDs. Can be provided as comma-separated values (e.g., "100,101,102") or as an array. If not provided, returns all users with timeline entries for the specified date.

Example: user_ids=100&user_ids=101&user_ids=102
pageinteger>= 1

Page number for pagination. Results are paginated by user_ids, so each page contains up to per_page users with all their time entries.

Default 1
Example: page=1
per_pageinteger[ 1 .. 100 ]

Number of users per page. Each user includes all their time entries for the date. Minimum: 1, Maximum: 100, Default: 30.

Default 30
Example: per_page=30
curl -i -X GET \
  'https://api.webwork-tracker.com/api/v2/reports/daily-timeline?workspace_id=1&date=2024-01-15' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Daily timeline report retrieved successfully

Bodyapplication/json
successboolean
Example: true
dataobject(DailyTimelineReport)
messagestring
Example: "Daily timeline report retrieved successfully"
metaobject(Meta)
Response
application/json
{ "success": true, "data": { "date": "2024-01-15", "total_users": 5, "per_page": 30, "current_page": 1, "total_pages": 1, "users": [] }, "message": "Daily timeline report retrieved successfully", "meta": { "api_version": "2.0.0", "timestamp": "2024-01-15T10:30:00Z" } }

Get Activity Level Report

Request

Retrieve activity level report data for a date range, paginated by day. Returns activity level percentage per user per day, with overall statistics across all users and days.

Key Features:

  • Date range: Accepts start_date and end_date parameters (YYYY-MM-DD format). Maximum date range is 1 month (31 days).
  • Pagination: Results are paginated by day. Default is 30 days per page, maximum 100.
  • Filtering: Can filter by contract_id and user_ids.
  • Activity metrics: Activity level is calculated based on mouse, keyboard, and scroll actions.
  • Overall statistics: Includes aggregated activity data across all users and days in the report range.
  • Security: Only workspace owners and executive managers can access this endpoint.
Security
oauth2 or apiKey
Query
workspace_idintegerrequired

ID of the workspace

Example: workspace_id=1
start_datestring(date)required

Start date of the report range. Format: YYYY-MM-DD (e.g., 2024-01-01). Must be before or equal to end_date.

Example: start_date=2024-01-01
end_datestring(date)required

End date of the report range. Format: YYYY-MM-DD (e.g., 2024-01-31). Must be after or equal to start_date. Maximum date range is 1 month (31 days).

Example: end_date=2024-01-31
contract_idinteger

Optional filter by contract ID (project-member assignment). If provided, only returns activity data for the specified contract.

Example: contract_id=20
user_idsArray of integers

Optional filter by specific user IDs. Can be provided as comma-separated values (e.g., 100,101,102) or as an array. If not provided, returns all users.

Example: user_ids=100&user_ids=101&user_ids=102
pageinteger>= 1

Page number for pagination. Results are paginated by user, so each page contains up to per_page users with all their daily activity data.

Default 1
Example: page=1
per_pageinteger[ 1 .. 100 ]

Number of users per page. Each user includes all their daily activity data for the date range. Minimum: 1, Maximum: 100, Default: 30.

Default 30
Example: per_page=30
curl -i -X GET \
  'https://api.webwork-tracker.com/api/v2/reports/activity-level?workspace_id=1&start_date=2024-01-01&end_date=2024-01-31' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Activity level report retrieved successfully

Bodyapplication/json
successboolean
Example: true
dataobject(ActivityLevelReport)
messagestring
Example: "Activity level report retrieved successfully"
metaobject(Meta)
Response
application/json
{ "success": true, "data": { "report_type": "activity_level", "start_date": "2024-01-01", "end_date": "2024-01-31", "total_users": 5, "per_page": 30, "current_page": 1, "total_pages": 1, "users": [] }, "message": "Activity level report retrieved successfully", "meta": { "api_version": "2.0.0", "timestamp": "2024-01-15T10:30:00Z" } }

Get Task Report

Request

Retrieve task-based time tracking report data for a date range, paginated by user. Returns time tracked per task for each user, with daily breakdown and overall task breakdown.

Key Features:

  • Date range: Accepts start_date and end_date parameters (YYYY-MM-DD format). Maximum date range is 1 month (31 days).
  • Pagination: Results are paginated by user. Default is 30 users per page, maximum 100.
  • Filtering: Can filter by users, project_id, and task_id.
  • No Task entries: Entries without a task (task_id is null) are included by default. Use include_no_task=false to exclude them.
  • Tasks breakdown: Each user has an overall tasks_breakdown showing total time per task across the date range.
  • Daily breakdown: Each user has a daily_breakdown showing time per task for each day.
  • Security: Only workspace owners and executive managers can access this endpoint.
Security
oauth2 or apiKey
Query
workspace_idintegerrequired

ID of the workspace

Example: workspace_id=1
start_datestring(date)required

Start date of the report range. Format: YYYY-MM-DD (e.g., 2024-01-01). Must be before or equal to end_date.

Example: start_date=2024-01-01
end_datestring(date)required

End date of the report range. Format: YYYY-MM-DD (e.g., 2024-01-31). Must be after or equal to start_date. Maximum date range is 1 month (31 days).

Example: end_date=2024-01-31
usersArray of integers

Optional filter by specific user IDs. Can be provided as comma-separated values (e.g., 100,101,102) or as an array. If not provided, returns all users.

Example: users=100&users=101&users=102
project_idArray of integers

Optional filter by specific project IDs. Can be provided as comma-separated values or as an array. If not provided, returns data for all projects.

Example: project_id=10&project_id=11&project_id=12
task_idArray of integers

Optional filter by specific task IDs. Can be provided as comma-separated values or as an array. If not provided, returns data for all tasks.

Example: task_id=5&task_id=6&task_id=7
include_no_taskboolean

Whether to include time entries without a task (task_id is null). Default is true. Set to false to exclude entries without a task.

Default true
Example: include_no_task=true
pageinteger>= 1

Page number for pagination. Results are paginated by user, so each page contains up to per_page users with all their task data.

Default 1
Example: page=1
per_pageinteger[ 1 .. 100 ]

Number of users per page. Each user includes all their task data for the date range. Minimum: 1, Maximum: 100, Default: 30.

Default 30
Example: per_page=30
curl -i -X GET \
  'https://api.webwork-tracker.com/api/v2/reports/task-report?workspace_id=1&start_date=2024-01-01&end_date=2024-01-31' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Task report retrieved successfully

Bodyapplication/json
successboolean
Example: true
dataobject(TaskReport)

Task report data structure with time tracked per task for each user

messagestring
Example: "Task report retrieved successfully"
metaobject(Meta)
Response
application/json
{ "success": true, "data": { "report_type": "task_report", "start_date": "2024-01-01", "end_date": "2024-01-31", "total_users": 2, "per_page": 30, "current_page": 1, "total_pages": 1, "users": [] }, "message": "Task report retrieved successfully", "meta": { "api_version": "2.0.0", "timestamp": "2024-01-15T10:30:00Z" } }

Get Daily Attendance Report

Request

Retrieve daily attendance report data for a specific date, paginated by user. Returns attendance information including statuses, times, breaks, and productivity metrics for each user.

Key Features:

  • Single date only: This endpoint accepts only one date (not a date range). Date must be in YYYY-MM-DD format.
  • Pagination: Results are paginated by user. Default is 30 users per page, maximum 100.
  • Statuses array: Each user can have multiple statuses (e.g., ["Late", "Left early"]). Possible statuses: "Present", "Late", "Left early", "Tracked less", "Absent", "On leave", "Holiday".
  • Time values in minutes: All time-related fields are returned as integers representing total minutes (e.g., 303 instead of "5h 3m").
  • Filtering: Can filter by users and status. Status filter accepts string values: "late", "left_early", "tracked_less", "absent", "on_leave".
  • Break intervals: Returns break time intervals as an array of strings (e.g., ["14:30 - 15:25", "16:00 - 16:15"]).
  • Security: Only workspace owners and executive managers can access this endpoint.
Security
oauth2 or apiKey
Query
workspace_idintegerrequired

ID of the workspace (team_id from owner_user_rel table)

Example: workspace_id=1
datestring(date)^\d{4}-\d{2}-\d{2}$required

Date for the attendance report (Y-m-d format, e.g., 2024-12-22). Only single date is supported, not a date range.

Example: date=2024-12-22
usersArray of integers

Optional filter by specific user IDs. Can be provided as comma-separated values (e.g., "100,101,102") or as an array. If not provided, returns all users.

Example: users=100&users=101&users=102
statusArray of strings

Optional filter by attendance status. Can be provided as comma-separated values or as an array. Valid string values: "late" (Late coming), "left_early" (Early leaving), "tracked_less" (Tracked less than required), "absent" (Absent), "on_leave" (On leave). You can filter by multiple statuses (e.g., status=late,left_early).

Items Enum"late""left_early""tracked_less""absent""on_leave"
Example: status=late&status=left_early
pageinteger>= 1

Page number for pagination. Results are paginated by user, so each page contains up to per_page users with their attendance data.

Default 1
Example: page=1
per_pageinteger[ 1 .. 100 ]

Number of users per page. Each user includes all their attendance data for the date. Minimum: 1, Maximum: 100, Default: 30.

Default 30
Example: per_page=30
curl -i -X GET \
  'https://api.webwork-tracker.com/api/v2/reports/daily-attendance?workspace_id=1&date=2024-12-22' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Daily attendance report retrieved successfully

Bodyapplication/json
successboolean
Example: true
dataobject(DailyAttendanceReport)

Daily attendance report data structure with attendance information for each user

messagestring
Example: "Daily attendance report retrieved successfully"
metaobject(Meta)
Response
application/json
{ "success": true, "data": { "report_type": "daily_attendance", "date": "2024-12-22", "total_users": 5, "per_page": 30, "current_page": 1, "total_pages": 1, "users": [] }, "message": "Daily attendance report retrieved successfully", "meta": { "api_version": "2.0.0", "timestamp": "2024-12-22T10:30:00Z" } }

Get Activity Description Report

Request

Retrieve activity description-based time tracking report data for a date range, paginated by user. Returns time tracked per activity description (memo) for each user, with daily breakdown and overall breakdown.

Key Features:

  • Date range: Accepts start_date and end_date parameters (YYYY-MM-DD format). Maximum date range is 1 month (31 days).
  • Pagination: Results are paginated by user. Default is 30 users per page, maximum 100.
  • Filtering: Can filter by users, project_id, and task_id.
  • No Description entries: Entries without an activity description (memo is null) are included by default. Use include_no_description=false to exclude them.
  • Activities breakdown: Each user has an overall activities_breakdown showing total time per activity description across the date range.
  • Daily breakdown: Each user has a daily_breakdown showing time per activity description for each day.
  • Security: Only workspace owners and executive managers can access this endpoint.
Security
oauth2 or apiKey
Query
workspace_idintegerrequired

ID of the workspace

Example: workspace_id=1
start_datestring(date)required

Start date of the report range. Format: YYYY-MM-DD (e.g., 2024-01-01). Must be before or equal to end_date.

Example: start_date=2024-01-01
end_datestring(date)required

End date of the report range. Format: YYYY-MM-DD (e.g., 2024-01-31). Must be after or equal to start_date. Maximum date range is 1 month (31 days).

Example: end_date=2024-01-31
usersArray of integers

Optional filter by specific user IDs. Can be provided as comma-separated values (e.g., 100,101,102) or as an array. If not provided, returns all users.

Example: users=100&users=101&users=102
project_idArray of integers

Optional filter by specific project IDs. Can be provided as comma-separated values or as an array. If not provided, returns data for all projects.

Example: project_id=10&project_id=11&project_id=12
task_idArray of integers

Optional filter by specific task IDs. Can be provided as comma-separated values or as an array. If not provided, returns data for all tasks.

Example: task_id=5&task_id=6&task_id=7
include_no_descriptionboolean

Whether to include time entries without an activity description (memo is null). Default is true. Set to false to exclude entries without a description.

Default true
Example: include_no_description=true
pageinteger>= 1

Page number for pagination. Results are paginated by user, so each page contains up to per_page users with all their activity data.

Default 1
Example: page=1
per_pageinteger[ 1 .. 100 ]

Number of users per page. Each user includes all their activity description data for the date range. Minimum: 1, Maximum: 100, Default: 30.

Default 30
Example: per_page=30
curl -i -X GET \
  'https://api.webwork-tracker.com/api/v2/reports/activity-description?workspace_id=1&start_date=2024-01-01&end_date=2024-01-31' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Activity description report retrieved successfully

Bodyapplication/json
successboolean
Example: true
dataobject(ActivityDescriptionReport)

Activity description report data structure with time tracked per activity description (memo) for each user

messagestring
Example: "Activity description report retrieved successfully"
metaobject(Meta)
Response
application/json
{ "success": true, "data": { "report_type": "activity_description", "start_date": "2024-01-01", "end_date": "2024-01-31", "total_users": 2, "per_page": 30, "current_page": 1, "total_pages": 1, "users": [] }, "message": "Activity description report retrieved successfully", "meta": { "api_version": "2.0.0", "timestamp": "2024-01-15T10:30:00Z" } }

Webhooks

Manage webhooks for event notifications

Operations