Skip to content

WebWork Time Tracker API V2 Documentation (2.0.0)

Modern REST API for WebWork Time 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

Get All Time Requests

Request

Retrieve all time requests for a specific workspace. Requires workspace_id as query parameter.

Security
oauth2(Required scopes:
read
)
or apiKey
Query
workspace_idintegerrequired

Workspace ID (required)

Example: workspace_id=1
statusstring

Filter by status. Must be one of: pending, approved, rejected

Enum"pending""approved""rejected"
user_idinteger

Filter by user ID

project_idinteger

Filter by project ID

date_fromstring(date)required

Start date for filtering time requests (required). Format: YYYY-MM-DD. Must be before or equal to date_to.

date_tostring(date)required

End date for filtering time requests (required). Format: YYYY-MM-DD. Must be after or equal to date_from.

idstring

Filter by encrypted time request ID

pageinteger

Page number for pagination

Default 1
per_pageinteger<= 100

Number of results per page (max 100)

Default 30
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>'

Responses

Request successful

Bodyapplication/json
successboolean
Example: true
dataobject
messagestring
metaobject(Meta)
Response
application/json
{ "success": true, "data": {}, "message": "string", "meta": { "api_version": "2.0.0", "timestamp": "2019-08-24T14:15:22Z" } }

Create Time Request

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.

Security
oauth2(Required scopes:
write
)
or apiKey
Bodyapplication/jsonrequired
workspace_idintegerrequired

Workspace ID (required)

user_idintegerrequired

User ID for whom the time request is being created (required)

contract_idinteger or null

Contract ID (optional). Can be null if creating a time request without a contract.

startstring(date-time)required

Start time in ISO 8601 format (required)

endstring(date-time)required

End time in ISO 8601 format, must be after start (required)

activity_descriptionstring or null

Optional activity description for the time request

task_idinteger or null

Optional task ID to associate with the time request

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
  }'

Responses

Time request created successfully

Bodyapplication/json
successbooleanrequired
Example: true
dataobjectrequired
data.​idstringrequired

Encrypted time request ID

Example: "encoded_id_string"
data.​statusstringrequired

Time request status

Enum"pending""approved""rejected"
Example: "pending"
data.​user_idinteger or null

User ID associated with the time request

Example: 123
data.​user_namestring or null

Full name of the user associated with the time request

Example: "John Smith"
data.​user_emailstring or null

Email of the user associated with the time request

Example: "john.smith@example.com"
data.​project_idinteger or null

Project ID when contract/project exists

Example: 309836
data.​project_namestring or null

Project name when contract/project exists

Example: "Website Redesign"
data.​task_idinteger or null

Task ID when task exists

Example: 101
data.​task_titlestring or null

Task title when task exists

Example: "Implement auth"
messagestringrequired

Dynamic message with member name, date, time range, project, task, and activity details. Suitable for Slack bot notifications.

Example: "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"
metaobject(Meta)required
meta.​api_versionstring
Example: "2.0.0"
meta.​timestampstring(date-time)
Response
application/json
{ "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" } }

Approve Time Request

Request

Approve a pending time request.

Security
oauth2(Required scopes:
write
)
or apiKey
Path
timeRequestIdstringrequired
Bodyapplication/jsonrequired
workspace_idintegerrequired

Workspace ID (required)

Example: 1
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
  }'

Responses

Time request approved successfully

Bodyapplication/json
successbooleanrequired
Example: true
dataobjectrequired
data.​idstringrequired

Encrypted time request ID

Example: "encoded_id_string"
data.​statusstringrequired

Time request status (always 'approved' for approve endpoint)

Value"approved"
Example: "approved"
data.​user_idinteger or null

User ID associated with the time request

Example: 123
data.​user_namestring or null

Full name of the user associated with the time request

Example: "John Smith"
data.​user_emailstring or null

Email of the user associated with the time request

Example: "john.smith@example.com"
data.​project_idinteger or null

Project ID when contract/project exists

Example: 309836
data.​project_namestring or null

Project name when contract/project exists

Example: "Website Redesign"
data.​task_idinteger or null

Task ID when task exists

Example: 101
data.​task_titlestring or null

Task title when task exists

Example: "Implement auth"
messagestringrequired

Dynamic message with approver name and timestamp. Suitable for Slack bot notifications.

Example: "Time request approved by Jane Doe at 2025-12-05 11:00:00"
metaobject(Meta)required
meta.​api_versionstring
Example: "2.0.0"
meta.​timestampstring(date-time)
Response
application/json
{ "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" } }

Reject Time Request

Request

Reject a pending time request. Requires a comment explaining the rejection reason.

Security
oauth2(Required scopes:
write
)
or apiKey
Path
timeRequestIdstringrequired
Bodyapplication/jsonrequired
workspace_idintegerrequired

Workspace ID (required)

commentstring<= 1000 charactersrequired

Comment explaining the rejection reason (required, max 1000 characters)

Example: "Time entry overlaps with existing approved time"
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"
  }'

Responses

Time request rejected successfully

Bodyapplication/json
successbooleanrequired
Example: true
dataobjectrequired
data.​idstringrequired

Encrypted time request ID

Example: "encoded_id_string"
data.​statusstringrequired

Time request status (always 'rejected' for reject endpoint)

Value"rejected"
Example: "rejected"
data.​user_idinteger or null

User ID associated with the time request

Example: 123
data.​user_namestring or null

Full name of the user associated with the time request

Example: "John Smith"
data.​user_emailstring or null

Email of the user associated with the time request

Example: "john.smith@example.com"
data.​project_idinteger or null

Project ID when contract/project exists

Example: 309836
data.​project_namestring or null

Project name when contract/project exists

Example: "Website Redesign"
data.​task_idinteger or null

Task ID when task exists

Example: 101
data.​task_titlestring or null

Task title when task exists

Example: "Implement auth"
messagestringrequired

Dynamic message with rejector name, timestamp, and rejection reason. Suitable for Slack bot notifications.

Example: "Time request rejected by Jane Doe at 2025-12-05 11:00:00 | Reason: Time entry overlaps with existing approved time"
metaobject(Meta)required
meta.​api_versionstring
Example: "2.0.0"
meta.​timestampstring(date-time)
Response
application/json
{ "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" } }

Leaves

Manage leave requests, balances, and policies

Operations

Expenses

Manage expenses and expense categories

Operations

Time Tracking

Start, stop, and monitor real-time tracking

Operations

Time Entries

Manage time entries - create, read, update, and delete time records

Operations

Reports

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

Operations

Webhooks

Manage webhooks for event notifications

Operations