Modern REST API for WebWork Time Tracker with OAuth2 authentication. This API provides access to workspaces, members, projects, and time tracking features.
WebWork Time Tracker API V2 Documentation (2.0.0)
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.
Request
Retrieve all time requests for a specific workspace. Requires workspace_id as query parameter.
Filter by status. Must be one of: pending, approved, rejected
Start date for filtering time requests (required). Format: YYYY-MM-DD. Must be before or equal to date_to.
End date for filtering time requests (required). Format: YYYY-MM-DD. Must be after or equal to date_from.
- Production Serverhttps://api.webwork-tracker.com/api/v2/time-requests
- cURL
- JS
- Python
- PHP
- Go
- Java 8
- C#
- C++
curl -i -X GET \
'https://api.webwork-tracker.com/api/v2/time-requests?workspace_id=1&date_from=2019-08-24&date_to=2019-08-24' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>'{ "success": true, "data": {}, "message": "string", "meta": { "api_version": "2.0.0", "timestamp": "2019-08-24T14:15:22Z" } }
Request
Create a new time request. The system will use existing logic based on user permissions and workspace auto-approval settings to determine whether the time is added immediately or creates a pending request.
Contract ID (optional). Can be null if creating a time request without a contract.
- Production Serverhttps://api.webwork-tracker.com/api/v2/time-requests
- cURL
- JS
- Python
- PHP
- Go
- Java 8
- C#
- C++
curl -i -X POST \
https://api.webwork-tracker.com/api/v2/time-requests \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"workspace_id": 1,
"user_id": 123,
"contract_id": 456,
"start": "2025-12-05T09:00:00+00:00",
"end": "2025-12-05T17:00:00+00:00",
"activity_description": "Worked on feature implementation",
"task_id": 101
}'Time request created successfully
Full name of the user associated with the time request
Email of the user associated with the time request
Project name when contract/project exists
Dynamic message with member name, date, time range, project, task, and activity details. Suitable for Slack bot notifications.
{ "success": true, "data": { "id": "encoded_id_string", "status": "pending", "user_id": 123, "user_name": "John Smith", "user_email": "john.smith@example.com", "project_id": 309836, "project_name": "Website Redesign", "task_id": 101, "task_title": "Implement auth" }, "message": "Time request created for John Smith on 2025-12-05 (09:00 - 17:00) | Project: Website Redesign | Task: Implement auth | Activity: Worked on feature implementation", "meta": { "api_version": "2.0.0", "timestamp": "2025-12-05T11:00:00.000000Z" } }
- Production Serverhttps://api.webwork-tracker.com/api/v2/time-requests/{timeRequestId}/approve
- cURL
- JS
- Python
- PHP
- Go
- Java 8
- C#
- C++
curl -i -X POST \
'https://api.webwork-tracker.com/api/v2/time-requests/{timeRequestId}/approve' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"workspace_id": 1
}'Time request approved successfully
Time request status (always 'approved' for approve endpoint)
Full name of the user associated with the time request
Email of the user associated with the time request
Project name when contract/project exists
Dynamic message with approver name and timestamp. Suitable for Slack bot notifications.
{ "success": true, "data": { "id": "encoded_id_string", "status": "approved", "user_id": 123, "user_name": "John Smith", "user_email": "john.smith@example.com", "project_id": 309836, "project_name": "Website Redesign", "task_id": 101, "task_title": "Implement auth" }, "message": "Time request approved by Jane Doe at 2025-12-05 11:00:00", "meta": { "api_version": "2.0.0", "timestamp": "2025-12-05T11:00:00.000000Z" } }
- Production Serverhttps://api.webwork-tracker.com/api/v2/time-requests/{timeRequestId}/reject
- cURL
- JS
- Python
- PHP
- Go
- Java 8
- C#
- C++
curl -i -X POST \
'https://api.webwork-tracker.com/api/v2/time-requests/{timeRequestId}/reject' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"workspace_id": 1,
"comment": "Time entry overlaps with existing approved time"
}'Time request rejected successfully
Time request status (always 'rejected' for reject endpoint)
Full name of the user associated with the time request
Email of the user associated with the time request
Project name when contract/project exists
Dynamic message with rejector name, timestamp, and rejection reason. Suitable for Slack bot notifications.
{ "success": true, "data": { "id": "encoded_id_string", "status": "rejected", "user_id": 123, "user_name": "John Smith", "user_email": "john.smith@example.com", "project_id": 309836, "project_name": "Website Redesign", "task_id": 101, "task_title": "Implement auth" }, "message": "Time request rejected by Jane Doe at 2025-12-05 11:00:00 | Reason: Time entry overlaps with existing approved time", "meta": { "api_version": "2.0.0", "timestamp": "2025-12-05T11:00:00.000000Z" } }