Time Doctor API (1.0.0)

Download OpenAPI specification:Download

Introduction

Time Doctor provides an API that can be used to retrieve most of its reports and resources. Please reach out to support@timedoctor.com if you need any help with the API or have any suggestions regarding it.

RESTful APIs

The APIs use REST principles to create a standard and familiar interface. REST, which stands for REpresentational State Transformation, defines a set of principles for organizing web services using the HTTP protocol and a specific set of HTTP verbs or methods. The methods used in the Time Doctor API are:

  • POST: Create a resource
  • GET: Read a resource
  • PUT: Update a resource
  • DELETE: Delete a resource

Together these are often known as CRUD operations – Create, Read, Update, and Delete.

HTTPS

Time doctor API calls use the HTTPS protocol, the secure form of HTTP. All calls for version 1.0 begin with the prefix:

https://timedoctor.redoc.ly/

The request header for all API calls must include the following parameters:

  • "Accept: application/json"
  • "Content-Type: application/json" (for requests sending the body)

If the request body is not empty, it consists of a sequence of parameters given in JSON format. If a response body is returned, its content is given in JSON format as well.

Auth Token/Key

Note: Every call to a Time Doctor API must be authenticated using a "bearer token" based on OAuth 2.0. Tokens are generated by the following APIs:

  • Login - Authenticate with email and password
  • Register - Create new account and get token

The token is valid for six months. After this, you will need to create a new token. Once your token is generated, it must be provided as a header parameter under "Authorization" in every subsequent API call, with format JWT {token}.

Related Operations:

API Version

1.0.0

Request/Response Format

  • Dates are returned in ISO 8601 format e.g. 2019-08-24T14:15:22Z
  • Time is returned in seconds and by default, it is in the UTC timezone
  • Blank fields are generally included as a null or empty string instead of being omitted

Frequently Asked Questions

1) What are the date and time formats I should use when using the API?

Time Doctor API supports ISO 8601 date and time format i.e. YYYY-MM-DDT00:00:00Z (Z refers to UTC timezone)

2) How can I get the data in a different timezone than UTC?

Having timezone offset can result in performance issues for reasons such as daylight savings changes. Time Doctor stores and returns data only in the UTC timezone. You will need to convert the local time into UTC timezone before you pass it as a query parameter in the API call. For example: Jul 2nd, 2021 06:36 AM UTC+8 = Jul 1st, 2021 10:36 PM UTC time.

Related Operations:

3) What date range should I use when running a report for the same day?

Time Doctor API supports ISO date and time format. If you are running the report for the same day, you'll need to provide the date range as in example below:

from=2021-07-02T00:00:00Z&to=2021-07-03T00:00:00Z for Jul 2, 2021 UTC.

Related Operations:

4) What is the reason for blank titles for web & app activity records in the API result?

This could be due to an issue with the specific application permissions that the data wasn't captured. It could also be that the web & app tracking was disabled before it was enabled, so the blank titles are from the time when the setting was disabled.

Related Operations:

5) What is meant by "Tags" in the Time Doctor API documentation?

Tags refer to Groups in Time Doctor - organizational units for managing users.

Related Operations:

6) What is meant by "Files" in the Time Doctor API documentation?

Files refer to the screencasts (screenshots and screen videos) in Time Doctor.

Related Operations:

7) What is meant by "Categories" in the Time Doctor API documentation?

Categories refer to the productivity ratings in Time Doctor - classifications of applications and websites as productive, unproductive, neutral, or unrated.

Related Operations:

8) Why is the Disconnectivity report API not showing any data?

The Disconnectivity report works with Time Doctor application v3.4.8 and above. Please make sure the users are using this app version or the newest. Send an email to support@timedoctor.com in case you still experience any issues after upgrading the application version.

Related Operations:

9) Does the API provide or support webhooks?

We don't currently have webhooks. You may create custom scripts to call the API endpoints. Feel free to email support@timedoctor.com in case you have any questions.

Alternative Approaches:

10) How can I filter out response data for an API call?

Time Doctor API supports the filtering of data in some of the API calls. You can specify using the filter keyword and provide multiple data points that you want to get in the response, i.e., filter[name], filter[email], etc. You will see the filters query parameters in some of the API calls where you can use them.

Common Filtering Operations:

Authentication

ApiKeyAuth

API authentication using JWT bearer token. Format: "JWT {token}" in Authorization header

Security Scheme Type API Key
Header parameter name: Authorization

Auth

login, register, authorization

login

Authenticate user credentials and obtain an access token for API requests.

Authentication Flow:

  1. Submit email and password
  2. If 2FA is enabled, provide TOTP code from authenticator app
  3. Receive access token for subsequent API calls

Related Endpoints:

Request Body schema: application/json
email
required
string

Email address used for registration and login

password
required
string

User password. Must be at least 6 characters long

totpCode
string

Six-digit time-based one-time password from authenticator app (required if 2FA enabled)

permissions
string
Default: "write"

API token permissions. Possible values:

  • read -- read-only token: only GET requests allowed
  • write -- full access token: all HTTP methods (GET, POST, PUT, PATCH, DELETE) allowed

Responses

Request samples

Content type
application/json
{
  • "email": "string",
  • "password": "string",
  • "totpCode": "string",
  • "permissions": "write"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

register

Create a new user account using an invitation token.

This endpoint is used when a user has been invited to join an existing company. It creates a user profile and associates it with the company from the invitation.

Use Cases:

  • Accept company invitation and create account
  • Initialize user profile for invited team member

Related Endpoints:

  • Signup - Create account and new company (for company owners)
  • Invite User - Send invitation to new user
  • Login - Authenticate after registration
  • Update Profile - Modify user profile data
Request Body schema: application/json
name
required
string

User full name

email
required
string

Email address for new user account

timezone
string

User timezone identifier (e.g., "America/New_York")

password
required
string

Desired password. Must be at least 6 characters long

twoFactorAuth
boolean
Default: false

When true, enables two-factor authentication for this account

referrer
string

If specified, a referrer, where the user was brought from

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "timezone": "string",
  • "password": "string",
  • "twoFactorAuth": false,
  • "referrer": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

registerSignup

Create a new user account and company simultaneously.

This endpoint is used for new company owners who want to start using TimeDoctor. It creates both a user profile and a new company in a single operation.

Use Cases:

  • Start a new TimeDoctor account as company owner
  • Create company and become the first administrator

Related Endpoints:

Request Body schema: application/json
name
required
string

User full name

email
required
string

Email address for new user account

timezone
string

Company timezone identifier. Default: "Etc/UTC"

password
required
string

Desired password. Must be at least 6 characters long

referrer
string

If specified, a referrer, where the user was brought from

company
string

Name for newly created company. Default: "Someone's company"

trackingMode
required
string

Time tracking mode for the company

Enum: "mixed" "interactive" "silent"
interactiveTrackingMode
string

Interactive time tracking mode for the company

Enum: "manual" "automated"
pricingPlan
string
Default: "standard_new"

Pricing plan of company

Enum: "basic" "standard_new" "premium" "basic_annual" "standard_new_annual" "premium_annual"

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "timezone": "string",
  • "password": "string",
  • "referrer": "string",
  • "company": "string",
  • "trackingMode": "mixed",
  • "interactiveTrackingMode": "manual",
  • "pricingPlan": "standard_new"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

putProfile

Update user profile information (personal data not tied to any specific company).

This endpoint allows users to modify their personal information such as email, password, name, and timezone. Changes apply across all companies the user belongs to.

Updatable Fields:

  • Email address
  • Password
  • Full name
  • Timezone

Authentication: Requires valid access token.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
Request Body schema: application/json
name
required
string

User full name

email
required
string

Email address for new user account

timezone
string

User timezone identifier (e.g., "America/New_York")

password
required
string

Desired password. Must be at least 6 characters long

twoFactorAuth
boolean
Default: false

When true, enables two-factor authentication for this account

referrer
string

If specified, a referrer, where the user was brought from

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "timezone": "string",
  • "password": "string",
  • "twoFactorAuth": false,
  • "referrer": "string"
}

Response samples

Content type
application/json
{
  • "data": { }
}

restorePassword

Request a password reset email.

This endpoint sends a password reset link to the specified email address. The user can then follow the link to create a new password.

Process:

  1. Submit email address
  2. Receive password reset email
  3. Follow link in email to reset password

Related Endpoints:

query Parameters
email
required
string

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({email: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/profile/restore-password?${query}`,
  {method: 'GET'}
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

authorization

Retrieve comprehensive user and company information for the authenticated user.

This endpoint returns detailed information about:

  1. Company Details: Settings, features, and configuration
  2. User Details: Profile, permissions, and user-specific settings
  3. Company Information: Positions in available companies (when company parameter is specified)

Optional Features:

  • Resolve task and project names
  • Check screencast availability for managed users

Authentication: Requires valid access token.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
string

If specified, ID of company, which workspaces to list in companies; otherwise lists companies

task-project-names
string

If specified, the method will resolve the names for tasks and projects

Enum: "true" "false"
has-managed-screencasts
string

If specified, resolve whether screencasts enabled for you and your managed users

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  'task-project-names': 'true',
  'has-managed-screencasts': 'true'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/authorization?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

authorizationLogin

Authenticate and retrieve user/company information in a single request.

This endpoint combines the functionality of Login and Authorization, providing both authentication and detailed user/company information in one API call.

Returns:

  • Access token for subsequent API requests
  • Complete user profile and settings
  • Positions in companies: details and configuration

Use Cases:

  • Initial application login with full context
  • Reduce API calls by combining authentication and data retrieval

Related Endpoints:

Request Body schema: application/json
email
required
string

Email address used for registration and login

password
required
string

User password. Must be at least 6 characters long

totpCode
string

Six-digit time-based one-time password from authenticator app (required if 2FA enabled)

permissions
string
Default: "write"

API token permissions. Possible values:

  • read -- read-only token: only GET requests allowed
  • write -- full access token: all HTTP methods (GET, POST, PUT, PATCH, DELETE) allowed

Responses

Request samples

Content type
application/json
{
  • "email": "string",
  • "password": "string",
  • "totpCode": "string",
  • "permissions": "write"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

logout

End the current session and invalidate the access token.

This endpoint terminates the user session and makes the current access token unusable for future API requests. The user will need to login again to obtain a new token.

Security: Always call this endpoint when the user explicitly logs out to ensure proper session termination.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)

Responses

Request samples

const fetch = require('node-fetch');

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/logout`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

logoutById

Invalidate a specific access token by its unique identifier.

This endpoint allows users to terminate specific sessions without affecting other active sessions. Useful for managing multiple devices or revoking access from specific locations.

Use Cases:

  • Revoke access from a specific device
  • Terminate suspicious sessions
  • Manage multiple active sessions

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
id
string

token ID, returned by GET /api/1.0/users/tokens API

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({id: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/logout/by-id?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

login2faNew

Generate a new TOTP (Time-based One-Time Password) secret for two-factor authentication setup.

This endpoint initiates the 2FA setup process by generating a secret key and QR code. Users can scan the QR code with authenticator apps like Google Authenticator, Authy, or Microsoft Authenticator.

Setup Process:

  1. Call this endpoint to generate secret and QR code
  2. Scan QR code with authenticator app (or manually enter secret)
  3. Use Activate 2FA with a code from the app to complete setup

Returns:

  • QR code URL for easy scanning
  • Secret key for manual entry

Authentication: Requires valid access token.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)

Responses

Request samples

const fetch = require('node-fetch');

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/login/2fa/new`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "qrUrl": "string",
  • "totpKey": "string"
}

login2faActivate

Complete two-factor authentication setup by verifying the TOTP code.

After generating a 2FA secret using Generate 2FA Key and configuring your authenticator app, use this endpoint to verify the setup by providing a valid TOTP code.

Activation Process:

  1. Generate 2FA key using Generate 2FA Key
  2. Configure authenticator app with the secret
  3. Get current TOTP code from authenticator app
  4. Submit code to this endpoint to activate 2FA

Important: Once activated, all future logins will require a TOTP code from your authenticator app in addition to your password.

Authentication: Requires valid access token.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
Request Body schema: application/json
totpCode
required
string

Six-digit time-based one-time password from authenticator app

Responses

Request samples

Content type
application/json
{
  • "totpCode": "string"
}

Response samples

Content type
application/json
{
  • "success": true
}

Companies

companies

getCompanies

Retrieve list of companies where the authenticated user has administrative access.

This endpoint returns all companies that the user owns or administers. If the user has no administrative access to any company, an empty list is returned.

Use Cases:

  • List companies for account switching
  • Determine user's administrative scope
  • Company selection in multi-company scenarios

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)

Responses

Request samples

const fetch = require('node-fetch');

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/companies`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

createCompany

Create a new company with the authenticated user as owner.

This endpoint creates a new company and automatically assigns the current user as the company owner with full administrative privileges.

Initial Setup:

  • User becomes company owner
  • Default company settings applied
  • Ready to invite team members

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
string

If specified, ID of Company, user refers to. If omitted, the operation refers to global

Request Body schema: application/json
name
required
string

Name of the company

description
string

Optional description of the company

creator
string

Unique identifier of the user who created the company

timezone
string

IANA timezone name for the company (defaults to "Etc/UTC")

pricingPlan
string

Pricing plan tier for the company

Enum: "basic" "standard_new" "premium" "basic_annual" "standard_new_annual" "premium_annual"
newOwnerId
string

Unique identifier of the new company owner for ownership transfer

object

Tracking time information for silent companies

whoCanAccessScreenshots
string

Minimum access level required to view the screenshots page

Enum: "none" "owner" "owner_admin" "owner_manager" "owner_admin_manager" "owner_guest" "owner_admin_guest" "owner_manager_guest" "owner_admin_manager_guest"
whoCanAccessPayroll
string

Minimum access level required to view the payroll page

Enum: "none" "owner" "owner_admin" "owner_manager" "owner_admin_manager" "owner_user" "owner_admin_user" "owner_manager_user" "owner_admin_manager_user"
allowLeavesForRegularUsers
boolean

When true, regular users can apply for leaves without manager approval

mobileAppTracking
string

Mobile app tracking mode: "on" (always enabled), "off" (always disabled), "user" (user-controlled)

Enum: "on" "off" "user"

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "creator": "string",
  • "timezone": "string",
  • "pricingPlan": "basic",
  • "newOwnerId": "string",
  • "silentTrackingTimes": {
    },
  • "whoCanAccessScreenshots": "none",
  • "whoCanAccessPayroll": "none",
  • "allowLeavesForRegularUsers": true,
  • "mobileAppTracking": "on"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getCompany

Retrieve detailed information about a specific company.

This endpoint returns comprehensive company data including settings, configuration, and administrative information.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
companyId
required
string

Unique identifier of the company

Responses

Request samples

const fetch = require('node-fetch');

const companyId = 'YOUR_companyId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/companies/${companyId}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

putCompany

Update company information and settings.

This endpoint allows modification of company details such as name, settings, tracking preferences, and other configuration options.

Updatable Settings:

  • Company name and details
  • Tracking and monitoring settings
  • Work schedule defaults
  • Feature configurations

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
companyId
required
string

Unique identifier of the company

Request Body schema: application/json
name
required
string

Name of the company

description
string

Optional description of the company

creator
string

Unique identifier of the user who created the company

timezone
string

IANA timezone name for the company (defaults to "Etc/UTC")

pricingPlan
string

Pricing plan tier for the company

Enum: "basic" "standard_new" "premium" "basic_annual" "standard_new_annual" "premium_annual"
newOwnerId
string

Unique identifier of the new company owner for ownership transfer

object

Tracking time information for silent companies

whoCanAccessScreenshots
string

Minimum access level required to view the screenshots page

Enum: "none" "owner" "owner_admin" "owner_manager" "owner_admin_manager" "owner_guest" "owner_admin_guest" "owner_manager_guest" "owner_admin_manager_guest"
whoCanAccessPayroll
string

Minimum access level required to view the payroll page

Enum: "none" "owner" "owner_admin" "owner_manager" "owner_admin_manager" "owner_user" "owner_admin_user" "owner_manager_user" "owner_admin_manager_user"
allowLeavesForRegularUsers
boolean

When true, regular users can apply for leaves without manager approval

mobileAppTracking
string

Mobile app tracking mode: "on" (always enabled), "off" (always disabled), "user" (user-controlled)

Enum: "on" "off" "user"

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "creator": "string",
  • "timezone": "string",
  • "pricingPlan": "basic",
  • "newOwnerId": "string",
  • "silentTrackingTimes": {
    },
  • "whoCanAccessScreenshots": "none",
  • "whoCanAccessPayroll": "none",
  • "allowLeavesForRegularUsers": true,
  • "mobileAppTracking": "on"
}

Response samples

Content type
application/json
{
  • "data": { }
}

getCompanyTimezones

Retrieve timezone information for all users in the company.

This endpoint returns the timezone settings for each user in the company, useful for scheduling, reporting, and time-based operations across different regions.

Use Cases:

  • Schedule meetings across timezones
  • Generate timezone-aware reports
  • Coordinate global teams

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
companyId
required
string

Unique identifier of the company

query Parameters
sort-tz
string

When true, sorts timezones with company timezone listed first

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({'sort-tz': 'true'}).toString();

const companyId = 'YOUR_companyId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/companies/${companyId}/timezones?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

getCompanyDirectorySync

Retrieve directory synchronization configuration for the company.

This endpoint returns settings for automatic user provisioning and synchronization with external directory services (e.g., Active Directory, LDAP, SCIM).

Returns:

  • Directory sync provider settings
  • Synchronization rules and mappings
  • Connection status and configuration

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
companyId
required
string

Unique identifier of the company

Responses

Request samples

const fetch = require('node-fetch');

const companyId = 'YOUR_companyId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/companies/${companyId}/directory-sync`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

putCompanyDirectorySync

Configure or update directory synchronization settings for the company.

This endpoint sets up automatic user provisioning and synchronization with external directory services, enabling seamless user management across systems.

Configuration Options:

  • Directory service provider (AD, LDAP, SCIM)
  • Synchronization rules and schedules
  • User attribute mappings
  • Group and role synchronization

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
companyId
required
string

Unique identifier of the company

Request Body schema: application/json
object (CompanyDirectorySyncReq)

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "data": { }
}

Users

users, invitations

getManagedUsers

Retrieve list of users managed by the specified user.

This endpoint returns all users that the specified user has administrative rights over. Useful for managers and administrators to see their team members.

Use Cases:

  • Get list of team members for a manager
  • Retrieve users under supervision

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of user (use "me" or empty string to reference caller)

query Parameters
company
required
string

ID of Company, user refers to.

self
string

When true, returns user data of userId in self reply field

Enum: "true" "false"
detail
string

Level of detail in reply (controls which fields are included)

Enum: "id" "name" "info" "alias" "tags" "settings" "managers"
task-project-names
string

When true, resolves task and project names instead of returning only IDs

Enum: "true" "false"
no-tag
string

When true, returns only users without any tag assignments

Enum: "true" "false"
include-archived-users
boolean
Default: false

When true, includes archived users in results. Archived users are hidden by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "email" "name" "tag" "keywords" "role" "showOnReports" "invitePending" "inviteAccepted" "payrollAccess" "screenshots" "videos" "created" "hostName" "os" "hiredAt" "lastTrack" "lastActiveTrack" "clientVersion" "ip" "show-on-reports" "payroll-access" "host-name" "hired-at" "last-track" "last-active-track" "client-version" "invite-pending" "invite-accepted" "tag-count" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_showOnReports" "_invitePending" "_inviteAccepted" "_payrollAccess" "_screenshots" "_videos" "_created" "_hostName" "_os" "_hiredAt" "_lastTrack" "_lastActiveTrack" "_clientVersion" "_ip" "_show-on-reports" "_payroll-access" "_host-name" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_invite-pending" "_invite-accepted" "_tag-count"
filter[id]
string

"string" -- exact match

filter[email]
string

"string" -- starts with

filter[name]
string

"string" -- starts with

filter[tag]
string

"string" -- exact match

filter[keywords]
string

match string

filter[role]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[showOnReports]
boolean

boolean value

filter[invitePending]
boolean

boolean value

filter[inviteAccepted]
boolean

boolean value

filter[payrollAccess]
boolean

boolean value

filter[screenshots]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[videos]
string

"string" -- exact match

filter[created]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[hostName]
string

"string" -- starts with

filter[os]
string

"string" -- exact match

filter[hiredAt]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastActiveTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clientVersion]
string

"string" -- exact match

filter[ip]
string

"string" -- starts with

filter[show-on-reports]
boolean

boolean value

filter[payroll-access]
boolean

boolean value

filter[host-name]
string

"string" -- starts with

filter[hired-at]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-active-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[client-version]
string

"string" -- exact match

filter[invite-pending]
boolean

boolean value

filter[invite-accepted]
boolean

boolean value

filter[tag-count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  self: 'true',
  detail: 'id',
  'task-project-names': 'true',
  'no-tag': 'true',
  'include-archived-users': 'false',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[id]': 'string',
  'filter[email]': 'string',
  'filter[name]': 'string',
  'filter[tag]': 'string',
  'filter[keywords]': 'string',
  'filter[role]': 'string',
  'filter[showOnReports]': 'true',
  'filter[invitePending]': 'true',
  'filter[inviteAccepted]': 'true',
  'filter[payrollAccess]': 'true',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[hostName]': 'string',
  'filter[os]': 'string',
  'filter[hiredAt]': 'string',
  'filter[lastTrack]': 'string',
  'filter[lastActiveTrack]': 'string',
  'filter[clientVersion]': 'string',
  'filter[ip]': 'string',
  'filter[show-on-reports]': 'true',
  'filter[payroll-access]': 'true',
  'filter[host-name]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[invite-pending]': 'true',
  'filter[invite-accepted]': 'true',
  'filter[tag-count]': 'string'
}).toString();

const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users/${userId}/managed?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    },
  • "self": {
    }
}

getUsers

Retrieve a list of users in the company with optional filtering and pagination.

This endpoint supports multiple query options to filter and customize the user list. You can search by email, name, or other criteria, and control the level of detail returned.

Features:

  • Filter by email, name, or user IDs
  • Include/exclude deleted users
  • Control detail level (basic info vs full details)
  • Pagination support

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
string

If specified, ID of Company, user refers to. If omitted, the operation refers to global

user
string

Comma-separated list of user IDs to resolve. Reply array indexes match input list indexes (alias: id)

manager
string

Unique identifier of manager. When specified, returns only users managed by this manager

tag
string

Unique identifier of tag. When specified, returns only users assigned to this tag

self
string

When true, returns user data of userId in self reply field

Enum: "true" "false"
detail
string

Level of detail in reply (controls which fields are included)

Enum: "id" "name" "info" "alias" "tags" "settings" "managers"
task-project-names
string

When true, resolves task and project names instead of returning only IDs

Enum: "true" "false"
no-tag
string

When true, returns only users without any tag assignments

Enum: "true" "false"
include-archived-users
boolean
Default: false

When true, includes archived users in results. Archived users are hidden by default

deleted
string

When true, operates on disabled (deleted) users. When false, operates on active users

Enum: "true" "false"
page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "email" "name" "tag" "keywords" "role" "showOnReports" "invitePending" "inviteAccepted" "payrollAccess" "screenshots" "videos" "created" "hostName" "os" "hiredAt" "lastTrack" "lastActiveTrack" "clientVersion" "ip" "show-on-reports" "payroll-access" "host-name" "hired-at" "last-track" "last-active-track" "client-version" "invite-pending" "invite-accepted" "tag-count" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_showOnReports" "_invitePending" "_inviteAccepted" "_payrollAccess" "_screenshots" "_videos" "_created" "_hostName" "_os" "_hiredAt" "_lastTrack" "_lastActiveTrack" "_clientVersion" "_ip" "_show-on-reports" "_payroll-access" "_host-name" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_invite-pending" "_invite-accepted" "_tag-count"
filter[id]
string

"string" -- exact match

filter[email]
string

"string" -- starts with

filter[name]
string

"string" -- starts with

filter[tag]
string

"string" -- exact match

filter[keywords]
string

match string

filter[role]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[showOnReports]
boolean

boolean value

filter[invitePending]
boolean

boolean value

filter[inviteAccepted]
boolean

boolean value

filter[payrollAccess]
boolean

boolean value

filter[screenshots]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[videos]
string

"string" -- exact match

filter[created]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[hostName]
string

"string" -- starts with

filter[os]
string

"string" -- exact match

filter[hiredAt]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastActiveTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clientVersion]
string

"string" -- exact match

filter[ip]
string

"string" -- starts with

filter[show-on-reports]
boolean

boolean value

filter[payroll-access]
boolean

boolean value

filter[host-name]
string

"string" -- starts with

filter[hired-at]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-active-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[client-version]
string

"string" -- exact match

filter[invite-pending]
boolean

boolean value

filter[invite-accepted]
boolean

boolean value

filter[tag-count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  manager: 'string',
  tag: 'string',
  self: 'true',
  detail: 'id',
  'task-project-names': 'true',
  'no-tag': 'true',
  'include-archived-users': 'false',
  deleted: 'true',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[id]': 'string',
  'filter[email]': 'string',
  'filter[name]': 'string',
  'filter[tag]': 'string',
  'filter[keywords]': 'string',
  'filter[role]': 'string',
  'filter[showOnReports]': 'true',
  'filter[invitePending]': 'true',
  'filter[inviteAccepted]': 'true',
  'filter[payrollAccess]': 'true',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[hostName]': 'string',
  'filter[os]': 'string',
  'filter[hiredAt]': 'string',
  'filter[lastTrack]': 'string',
  'filter[lastActiveTrack]': 'string',
  'filter[clientVersion]': 'string',
  'filter[ip]': 'string',
  'filter[show-on-reports]': 'true',
  'filter[payroll-access]': 'true',
  'filter[host-name]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[invite-pending]': 'true',
  'filter[invite-accepted]': 'true',
  'filter[tag-count]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    },
  • "self": {
    }
}

getUser

Retrieve detailed information about a specific user by their ID.

This endpoint returns comprehensive user information including profile data, company-specific settings, and permissions.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of user (use "me" or empty string to reference caller)

query Parameters
company
string

If specified, ID of Company, user refers to. If omitted, the operation refers to global

detail
string

Level of detail in reply (controls which fields are included)

Enum: "id" "name" "info" "alias" "tags" "settings" "managers"
task-project-names
string

When true, resolves task and project names instead of returning only IDs

Enum: "true" "false"
no-tag
string

When true, returns only users without any tag assignments

Enum: "true" "false"
include-archived-users
boolean
Default: false

When true, includes archived users in results. Archived users are hidden by default

deleted
string

When true, operates on disabled (deleted) users. When false, operates on active users

Enum: "true" "false"
page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "email" "name" "tag" "keywords" "role" "showOnReports" "invitePending" "inviteAccepted" "payrollAccess" "screenshots" "videos" "created" "hostName" "os" "hiredAt" "lastTrack" "lastActiveTrack" "clientVersion" "ip" "show-on-reports" "payroll-access" "host-name" "hired-at" "last-track" "last-active-track" "client-version" "invite-pending" "invite-accepted" "tag-count" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_showOnReports" "_invitePending" "_inviteAccepted" "_payrollAccess" "_screenshots" "_videos" "_created" "_hostName" "_os" "_hiredAt" "_lastTrack" "_lastActiveTrack" "_clientVersion" "_ip" "_show-on-reports" "_payroll-access" "_host-name" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_invite-pending" "_invite-accepted" "_tag-count"
filter[id]
string

"string" -- exact match

filter[email]
string

"string" -- starts with

filter[name]
string

"string" -- starts with

filter[tag]
string

"string" -- exact match

filter[keywords]
string

match string

filter[role]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[showOnReports]
boolean

boolean value

filter[invitePending]
boolean

boolean value

filter[inviteAccepted]
boolean

boolean value

filter[payrollAccess]
boolean

boolean value

filter[screenshots]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[videos]
string

"string" -- exact match

filter[created]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[hostName]
string

"string" -- starts with

filter[os]
string

"string" -- exact match

filter[hiredAt]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastActiveTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clientVersion]
string

"string" -- exact match

filter[ip]
string

"string" -- starts with

filter[show-on-reports]
boolean

boolean value

filter[payroll-access]
boolean

boolean value

filter[host-name]
string

"string" -- starts with

filter[hired-at]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-active-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[client-version]
string

"string" -- exact match

filter[invite-pending]
boolean

boolean value

filter[invite-accepted]
boolean

boolean value

filter[tag-count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  detail: 'id',
  'task-project-names': 'true',
  'no-tag': 'true',
  'include-archived-users': 'false',
  deleted: 'true',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[id]': 'string',
  'filter[email]': 'string',
  'filter[name]': 'string',
  'filter[tag]': 'string',
  'filter[keywords]': 'string',
  'filter[role]': 'string',
  'filter[showOnReports]': 'true',
  'filter[invitePending]': 'true',
  'filter[inviteAccepted]': 'true',
  'filter[payrollAccess]': 'true',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[hostName]': 'string',
  'filter[os]': 'string',
  'filter[hiredAt]': 'string',
  'filter[lastTrack]': 'string',
  'filter[lastActiveTrack]': 'string',
  'filter[clientVersion]': 'string',
  'filter[ip]': 'string',
  'filter[show-on-reports]': 'true',
  'filter[payroll-access]': 'true',
  'filter[host-name]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[invite-pending]': 'true',
  'filter[invite-accepted]': 'true',
  'filter[tag-count]': 'string'
}).toString();

const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users/${userId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

putUser

Update user settings and configuration within a company.

This endpoint allows modification of company-specific user settings such as role, permissions, work schedule, tracking settings, and other company-related configurations.

Updatable Settings:

  • User role and permissions
  • Work schedule and timezone
  • Tracking and monitoring settings
  • Screenshot and activity tracking preferences
  • Project and task assignments

Note: For personal profile updates (email, password, name), use Update Profile.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of user (use "me" or empty string to reference caller)

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on disabled (deleted) users. When false, operates on active users

Enum: "true" "false"
Request Body schema: application/json
name
string

User's name

role
string

User role in company (user, manager, admin, or owner)

Enum: "owner" "admin" "guest" "manager" "user"
onlyProjectIds
Array of strings

Project access restriction: array of project IDs user can access, or empty array to allow all projects. When set, user can only view/work on specified projects

employeeId
string

The ID of the employee at the company where they work

exists
boolean
active
boolean

Determines if the invited user is ready to work without post-confirmaton

screenshots
integer <int32>

The interval (in seconds) at which screenshots are taken of the user's screen(s) while they're working.

videos
string

"Video" means that a continuous video of the user's computer screen(s) will be taken while working, broken into 3-minute chunks. "Off" means that no videos will be recorded.

workCheckInterval
integer <int32>

How many seconds interval before checking if the user is working

canEditTime
string

Regular users edit their own time, managers edit their own time and the time of the people they manage while admins edit anyone's time.

poorTimeusePopup
boolean

Show pop up if the user is not making proper use of their time

allowDeleteScreenshots
boolean

Allows users to delete screenshots and video recordings that are taken of their screen. When one is deleted, the associated work time is also removed.

tasksMode
string

Determines if a user is allowed to track tasks or not. There are two options: "preset" and "off"

trackingMode
string

Determines how the user's time is tracked. There are two settings: "silent" and "interactive". Interactive mode allows the user select the tasks to track time on. Silent mode just records all activities non-stop.

interactiveTrackingMode
string

Determines how the user's time is tracked. There are two settings: "automated" and "manual". Manual mode allows the user select the tasks to track time on. Automated mode start time tracking automatically.

emailSubCount
integer <int32>

Count of email subscriptions

showOnReports
boolean

Sets if the user should show on the report like the Daily Report email

emailReports
string

Sets if the admin will get email report

weeklyEmailReports
boolean

Sets if the user will get weekly email report

jobTitle
string

The job title of the employee at the company

blurScreenshots
boolean

Screenshots taken of the user's computer and activity will be blurred.

allowNoBreak
boolean

When a user is using certain call/video applications like Zoom for work, do not put the user on break

trackInternetConnectivity
boolean

Monitor user internet connectivity and notify them if it is poor

stripUrlQuery
boolean

This removes query parameters from visited URLs (everything after “?”) that are stored and shown in reports. You might want to enable it due to privacy and security concerns.

allowAdminSID
boolean

Allow app to run on administrator accounts

hideScreencasts
boolean

Allow the user see screencasts or not

payrollAccess
boolean

Allow the user access the payroll feature. Only the company owner can set this for a user

payrollFeature
boolean

Only the company owner can turn the Payroll feature on or off.

workScheduleFeature
boolean

Turn the Work Schedule feature on or off for a company.

trackConnectivity
boolean

Start tracking connectivity data for the company.

allowManagerTagCategories
boolean

Allow managers to set productivity ratings

allowManagerProjectsTasks
boolean

Allow managers to create projects and tasks

allowManagerInviteUsers
boolean

Allow managers to invite new users

allowManagerWorkSchedules
boolean

Allow managers to set their work schedules and the schedules of people they manage

allowUsersActivitySummaryReport
boolean

Allow end-users to see Activity Summary reports

allowLeavesForRegularUsers
boolean

Allow regular users to apply for the leaves

forceAutostart
boolean

Force desktop apps to start tracking automatically at the start of each day

firstDayOfWeek
boolean

Set first day of week (0=Sunday; 1 by default)

webAndAppTracking
string

Set tracking type (extended by default)

Enum: "off" "basic" "extended" "custom"
mobileAppTracking
string

Controls mobile app tracking settings. "on" - always enabled, "off" - always disabled, "user" - controlled by user settings

Enum: "on" "off" "user"
allowMobileAppTracking
boolean

Indicates if mobile app tracking is allowed based on mobileAppTracking setting

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "role": "owner",
  • "onlyProjectIds": [
    ],
  • "employeeId": "string",
  • "exists": true,
  • "active": true,
  • "screenshots": 0,
  • "videos": "string",
  • "workCheckInterval": 0,
  • "canEditTime": "string",
  • "poorTimeusePopup": true,
  • "allowDeleteScreenshots": true,
  • "tasksMode": "string",
  • "trackingMode": "string",
  • "interactiveTrackingMode": "string",
  • "emailSubCount": 0,
  • "showOnReports": true,
  • "emailReports": "string",
  • "weeklyEmailReports": true,
  • "jobTitle": "string",
  • "blurScreenshots": true,
  • "allowNoBreak": true,
  • "trackInternetConnectivity": true,
  • "stripUrlQuery": true,
  • "allowAdminSID": true,
  • "hideScreencasts": true,
  • "payrollAccess": true,
  • "payrollFeature": true,
  • "workScheduleFeature": true,
  • "trackConnectivity": true,
  • "allowManagerTagCategories": true,
  • "allowManagerProjectsTasks": true,
  • "allowManagerInviteUsers": true,
  • "allowManagerWorkSchedules": true,
  • "allowUsersActivitySummaryReport": true,
  • "allowLeavesForRegularUsers": true,
  • "forceAutostart": true,
  • "firstDayOfWeek": true,
  • "webAndAppTracking": "off",
  • "mobileAppTracking": "on",
  • "allowMobileAppTracking": true
}

Response samples

Content type
application/json
{
  • "data": { }
}

deleteUser

Remove a user from the company or permanently delete their data.

This endpoint supports two deletion modes:

  1. Soft Delete (default): User is marked as deleted but data is retained
  2. Permanent Delete: User and all associated data are permanently removed

Important: Permanent deletion cannot be undone. Use with caution.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of user (use "me" or empty string to reference caller)

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on disabled (deleted) users. When false, operates on active users

Enum: "true" "false"
delete-permanently
string

When true, permanently deletes user and all associated data from system (irreversible)

Enum: "true" "false"
reason
string

Reason for deleting user (for audit trail)

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  deleted: 'true',
  'delete-permanently': 'true',
  reason: 'string'
}).toString();

const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users/${userId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

postInvitation

Send an invitation email to a new user to join the company.

This endpoint creates an invitation token and sends an email to the specified address. The recipient can use the token to register and join the company.

Process:

  1. Submit user email and optional settings
  2. System generates invitation token
  3. Invitation email sent to user
  4. User registers using Register endpoint

Billing Note: If you have paid for the month and add more users later, you'll be charged a prorated amount for the remainder of the month for each new user.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
name
string

Full name of invited user (optional, can be set during registration)

email
required
string

Email address of invited user (required, used for invitation delivery)

role
string

Role to assign to invited user in company (user, manager, admin, or owner)

Enum: "owner" "admin" "guest" "manager" "user"
employeeId
string

Employee ID of invited user (optional, for HR integration)

noSendEmail
string

When true, creates invitation without sending email (user must be invited manually)

Enum: "true" "false"
onlyProjectIds
Array of strings

Project access restriction for invited user. When specified, user can only access these projects

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "role": "owner",
  • "employeeId": "string",
  • "noSendEmail": "true",
  • "onlyProjectIds": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getInvitations

Check if an invitation exists for a specific email address.

This endpoint verifies whether a user has been invited to the company and returns the invitation status.

Use Cases:

  • Verify invitation before sending duplicate
  • Check invitation status
  • Validate email before registration

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

email
required
string

Email address of user to query

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  email: 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/invitations/exists?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

postInvitationsBulk

Send multiple user invitations in a single request.

This endpoint allows you to invite multiple users to the company simultaneously, which is more efficient than sending individual invitations.

Features:

  • Invite multiple users at once
  • Set individual settings for each user
  • Receive detailed results for each invitation

Use Cases:

  • Onboard entire team at once
  • Import users from external system
  • Batch user provisioning

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
required
Array of objects

Array of users to invite in bulk operation

noSendEmail
string

When true, creates all invitations without sending emails (users must be invited manually)

Enum: "true" "false"
onlyProjectIds
Array of strings

Project access restriction applied to all invited users. When specified, users can only access these projects

tagIds
Array of strings

Array of tag IDs to assign to all invited users

Responses

Request samples

Content type
application/json
{
  • "users": [
    ],
  • "noSendEmail": "true",
  • "onlyProjectIds": [
    ],
  • "tagIds": [
    ]
}

Response samples

Content type
application/json
{
  • "data": [
    ]
}

getUsersTotals

Retrieve comprehensive configuration details for all users in the company.

This endpoint returns detailed settings and configurations for all company users, useful for administrative overview and bulk configuration management.

Returns:

  • User settings and preferences
  • Tracking configurations
  • Role and permission details
  • Work schedule information

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
string

If specified, ID of Company, user refers to. If omitted, the operation refers to global

self
string

When true, returns user data of userId in self reply field

Enum: "true" "false"
detail
string

Level of detail in reply (controls which fields are included)

Enum: "id" "name" "info" "alias" "tags" "settings" "managers"
task-project-names
string

When true, resolves task and project names instead of returning only IDs

Enum: "true" "false"
no-tag
string

When true, returns only users without any tag assignments

Enum: "true" "false"
include-archived-users
boolean
Default: false

When true, includes archived users in results. Archived users are hidden by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "email" "name" "tag" "keywords" "role" "showOnReports" "invitePending" "inviteAccepted" "payrollAccess" "screenshots" "videos" "created" "hostName" "os" "hiredAt" "lastTrack" "lastActiveTrack" "clientVersion" "ip" "show-on-reports" "payroll-access" "host-name" "hired-at" "last-track" "last-active-track" "client-version" "invite-pending" "invite-accepted" "tag-count" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_showOnReports" "_invitePending" "_inviteAccepted" "_payrollAccess" "_screenshots" "_videos" "_created" "_hostName" "_os" "_hiredAt" "_lastTrack" "_lastActiveTrack" "_clientVersion" "_ip" "_show-on-reports" "_payroll-access" "_host-name" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_invite-pending" "_invite-accepted" "_tag-count"
filter[id]
string

"string" -- exact match

filter[email]
string

"string" -- starts with

filter[name]
string

"string" -- starts with

filter[tag]
string

"string" -- exact match

filter[keywords]
string

match string

filter[role]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[showOnReports]
boolean

boolean value

filter[invitePending]
boolean

boolean value

filter[inviteAccepted]
boolean

boolean value

filter[payrollAccess]
boolean

boolean value

filter[screenshots]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[videos]
string

"string" -- exact match

filter[created]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[hostName]
string

"string" -- starts with

filter[os]
string

"string" -- exact match

filter[hiredAt]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastActiveTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clientVersion]
string

"string" -- exact match

filter[ip]
string

"string" -- starts with

filter[show-on-reports]
boolean

boolean value

filter[payroll-access]
boolean

boolean value

filter[host-name]
string

"string" -- starts with

filter[hired-at]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-active-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[client-version]
string

"string" -- exact match

filter[invite-pending]
boolean

boolean value

filter[invite-accepted]
boolean

boolean value

filter[tag-count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  self: 'true',
  detail: 'id',
  'task-project-names': 'true',
  'no-tag': 'true',
  'include-archived-users': 'false',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[id]': 'string',
  'filter[email]': 'string',
  'filter[name]': 'string',
  'filter[tag]': 'string',
  'filter[keywords]': 'string',
  'filter[role]': 'string',
  'filter[showOnReports]': 'true',
  'filter[invitePending]': 'true',
  'filter[inviteAccepted]': 'true',
  'filter[payrollAccess]': 'true',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[hostName]': 'string',
  'filter[os]': 'string',
  'filter[hiredAt]': 'string',
  'filter[lastTrack]': 'string',
  'filter[lastActiveTrack]': 'string',
  'filter[clientVersion]': 'string',
  'filter[ip]': 'string',
  'filter[show-on-reports]': 'true',
  'filter[payroll-access]': 'true',
  'filter[host-name]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[invite-pending]': 'true',
  'filter[invite-accepted]': 'true',
  'filter[tag-count]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users/totals?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    },
  • "self": {
    }
}

getUsersTokens

Retrieve information about all active authentication tokens for the current user.

This endpoint lists all active sessions/tokens, including details about when and where each token was created. Useful for security auditing and session management.

Returns:

  • Token IDs
  • Creation timestamps
  • Device/location information (if available)
  • Last activity time

Use Cases:

  • Security audit of active sessions
  • Identify suspicious login locations
  • Manage multiple device sessions

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "createdAt" "expiresAt" "_createdAt" "_expiresAt"
filter[createdAt]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[expiresAt]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  page: 'string',
  limit: 'string',
  sort: 'createdAt',
  'filter[createdAt]': 'string',
  'filter[expiresAt]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users/tokens?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

getUsersV1_1

Retrieve a list of users with enhanced features including idle status information.

This is an enhanced version of Get Users that includes additional real-time information about user activity status.

Enhanced Features:

  • Real-time idle/active status
  • Last activity timestamp
  • Current work status

Use Cases:

  • Monitor team activity in real-time
  • Check who is currently working
  • Identify idle team members

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
string

If specified, ID of Company, user refers to. If omitted, the operation refers to global

user
string

Comma-separated list of user IDs to resolve. Reply array indexes match input list indexes (alias: id)

manager
string

Unique identifier of manager. When specified, returns only users managed by this manager

tag
string

Unique identifier of tag. When specified, returns only users assigned to this tag

self
string

When true, returns user data of userId in self reply field

Enum: "true" "false"
detail
string

Level of detail in reply (controls which fields are included)

Enum: "id" "name" "info" "alias" "tags" "settings" "managers"
task-project-names
string

When true, resolves task and project names instead of returning only IDs

Enum: "true" "false"
no-tag
string

When true, returns only users without any tag assignments

Enum: "true" "false"
include-archived-users
boolean
Default: false

When true, includes archived users in results. Archived users are hidden by default

deleted
string

When true, operates on disabled (deleted) users. When false, operates on active users

Enum: "true" "false"
page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "email" "name" "tag" "keywords" "role" "showOnReports" "invitePending" "inviteAccepted" "payrollAccess" "screenshots" "videos" "created" "hostName" "os" "hiredAt" "lastTrack" "lastActiveTrack" "clientVersion" "ip" "show-on-reports" "payroll-access" "host-name" "hired-at" "last-track" "last-active-track" "client-version" "invite-pending" "invite-accepted" "tag-count" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_showOnReports" "_invitePending" "_inviteAccepted" "_payrollAccess" "_screenshots" "_videos" "_created" "_hostName" "_os" "_hiredAt" "_lastTrack" "_lastActiveTrack" "_clientVersion" "_ip" "_show-on-reports" "_payroll-access" "_host-name" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_invite-pending" "_invite-accepted" "_tag-count"
filter[id]
string

"string" -- exact match

filter[email]
string

"string" -- starts with

filter[name]
string

"string" -- starts with

filter[tag]
string

"string" -- exact match

filter[keywords]
string

match string

filter[role]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[showOnReports]
boolean

boolean value

filter[invitePending]
boolean

boolean value

filter[inviteAccepted]
boolean

boolean value

filter[payrollAccess]
boolean

boolean value

filter[screenshots]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[videos]
string

"string" -- exact match

filter[created]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[hostName]
string

"string" -- starts with

filter[os]
string

"string" -- exact match

filter[hiredAt]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastActiveTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clientVersion]
string

"string" -- exact match

filter[ip]
string

"string" -- starts with

filter[show-on-reports]
boolean

boolean value

filter[payroll-access]
boolean

boolean value

filter[host-name]
string

"string" -- starts with

filter[hired-at]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-active-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[client-version]
string

"string" -- exact match

filter[invite-pending]
boolean

boolean value

filter[invite-accepted]
boolean

boolean value

filter[tag-count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

include_idle_status
string

When true, includes idle status by joining with stats collection (adds 30-min window analysis)

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  manager: 'string',
  tag: 'string',
  self: 'true',
  detail: 'id',
  'task-project-names': 'true',
  'no-tag': 'true',
  'include-archived-users': 'false',
  deleted: 'true',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[id]': 'string',
  'filter[email]': 'string',
  'filter[name]': 'string',
  'filter[tag]': 'string',
  'filter[keywords]': 'string',
  'filter[role]': 'string',
  'filter[showOnReports]': 'true',
  'filter[invitePending]': 'true',
  'filter[inviteAccepted]': 'true',
  'filter[payrollAccess]': 'true',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[hostName]': 'string',
  'filter[os]': 'string',
  'filter[hiredAt]': 'string',
  'filter[lastTrack]': 'string',
  'filter[lastActiveTrack]': 'string',
  'filter[clientVersion]': 'string',
  'filter[ip]': 'string',
  'filter[show-on-reports]': 'true',
  'filter[payroll-access]': 'true',
  'filter[host-name]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[invite-pending]': 'true',
  'filter[invite-accepted]': 'true',
  'filter[tag-count]': 'string',
  include_idle_status: 'true'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/users?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    },
  • "self": {
    }
}

getUserV1_1

Retrieve detailed user information with enhanced idle status data.

This is an enhanced version of Get User that includes additional real-time activity and idle status information.

Enhanced Features:

  • Current idle/active status
  • Last activity timestamp
  • Real-time work status

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of user (use "me" or empty string to reference caller)

query Parameters
company
string

If specified, ID of Company, user refers to. If omitted, the operation refers to global

detail
string

Level of detail in reply (controls which fields are included)

Enum: "id" "name" "info" "alias" "tags" "settings" "managers"
task-project-names
string

When true, resolves task and project names instead of returning only IDs

Enum: "true" "false"
no-tag
string

When true, returns only users without any tag assignments

Enum: "true" "false"
include-archived-users
boolean
Default: false

When true, includes archived users in results. Archived users are hidden by default

deleted
string

When true, operates on disabled (deleted) users. When false, operates on active users

Enum: "true" "false"
page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "email" "name" "tag" "keywords" "role" "showOnReports" "invitePending" "inviteAccepted" "payrollAccess" "screenshots" "videos" "created" "hostName" "os" "hiredAt" "lastTrack" "lastActiveTrack" "clientVersion" "ip" "show-on-reports" "payroll-access" "host-name" "hired-at" "last-track" "last-active-track" "client-version" "invite-pending" "invite-accepted" "tag-count" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_showOnReports" "_invitePending" "_inviteAccepted" "_payrollAccess" "_screenshots" "_videos" "_created" "_hostName" "_os" "_hiredAt" "_lastTrack" "_lastActiveTrack" "_clientVersion" "_ip" "_show-on-reports" "_payroll-access" "_host-name" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_invite-pending" "_invite-accepted" "_tag-count"
filter[id]
string

"string" -- exact match

filter[email]
string

"string" -- starts with

filter[name]
string

"string" -- starts with

filter[tag]
string

"string" -- exact match

filter[keywords]
string

match string

filter[role]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[showOnReports]
boolean

boolean value

filter[invitePending]
boolean

boolean value

filter[inviteAccepted]
boolean

boolean value

filter[payrollAccess]
boolean

boolean value

filter[screenshots]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[videos]
string

"string" -- exact match

filter[created]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[hostName]
string

"string" -- starts with

filter[os]
string

"string" -- exact match

filter[hiredAt]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastActiveTrack]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clientVersion]
string

"string" -- exact match

filter[ip]
string

"string" -- starts with

filter[show-on-reports]
boolean

boolean value

filter[payroll-access]
boolean

boolean value

filter[host-name]
string

"string" -- starts with

filter[hired-at]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[last-active-track]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[client-version]
string

"string" -- exact match

filter[invite-pending]
boolean

boolean value

filter[invite-accepted]
boolean

boolean value

filter[tag-count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

include_idle_status
string

When true, includes idle status by joining with stats collection (adds 30-min window analysis)

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  detail: 'id',
  'task-project-names': 'true',
  'no-tag': 'true',
  'include-archived-users': 'false',
  deleted: 'true',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[id]': 'string',
  'filter[email]': 'string',
  'filter[name]': 'string',
  'filter[tag]': 'string',
  'filter[keywords]': 'string',
  'filter[role]': 'string',
  'filter[showOnReports]': 'true',
  'filter[invitePending]': 'true',
  'filter[inviteAccepted]': 'true',
  'filter[payrollAccess]': 'true',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[hostName]': 'string',
  'filter[os]': 'string',
  'filter[hiredAt]': 'string',
  'filter[lastTrack]': 'string',
  'filter[lastActiveTrack]': 'string',
  'filter[clientVersion]': 'string',
  'filter[ip]': 'string',
  'filter[show-on-reports]': 'true',
  'filter[payroll-access]': 'true',
  'filter[host-name]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[invite-pending]': 'true',
  'filter[invite-accepted]': 'true',
  'filter[tag-count]': 'string',
  include_idle_status: 'true'
}).toString();

const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/users/${userId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

Projects

status, activity, stats

getProjects

Retrieve a list of all projects in the company.

This endpoint returns all projects with optional filtering and pagination. Projects are used to organize and categorize work activities.

Features:

  • Search by project name
  • Filter by status (active/archived)
  • Pagination support

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

projects
string

Comma-separated list of project IDs to retrieve. When specified, only these projects are returned

all
string

When true, returns all projects in the company instead of only assigned projects

Enum: "true" "false"
show-integration
string

When true, includes projects synced from external integrations (e.g., Jira, Asana)

Enum: "true" "false"
allow-unassigned
string

When true, includes projects that the user is not explicitly assigned to

Enum: "true" "false"
detail
string

Level of detail to include in the response. Defaults to "basic"

Enum: "basic" "users"
user
string

Comma-separated list of user IDs to retrieve accessible projects for. Defaults to the authenticated user

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "name" "keywords" "_id" "_name" "_keywords"
filter[keyphrase]
string

A keyphrase for searching by keywords

filter[id]
string

"string" -- exact match

filter[name]
string

"string" -- starts with

filter[keywords]
string

set of keywords to be matched

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  projects: 'string',
  all: 'true',
  'show-integration': 'true',
  'allow-unassigned': 'true',
  detail: 'basic',
  user: 'string',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[keyphrase]': 'string',
  'filter[id]': 'string',
  'filter[name]': 'string',
  'filter[keywords]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/projects?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

createProject

Create a new project in the company.

Projects help organize work by grouping related tasks and activities. You can assign users to projects and track time spent on project-related work.

Project Features:

  • Assign users with specific access levels
  • Set project as public or private
  • Track time allocation
  • Organize tasks under projects

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
scope
string

Access scope level: user (specific users only), company (all company users), or global (system-wide)

Enum: "workspace" "user" "tag"
Array of objects

Array of users with their roles who have access to this user-scoped project. Only applicable when scope is "user"

cloneTasksFromId
string

When specified, all tasks from the project with this ID will be cloned to the new project

cloneAccessFromId
string

When specified, user access permissions will be copied from the project with this ID

name
string

Display name of the project

description
string

Detailed description of the project purpose and scope

deleted
boolean

Whether the project has been deleted (archived). Deleted projects are hidden by default

weight
number

Priority weight for sorting projects. Higher values indicate higher priority

Responses

Request samples

Content type
application/json
{
  • "scope": "workspace",
  • "users": [
    ],
  • "cloneTasksFromId": "string",
  • "cloneAccessFromId": "string",
  • "name": "string",
  • "description": "string",
  • "deleted": true,
  • "weight": 0
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

project

Retrieve detailed information about a specific project.

This endpoint returns comprehensive project data including settings, assigned users, and access permissions.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
projectId
required
string

Unique identifier of the project

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on a deleted (archived) project instead of an active one

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  deleted: 'true'
}).toString();

const projectId = 'YOUR_projectId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/projects/${projectId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

putProject

Update project information and settings.

This endpoint allows modification of project details such as name, description, status, and other configuration options.

Updatable Fields:

  • Project name and description
  • Status (active/archived)
  • Project settings and preferences

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
projectId
required
string

Unique identifier of the project

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on a deleted (archived) project instead of an active one

Enum: "true" "false"
Request Body schema: application/json
name
string

Display name of the project

description
string

Detailed description of the project purpose and scope

deleted
boolean

Whether the project has been deleted (archived). Deleted projects are hidden by default

weight
number

Priority weight for sorting projects. Higher values indicate higher priority

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "deleted": true,
  • "weight": 0
}

Response samples

Content type
application/json
{
  • "data": { }
}

deleteProject

Remove a project from the company.

Deleting a project will remove it from the system. Ensure all necessary data is backed up before deletion.

Important: Consider archiving instead of deleting to preserve historical data.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
projectId
required
string

Unique identifier of the project

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on a deleted (archived) project instead of an active one

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  deleted: 'true'
}).toString();

const projectId = 'YOUR_projectId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/projects/${projectId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

putProjectUser

Grant or modify user access to a private project.

This endpoint makes the project private (if not already) and assigns specific access permissions to a user. Only users with explicit access can view and work on private projects.

Access Control:

  • Set user-specific permissions
  • Control project visibility
  • Manage team access

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
projectId
required
string

Unique identifier of the project

userId
required
string

Unique identifier of the user whose project access will be modified

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on a deleted (archived) project instead of an active one

Enum: "true" "false"
Request Body schema: application/json
role
string

User's role within the project. Defaults to "user" if not specified

Enum: "user" "tag"

Responses

Request samples

Content type
application/json
{
  • "role": "user"
}

Response samples

Content type
application/json
{ }

deleteProjectUser

Revoke a specific user's access to a private project.

This endpoint removes the user from the project's access list. The user will no longer be able to view or work on this project.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
projectId
required
string

Unique identifier of the project

userId
required
string

Unique identifier of the user whose project access will be modified

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on a deleted (archived) project instead of an active one

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  deleted: 'true'
}).toString();

const projectId = 'YOUR_projectId_PARAMETER';
const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/projects/${projectId}/users/${userId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

deleteProjectUsers

Convert a private project to public access.

This endpoint removes all user-specific access restrictions, making the project visible and accessible to all company members.

Effect:

  • Removes all individual user access settings
  • Makes project visible to entire company
  • All users can work on the project

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
projectId
required
string

Unique identifier of the project

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on a deleted (archived) project instead of an active one

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  deleted: 'true'
}).toString();

const projectId = 'YOUR_projectId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/projects/${projectId}/users?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

getProjects1_1

Retrieve projects list with enhanced streaming support.

This is an enhanced version of Get Projects that supports socket-based streaming for large datasets, improving performance when dealing with many projects.

Enhanced Features:

  • Socket streaming for large result sets
  • Improved performance with chunked data delivery
  • Real-time updates support

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

projects
string

Comma-separated list of project IDs to retrieve. When specified, only these projects are returned

all
string

When true, returns all projects in the company instead of only assigned projects

Enum: "true" "false"
show-integration
string

When true, includes projects synced from external integrations (e.g., Jira, Asana)

Enum: "true" "false"
allow-unassigned
string

When true, includes projects that the user is not explicitly assigned to

Enum: "true" "false"
detail
string

Level of detail to include in the response. Defaults to "basic"

Enum: "basic" "users"
user
string

Comma-separated list of user IDs to retrieve accessible projects for. Defaults to the authenticated user

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "name" "keywords" "_id" "_name" "_keywords"
filter[keyphrase]
string

A keyphrase for searching by keywords

filter[id]
string

"string" -- exact match

filter[name]
string

"string" -- starts with

filter[keywords]
string

set of keywords to be matched

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  projects: 'string',
  all: 'true',
  'show-integration': 'true',
  'allow-unassigned': 'true',
  detail: 'basic',
  user: 'string',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[keyphrase]': 'string',
  'filter[id]': 'string',
  'filter[name]': 'string',
  'filter[keywords]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/projects?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

Tasks

tasks

getTasks

Retrieve a list of all tasks in the company.

Tasks represent specific work items or activities that can be assigned to projects. This endpoint returns all tasks with optional filtering and pagination.

Features:

  • Search by task name
  • Filter by project
  • Include/exclude archived tasks
  • Pagination support

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

tasks
string

Comma-separated list of task IDs to retrieve. When specified, only these tasks are returned

projects
string

Comma-separated list of project IDs to filter tasks by. Returns only tasks belonging to these projects

folders
string

Comma-separated list of folder IDs to filter tasks by. Returns only tasks in these folders

show-integration
string

When true, includes tasks synced from external integrations (e.g., Jira, Asana)

Enum: "true" "false"
public-only
string

When true, returns only public tasks that are visible to all users

Enum: "true" "false"
deleted
string

When true, returns deleted (archived) tasks instead of active tasks

Enum: "true" "false"
projectless
string

When true, returns only tasks that are not assigned to any project

Enum: "true" "false"
page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "name" "folder" "project" "keywords" "status" "assignedTo" "_id" "_name" "_folder" "_project" "_keywords" "_status" "_assignedTo"
filter[keyphrase]
string

A keyphrase for searching by keywords

filter[id]
string

"string" -- exact match

filter[name]
string

"string" -- starts with

filter[folder]
string

"string" -- exact match

filter[project]
string

"string" -- exact match

filter[keywords]
string

set of keywords to be matched

filter[status]
string

options from open, closed

filter[assignedTo]
string

"string" -- exact match

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  tasks: 'string',
  projects: 'string',
  folders: 'string',
  'show-integration': 'true',
  'public-only': 'true',
  deleted: 'true',
  projectless: 'true',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[keyphrase]': 'string',
  'filter[id]': 'string',
  'filter[name]': 'string',
  'filter[folder]': 'string',
  'filter[project]': 'string',
  'filter[keywords]': 'string',
  'filter[status]': 'string',
  'filter[assignedTo]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/tasks?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

createTask

Create a new task in the company.

Tasks help organize and categorize work activities. They can be assigned to projects and used to track time spent on specific work items.

Task Features:

  • Assign to projects for organization
  • Track time allocation per task
  • Archive when no longer needed
  • Search and filter capabilities

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
object
name
string

Display name of the task

description
string

Detailed description of what the task involves

weight
number

Priority weight for sorting tasks. Higher values indicate higher priority

deleted
boolean

Whether the task has been deleted (archived). Deleted tasks are hidden by default

status
string

Current status of the task (e.g., open, in-progress, completed). Used for filtering and tracking

public
boolean

When true, makes the task visible to all users. Only admins, managers, or owners can set this

Responses

Request samples

Content type
application/json
{
  • "project": {
    },
  • "name": "string",
  • "description": "string",
  • "weight": 0,
  • "deleted": true,
  • "status": "string",
  • "public": true
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getTask

Retrieve detailed information about a specific task.

This endpoint returns comprehensive task data including name, project assignment, and archive status.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
taskId
required
string

Unique identifier of the task

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const taskId = 'YOUR_taskId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/tasks/${taskId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

putTask

Update task information and settings.

This endpoint allows modification of task details such as name, project assignment, and other configuration options.

Updatable Fields:

  • Task name
  • Project assignment
  • Task settings

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
taskId
required
string

Unique identifier of the task

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
object
name
string

Display name of the task

description
string

Detailed description of what the task involves

weight
number

Priority weight for sorting tasks. Higher values indicate higher priority

deleted
boolean

Whether the task has been deleted (archived). Deleted tasks are hidden by default

status
string

Current status of the task (e.g., open, in-progress, completed). Used for filtering and tracking

public
boolean

When true, makes the task visible to all users. Only admins, managers, or owners can set this

Responses

Request samples

Content type
application/json
{
  • "project": {
    },
  • "name": "string",
  • "description": "string",
  • "weight": 0,
  • "deleted": true,
  • "status": "string",
  • "public": true
}

Response samples

Content type
application/json
{
  • "data": { }
}

deleteTask

Archive or restore a task.

This endpoint archives a task (soft delete) or restores a previously archived task. Archived tasks are hidden from normal listings but can be restored if needed.

Operations:

  • Archive: Hide task from active lists (default)
  • Restore: Unarchive and make task active again (use restore parameter)

Note: Tasks are not permanently deleted, only archived for data preservation.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
taskId
required
string

Unique identifier of the task

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, restores (unarchives) the task instead of archiving it

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  deleted: 'true'
}).toString();

const taskId = 'YOUR_taskId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/tasks/${taskId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

getTasksV1_1

Retrieve tasks list with enhanced streaming support.

This is an enhanced version of Get Tasks that supports socket-based streaming for large datasets, improving performance when dealing with many tasks.

Enhanced Features:

  • Socket streaming for large result sets
  • Improved performance with chunked data delivery
  • Real-time updates support

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

tasks
string

Comma-separated list of task IDs to retrieve. When specified, only these tasks are returned

projects
string

Comma-separated list of project IDs to filter tasks by. Returns only tasks belonging to these projects

folders
string

Comma-separated list of folder IDs to filter tasks by. Returns only tasks in these folders

show-integration
string

When true, includes tasks synced from external integrations (e.g., Jira, Asana)

Enum: "true" "false"
public-only
string

When true, returns only public tasks that are visible to all users

Enum: "true" "false"
deleted
string

When true, returns deleted (archived) tasks instead of active tasks

Enum: "true" "false"
projectless
string

When true, returns only tasks that are not assigned to any project

Enum: "true" "false"
page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "id" "name" "folder" "project" "keywords" "status" "assignedTo" "_id" "_name" "_folder" "_project" "_keywords" "_status" "_assignedTo"
filter[id]
string

"string" -- exact match

filter[name]
string

"string" -- starts with

filter[folder]
string

"string" -- exact match

filter[project]
string

"string" -- exact match

filter[keywords]
string

set of keywords to be matched

filter[status]
string

options from open, closed

filter[assignedTo]
string

"string" -- exact match

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "keyphrase" "_keyphrase"
filter[keyphrase]
string

A keyphrase for searching by keywords

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  tasks: 'string',
  projects: 'string',
  folders: 'string',
  'show-integration': 'true',
  'public-only': 'true',
  deleted: 'true',
  projectless: 'true',
  page: ['string', 'string'],
  limit: ['string', 'string'],
  sort: ['id', 'keyphrase'],
  'filter[id]': 'string',
  'filter[name]': 'string',
  'filter[folder]': 'string',
  'filter[project]': 'string',
  'filter[keywords]': 'string',
  'filter[status]': 'string',
  'filter[assignedTo]': 'string',
  'filter[keyphrase]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/tasks?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

Activity

status, stats, worklog, timeuse, timesheet, edit-time

getActivityWorklog

Retrieve detailed work activity log for a user within a specified time range.

This endpoint returns comprehensive work session data including start/end times, tasks, projects, and activity levels for each work period.

Performance Note: For optimal performance, limit queries to 7 days at a time. Larger date ranges may result in slower response times.

Use Cases:

  • Generate detailed time reports
  • Audit work sessions
  • Track project time allocation

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

detail
string

When set to true, returns detailed activity information including device IDs and user comments

Enum: "true" "false"
exclude-fields
string

Comma-separated list of field names to exclude from the response. Specified fields will be omitted from the returned data

include-modes
string

Comma-separated list of additional worklog modes to include in results (e.g., unpaidLeave). By default, only standard modes are included

task-project-names
string

If specified, the method will resolve the names for tasks and projects

Enum: "true" "false"
include-meeting
string

If specified, the method will include meeting time in the results

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  detail: 'true',
  'exclude-fields': 'string',
  'include-modes': 'string',
  'task-project-names': 'true',
  'include-meeting': 'true'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/activity/worklog?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

getActivityTimeuseStats

Retrieve aggregated statistics about application and website usage.

This endpoint provides summarized timeuse data, showing total time spent on different applications and websites, grouped by productivity category.

Returns:

  • Total time per application/website
  • Productivity breakdown (productive/unproductive/neutral)
  • Usage frequency and patterns

Use Cases:

  • Generate productivity summaries
  • Identify top applications used
  • Analyze work patterns

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user

category
string

Category to fetch report for

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "time" "score" "category" "_time" "_score" "_category"
filter[time]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[score]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[category]
string

"string" -- exact match

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  category: 'string',
  page: 'string',
  limit: 'string',
  sort: 'time',
  'filter[time]': 'string',
  'filter[score]': 'string',
  'filter[category]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/activity/timeuse/stats?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

getActivityEditTime

Retrieve manual time edits and adjustments for user(s).

This endpoint returns all manual time entries and modifications made to work logs, including added time, deleted time, and time corrections.

Returns:

  • Manual time entries
  • Time adjustments and corrections
  • Edit timestamps and reasons
  • User who made the edit

Use Cases:

  • Audit manual time changes
  • Track time corrections
  • Review added/deleted time periods

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

exclude-fields
string

Comma-separated list of field names to exclude from the response. Specified fields will be omitted from the returned data

include-modes
string

Comma-separated list of additional worklog modes to include in results (e.g., unpaidLeave). By default, only standard modes are included

approved
string

If specified, the method will filter by approval

Enum: "pending" "approved" "disapproved"
tag
string

comma separated value of tag ids

include-auto-approved
boolean
Default: true

include auto approved edit time records

resolve-names
boolean
Default: false

include reviewer name, project name, task name & user name

page-user
string

continue listing from the user with specified ID

sort-user
string

sort users by specified field ("_" prefix = descending)

Enum: "name" "_name"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  'exclude-fields': 'string',
  'include-modes': 'string',
  approved: 'pending',
  tag: 'string',
  'include-auto-approved': 'true',
  'resolve-names': 'false',
  'page-user': 'string',
  'sort-user': 'name'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/activity/edit-time?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

postActivityEditTime

Create a manual time entry or adjustment for a user.

This endpoint allows adding time that wasn't automatically tracked, correcting tracking errors, or making other manual adjustments to work logs.

Use Cases:

  • Add forgotten work time
  • Correct tracking errors
  • Record offline work
  • Adjust time for meetings or breaks

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
userId
string

ID of the user

start
required
string <date-time>

ISO 8601 date-time marking the beginning of the time interval (inclusive)

taskId
required
string

Unique identifier of the task being tracked

projectId
required
string

Unique identifier of the project associated with the task

end
string <date-time>

ISO 8601 date-time marking the end of the time interval (exclusive, represents the moment when the interval ends)

operation
required
string

Edit Time Operation

Enum: "add" "remove"
reason
required
string
approved
required
boolean

Responses

Request samples

Content type
application/json
{
  • "userId": "string",
  • "start": "2019-08-24T14:15:22Z",
  • "taskId": "string",
  • "projectId": "string",
  • "end": "2019-08-24T14:15:22Z",
  • "operation": "add",
  • "reason": "string",
  • "approved": true
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

putActivityEditTimeBulk

Update multiple time edit records in a single request.

This endpoint allows efficient bulk modification of manual time entries, useful for batch corrections or adjustments.

Use Cases:

  • Batch update time corrections
  • Apply changes to multiple entries
  • Efficient bulk time management

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
Array ()
userId
string

ID of the user

start
required
string <date-time>

ISO 8601 date-time marking the beginning of the time interval (inclusive)

taskId
required
string

Unique identifier of the task being tracked

projectId
required
string

Unique identifier of the project associated with the task

end
string <date-time>

ISO 8601 date-time marking the end of the time interval (exclusive, represents the moment when the interval ends)

operation
required
string

Edit Time Operation

Enum: "add" "remove"
reason
required
string
approved
required
boolean

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "data": {
    }
}

putActivityEditTime

Update a specific manual time entry by its ID.

This endpoint allows modification of an existing time edit, such as changing the time range, task assignment, or other details.

Updatable Fields:

  • Time range (start/end)
  • Task and project assignment
  • Notes and description

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
id
required
string

ID of the time to edit

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
userId
string

ID of the user

start
required
string <date-time>

ISO 8601 date-time marking the beginning of the time interval (inclusive)

taskId
required
string

Unique identifier of the task being tracked

projectId
required
string

Unique identifier of the project associated with the task

end
string <date-time>

ISO 8601 date-time marking the end of the time interval (exclusive, represents the moment when the interval ends)

operation
required
string

Edit Time Operation

Enum: "add" "remove"
reason
required
string
approved
required
boolean

Responses

Request samples

Content type
application/json
{
  • "userId": "string",
  • "start": "2019-08-24T14:15:22Z",
  • "taskId": "string",
  • "projectId": "string",
  • "end": "2019-08-24T14:15:22Z",
  • "operation": "add",
  • "reason": "string",
  • "approved": true
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getDisconnectivity

Retrieve periods when the user was offline or disconnected from tracking.

This endpoint returns information about gaps in activity tracking, including when the tracking application was offline, computer was shut down, or internet connection was lost.

Returns:

  • Disconnection start and end times
  • Disconnection reasons (offline, shutdown, etc.)
  • Duration of each disconnection period

Use Cases:

  • Identify tracking gaps
  • Audit offline periods
  • Verify work continuity

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/activity/disconnectivity?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

getStats_1_1_total

Get total stats v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.
For work range use 1.1/stats/total?fields=start,end,workRange

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "offcomputer" "computer" "mobile" "manual" "mobMan" "paidBreak" "unpaidBreak" "meeting" "paidLeave" "unpaidLeave" "offcomputerRatio" "computerRatio" "mobileRatio" "manualRatio" "mobManRatio" "paidBreakRatio" "unpaidBreakRatio" "meetingRatio" "paidLeaveRatio" "unpaidLeaveRatio" "unratedHis" "unprodHis" "neutralHis" "prodHis" "unratedHisRatio" "unprodHisRatio" "neutralHisRatio" "prodHisRatio" "unrated" "unprod" "neutral" "prod" "unratedRatio" "unprodRatio" "neutralRatio" "prodRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "clicks" "idleSec" "idleSecMeeting" "keys" "moves" "totalSec" "activeSec" "clicksRatio" "idleSecRatio" "idleSecMeetingRatio" "keysRatio" "movesRatio" "totalSecRatio" "activeSecRatio" "totalMins" "idleMins" "idleMinsMeeting" "idleMinsRatio" "idleOutsideMeetingSec" "idleOutsideMeetingMins" "idleSecDuringMeetingRatio" "idleSecOutsideMeetingRatio" "idleMinsDuringMeetingRatio" "idleMinsOutsideMeetingRatio" "outShift" "outShiftRatio" "project" "task" "shift" "projectRatio" "taskRatio" "shiftRatio" "comCat" "comCatRatio" "scoreTotal" "scoreTotalRatio" "workRange" "workRangeRatio" "modeTotal" "total" "meetingCount" "avgMeetingDuration" "avgIdleTimePerMeeting" "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "_offcomputer" "_computer" "_mobile" "_manual" "_mobMan" "_paidBreak" "_unpaidBreak" "_meeting" "_paidLeave" "_unpaidLeave" "_offcomputerRatio" "_computerRatio" "_mobileRatio" "_manualRatio" "_mobManRatio" "_paidBreakRatio" "_unpaidBreakRatio" "_meetingRatio" "_paidLeaveRatio" "_unpaidLeaveRatio" "_unratedHis" "_unprodHis" "_neutralHis" "_prodHis" "_unratedHisRatio" "_unprodHisRatio" "_neutralHisRatio" "_prodHisRatio" "_unrated" "_unprod" "_neutral" "_prod" "_unratedRatio" "_unprodRatio" "_neutralRatio" "_prodRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio" "_clicks" "_idleSec" "_idleSecMeeting" "_keys" "_moves" "_totalSec" "_activeSec" "_clicksRatio" "_idleSecRatio" "_idleSecMeetingRatio" "_keysRatio" "_movesRatio" "_totalSecRatio" "_activeSecRatio" "_totalMins" "_idleMins" "_idleMinsMeeting" "_idleMinsRatio" "_idleOutsideMeetingSec" "_idleOutsideMeetingMins" "_idleSecDuringMeetingRatio" "_idleSecOutsideMeetingRatio" "_idleMinsDuringMeetingRatio" "_idleMinsOutsideMeetingRatio" "_outShift" "_outShiftRatio" "_project" "_task" "_shift" "_projectRatio" "_taskRatio" "_shiftRatio" "_comCat" "_comCatRatio" "_scoreTotal" "_scoreTotalRatio" "_workRange" "_workRangeRatio" "_modeTotal" "_total" "_meetingCount" "_avgMeetingDuration" "_avgIdleTimePerMeeting" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2"
filter[offcomputer]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[computer]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobile]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[manual]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobMan]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidBreak]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidBreak]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidLeave]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidLeave]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[offcomputerRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[computerRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobileRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[manualRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobManRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidBreakRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidBreakRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidLeaveRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidLeaveRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unrated]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprod]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutral]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prod]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBias]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBiasRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clicks]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keys]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[moves]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clicksRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keysRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[movesRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleOutsideMeetingSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleOutsideMeetingMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecDuringMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecOutsideMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsDuringMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsOutsideMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShiftRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[project]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[task]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[shift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[projectRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[taskRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[shiftRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCat]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCatRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[scoreTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[scoreTotalRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[workRange]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[workRangeRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[modeTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingCount]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avgMeetingDuration]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avgIdleTimePerMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "offcomputer" "computer" "mobile" "manual" "mobMan" "paidBreak" "unpaidBreak" "meeting" "paidLeave" "unpaidLeave" "offcomputerRatio" "computerRatio" "mobileRatio" "manualRatio" "mobManRatio" "paidBreakRatio" "unpaidBreakRatio" "meetingRatio" "paidLeaveRatio" "unpaidLeaveRatio" "unratedHis" "unprodHis" "neutralHis" "prodHis" "unratedHisRatio" "unprodHisRatio" "neutralHisRatio" "prodHisRatio" "unrated" "unprod" "neutral" "prod" "unratedRatio" "unprodRatio" "neutralRatio" "prodRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "clicks" "idleSec" "idleSecMeeting" "keys" "moves" "totalSec" "activeSec" "clicksRatio" "idleSecRatio" "idleSecMeetingRatio" "keysRatio" "movesRatio" "totalSecRatio" "activeSecRatio" "totalMins" "idleMins" "idleMinsMeeting" "idleMinsRatio" "idleOutsideMeetingSec" "idleOutsideMeetingMins" "idleSecDuringMeetingRatio" "idleSecOutsideMeetingRatio" "idleMinsDuringMeetingRatio" "idleMinsOutsideMeetingRatio" "outShift" "outShiftRatio" "project" "task" "shift" "projectRatio" "taskRatio" "shiftRatio" "comCat" "comCatRatio" "scoreTotal" "scoreTotalRatio" "workRange" "workRangeRatio" "modeTotal" "total" "meetingCount" "avgMeetingDuration" "avgIdleTimePerMeeting" "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "_offcomputer" "_computer" "_mobile" "_manual" "_mobMan" "_paidBreak" "_unpaidBreak" "_meeting" "_paidLeave" "_unpaidLeave" "_offcomputerRatio" "_computerRatio" "_mobileRatio" "_manualRatio" "_mobManRatio" "_paidBreakRatio" "_unpaidBreakRatio" "_meetingRatio" "_paidLeaveRatio" "_unpaidLeaveRatio" "_unratedHis" "_unprodHis" "_neutralHis" "_prodHis" "_unratedHisRatio" "_unprodHisRatio" "_neutralHisRatio" "_prodHisRatio" "_unrated" "_unprod" "_neutral" "_prod" "_unratedRatio" "_unprodRatio" "_neutralRatio" "_prodRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio" "_clicks" "_idleSec" "_idleSecMeeting" "_keys" "_moves" "_totalSec" "_activeSec" "_clicksRatio" "_idleSecRatio" "_idleSecMeetingRatio" "_keysRatio" "_movesRatio" "_totalSecRatio" "_activeSecRatio" "_totalMins" "_idleMins" "_idleMinsMeeting" "_idleMinsRatio" "_idleOutsideMeetingSec" "_idleOutsideMeetingMins" "_idleSecDuringMeetingRatio" "_idleSecOutsideMeetingRatio" "_idleMinsDuringMeetingRatio" "_idleMinsOutsideMeetingRatio" "_outShift" "_outShiftRatio" "_project" "_task" "_shift" "_projectRatio" "_taskRatio" "_shiftRatio" "_comCat" "_comCatRatio" "_scoreTotal" "_scoreTotalRatio" "_workRange" "_workRangeRatio" "_modeTotal" "_total" "_meetingCount" "_avgMeetingDuration" "_avgIdleTimePerMeeting" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'offcomputer',
  'filter[offcomputer]': 'string',
  'filter[computer]': 'string',
  'filter[mobile]': 'string',
  'filter[manual]': 'string',
  'filter[mobMan]': 'string',
  'filter[paidBreak]': 'string',
  'filter[unpaidBreak]': 'string',
  'filter[meeting]': 'string',
  'filter[paidLeave]': 'string',
  'filter[unpaidLeave]': 'string',
  'filter[offcomputerRatio]': 'string',
  'filter[computerRatio]': 'string',
  'filter[mobileRatio]': 'string',
  'filter[manualRatio]': 'string',
  'filter[mobManRatio]': 'string',
  'filter[paidBreakRatio]': 'string',
  'filter[unpaidBreakRatio]': 'string',
  'filter[meetingRatio]': 'string',
  'filter[paidLeaveRatio]': 'string',
  'filter[unpaidLeaveRatio]': 'string',
  'filter[unratedHis]': 'string',
  'filter[unprodHis]': 'string',
  'filter[neutralHis]': 'string',
  'filter[prodHis]': 'string',
  'filter[unratedHisRatio]': 'string',
  'filter[unprodHisRatio]': 'string',
  'filter[neutralHisRatio]': 'string',
  'filter[prodHisRatio]': 'string',
  'filter[unrated]': 'string',
  'filter[unprod]': 'string',
  'filter[neutral]': 'string',
  'filter[prod]': 'string',
  'filter[unratedRatio]': 'string',
  'filter[unprodRatio]': 'string',
  'filter[neutralRatio]': 'string',
  'filter[prodRatio]': 'string',
  'filter[standardActiveSec]': 'string',
  'filter[activeBias]': 'string',
  'filter[activeBiasRatio]': 'string',
  'filter[standardActiveSecRatio]': 'string',
  'filter[clicks]': 'string',
  'filter[idleSec]': 'string',
  'filter[idleSecMeeting]': 'string',
  'filter[keys]': 'string',
  'filter[moves]': 'string',
  'filter[totalSec]': 'string',
  'filter[activeSec]': 'string',
  'filter[clicksRatio]': 'string',
  'filter[idleSecRatio]': 'string',
  'filter[idleSecMeetingRatio]': 'string',
  'filter[keysRatio]': 'string',
  'filter[movesRatio]': 'string',
  'filter[totalSecRatio]': 'string',
  'filter[activeSecRatio]': 'string',
  'filter[totalMins]': 'string',
  'filter[idleMins]': 'string',
  'filter[idleMinsMeeting]': 'string',
  'filter[idleMinsRatio]': 'string',
  'filter[idleOutsideMeetingSec]': 'string',
  'filter[idleOutsideMeetingMins]': 'string',
  'filter[idleSecDuringMeetingRatio]': 'string',
  'filter[idleSecOutsideMeetingRatio]': 'string',
  'filter[idleMinsDuringMeetingRatio]': 'string',
  'filter[idleMinsOutsideMeetingRatio]': 'string',
  'filter[outShift]': 'string',
  'filter[outShiftRatio]': 'string',
  'filter[project]': 'string',
  'filter[task]': 'string',
  'filter[shift]': 'string',
  'filter[projectRatio]': 'string',
  'filter[taskRatio]': 'string',
  'filter[shiftRatio]': 'string',
  'filter[comCat]': 'string',
  'filter[comCatRatio]': 'string',
  'filter[scoreTotal]': 'string',
  'filter[scoreTotalRatio]': 'string',
  'filter[workRange]': 'string',
  'filter[workRangeRatio]': 'string',
  'filter[modeTotal]': 'string',
  'filter[total]': 'string',
  'filter[meetingCount]': 'string',
  'filter[avgMeetingDuration]': 'string',
  'filter[avgIdleTimePerMeeting]': 'string',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'offcomputer',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/total?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

getStats_1_1_category

Get category stats v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "meetingTotal" "comCat" "comCatObj" "entity" "name" "score" "tagId" "userCat" "clicks" "moves" "keys" "totalMins" "idleSec" "idleSecRatio" "idleMins" "idleMinsRatio" "totalSec" "activeSec" "activeSecRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_meetingTotal" "_comCat" "_comCatObj" "_entity" "_name" "_score" "_tagId" "_userCat" "_clicks" "_moves" "_keys" "_totalMins" "_idleSec" "_idleSecRatio" "_idleMins" "_idleMinsRatio" "_totalSec" "_activeSec" "_activeSecRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio"
prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[comCat]
string

"string" -- exact match

filter[comCatObj]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[entity]
string

"string" -- exact match

prefilter[name]
string

unknown API-defined value

prefilter[score]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[tagId]
string

"string" -- exact match

prefilter[userCat]
string

"string" -- exact match

filter[clicks]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[moves]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keys]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBias]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBiasRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "meetingTotal" "comCat" "comCatObj" "entity" "name" "score" "tagId" "userCat" "clicks" "moves" "keys" "totalMins" "idleSec" "idleSecRatio" "idleMins" "idleMinsRatio" "totalSec" "activeSec" "activeSecRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_meetingTotal" "_comCat" "_comCatObj" "_entity" "_name" "_score" "_tagId" "_userCat" "_clicks" "_moves" "_keys" "_totalMins" "_idleSec" "_idleSecRatio" "_idleMins" "_idleMinsRatio" "_totalSec" "_activeSec" "_activeSecRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'userId',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'filter[total]': 'string',
  'filter[meetingTotal]': 'string',
  'prefilter[comCat]': 'string',
  'filter[comCatObj]': 'string',
  'prefilter[entity]': 'string',
  'prefilter[name]': 'string',
  'prefilter[score]': 'string',
  'prefilter[tagId]': 'string',
  'prefilter[userCat]': 'string',
  'filter[clicks]': 'string',
  'filter[moves]': 'string',
  'filter[keys]': 'string',
  'filter[totalMins]': 'string',
  'filter[idleSec]': 'string',
  'filter[idleSecRatio]': 'string',
  'filter[idleMins]': 'string',
  'filter[idleMinsRatio]': 'string',
  'filter[totalSec]': 'string',
  'filter[activeSec]': 'string',
  'filter[activeSecRatio]': 'string',
  'filter[standardActiveSec]': 'string',
  'filter[activeBias]': 'string',
  'filter[activeBiasRatio]': 'string',
  'filter[standardActiveSecRatio]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'userId',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/category?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

getStats_1_1_summary

Get summary stats v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort. You have to specify sort param for this API to work.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "meetingTotal" "comCat" "comCatObj" "entity" "name" "score" "tagId" "userCat" "clicks" "moves" "keys" "totalMins" "idleSec" "idleSecRatio" "idleMins" "idleMinsRatio" "totalSec" "activeSec" "activeSecRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "offcomputer" "computer" "mobile" "manual" "mobMan" "paidBreak" "unpaidBreak" "meeting" "paidLeave" "unpaidLeave" "offcomputerRatio" "computerRatio" "mobileRatio" "manualRatio" "mobManRatio" "paidBreakRatio" "unpaidBreakRatio" "meetingRatio" "paidLeaveRatio" "unpaidLeaveRatio" "unratedHis" "unprodHis" "neutralHis" "prodHis" "unratedHisRatio" "unprodHisRatio" "neutralHisRatio" "prodHisRatio" "unrated" "unprod" "neutral" "prod" "unratedRatio" "unprodRatio" "neutralRatio" "prodRatio" "idleSecMeeting" "clicksRatio" "idleSecMeetingRatio" "keysRatio" "movesRatio" "totalSecRatio" "idleMinsMeeting" "idleOutsideMeetingSec" "idleOutsideMeetingMins" "idleSecDuringMeetingRatio" "idleSecOutsideMeetingRatio" "idleMinsDuringMeetingRatio" "idleMinsOutsideMeetingRatio" "outShift" "outShiftRatio" "project" "task" "shift" "projectRatio" "taskRatio" "shiftRatio" "comCatRatio" "scoreTotal" "scoreTotalRatio" "workRange" "workRangeRatio" "modeTotal" "meetingCount" "avgMeetingDuration" "avgIdleTimePerMeeting" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_meetingTotal" "_comCat" "_comCatObj" "_entity" "_name" "_score" "_tagId" "_userCat" "_clicks" "_moves" "_keys" "_totalMins" "_idleSec" "_idleSecRatio" "_idleMins" "_idleMinsRatio" "_totalSec" "_activeSec" "_activeSecRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio" "_offcomputer" "_computer" "_mobile" "_manual" "_mobMan" "_paidBreak" "_unpaidBreak" "_meeting" "_paidLeave" "_unpaidLeave" "_offcomputerRatio" "_computerRatio" "_mobileRatio" "_manualRatio" "_mobManRatio" "_paidBreakRatio" "_unpaidBreakRatio" "_meetingRatio" "_paidLeaveRatio" "_unpaidLeaveRatio" "_unratedHis" "_unprodHis" "_neutralHis" "_prodHis" "_unratedHisRatio" "_unprodHisRatio" "_neutralHisRatio" "_prodHisRatio" "_unrated" "_unprod" "_neutral" "_prod" "_unratedRatio" "_unprodRatio" "_neutralRatio" "_prodRatio" "_idleSecMeeting" "_clicksRatio" "_idleSecMeetingRatio" "_keysRatio" "_movesRatio" "_totalSecRatio" "_idleMinsMeeting" "_idleOutsideMeetingSec" "_idleOutsideMeetingMins" "_idleSecDuringMeetingRatio" "_idleSecOutsideMeetingRatio" "_idleMinsDuringMeetingRatio" "_idleMinsOutsideMeetingRatio" "_outShift" "_outShiftRatio" "_project" "_task" "_shift" "_projectRatio" "_taskRatio" "_shiftRatio" "_comCatRatio" "_scoreTotal" "_scoreTotalRatio" "_workRange" "_workRangeRatio" "_modeTotal" "_meetingCount" "_avgMeetingDuration" "_avgIdleTimePerMeeting"
prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCat]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCatObj]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[entity]
string

"string" -- exact match

prefilter[name]
string

unknown API-defined value

prefilter[score]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[tagId]
string

"string" -- exact match

prefilter[userCat]
string

"string" -- exact match

filter[clicks]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[moves]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keys]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBias]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBiasRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[offcomputer]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[computer]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobile]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[manual]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobMan]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidBreak]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidBreak]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidLeave]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidLeave]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[offcomputerRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[computerRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobileRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[manualRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobManRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidBreakRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidBreakRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidLeaveRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidLeaveRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unrated]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprod]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutral]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prod]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clicksRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keysRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[movesRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleOutsideMeetingSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleOutsideMeetingMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecDuringMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecOutsideMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsDuringMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsOutsideMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShiftRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[project]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[task]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[shift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[projectRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[taskRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[shiftRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCatRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[scoreTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[scoreTotalRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[workRange]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[workRangeRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[modeTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingCount]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avgMeetingDuration]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avgIdleTimePerMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "meetingTotal" "comCat" "comCatObj" "entity" "name" "score" "tagId" "userCat" "clicks" "moves" "keys" "totalMins" "idleSec" "idleSecRatio" "idleMins" "idleMinsRatio" "totalSec" "activeSec" "activeSecRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "offcomputer" "computer" "mobile" "manual" "mobMan" "paidBreak" "unpaidBreak" "meeting" "paidLeave" "unpaidLeave" "offcomputerRatio" "computerRatio" "mobileRatio" "manualRatio" "mobManRatio" "paidBreakRatio" "unpaidBreakRatio" "meetingRatio" "paidLeaveRatio" "unpaidLeaveRatio" "unratedHis" "unprodHis" "neutralHis" "prodHis" "unratedHisRatio" "unprodHisRatio" "neutralHisRatio" "prodHisRatio" "unrated" "unprod" "neutral" "prod" "unratedRatio" "unprodRatio" "neutralRatio" "prodRatio" "idleSecMeeting" "clicksRatio" "idleSecMeetingRatio" "keysRatio" "movesRatio" "totalSecRatio" "idleMinsMeeting" "idleOutsideMeetingSec" "idleOutsideMeetingMins" "idleSecDuringMeetingRatio" "idleSecOutsideMeetingRatio" "idleMinsDuringMeetingRatio" "idleMinsOutsideMeetingRatio" "outShift" "outShiftRatio" "project" "task" "shift" "projectRatio" "taskRatio" "shiftRatio" "comCatRatio" "scoreTotal" "scoreTotalRatio" "workRange" "workRangeRatio" "modeTotal" "meetingCount" "avgMeetingDuration" "avgIdleTimePerMeeting" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_meetingTotal" "_comCat" "_comCatObj" "_entity" "_name" "_score" "_tagId" "_userCat" "_clicks" "_moves" "_keys" "_totalMins" "_idleSec" "_idleSecRatio" "_idleMins" "_idleMinsRatio" "_totalSec" "_activeSec" "_activeSecRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio" "_offcomputer" "_computer" "_mobile" "_manual" "_mobMan" "_paidBreak" "_unpaidBreak" "_meeting" "_paidLeave" "_unpaidLeave" "_offcomputerRatio" "_computerRatio" "_mobileRatio" "_manualRatio" "_mobManRatio" "_paidBreakRatio" "_unpaidBreakRatio" "_meetingRatio" "_paidLeaveRatio" "_unpaidLeaveRatio" "_unratedHis" "_unprodHis" "_neutralHis" "_prodHis" "_unratedHisRatio" "_unprodHisRatio" "_neutralHisRatio" "_prodHisRatio" "_unrated" "_unprod" "_neutral" "_prod" "_unratedRatio" "_unprodRatio" "_neutralRatio" "_prodRatio" "_idleSecMeeting" "_clicksRatio" "_idleSecMeetingRatio" "_keysRatio" "_movesRatio" "_totalSecRatio" "_idleMinsMeeting" "_idleOutsideMeetingSec" "_idleOutsideMeetingMins" "_idleSecDuringMeetingRatio" "_idleSecOutsideMeetingRatio" "_idleMinsDuringMeetingRatio" "_idleMinsOutsideMeetingRatio" "_outShift" "_outShiftRatio" "_project" "_task" "_shift" "_projectRatio" "_taskRatio" "_shiftRatio" "_comCatRatio" "_scoreTotal" "_scoreTotalRatio" "_workRange" "_workRangeRatio" "_modeTotal" "_meetingCount" "_avgMeetingDuration" "_avgIdleTimePerMeeting"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'userId',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'filter[total]': 'string',
  'filter[meetingTotal]': 'string',
  'filter[comCat]': 'string',
  'filter[comCatObj]': 'string',
  'prefilter[entity]': 'string',
  'prefilter[name]': 'string',
  'prefilter[score]': 'string',
  'prefilter[tagId]': 'string',
  'prefilter[userCat]': 'string',
  'filter[clicks]': 'string',
  'filter[moves]': 'string',
  'filter[keys]': 'string',
  'filter[totalMins]': 'string',
  'filter[idleSec]': 'string',
  'filter[idleSecRatio]': 'string',
  'filter[idleMins]': 'string',
  'filter[idleMinsRatio]': 'string',
  'filter[totalSec]': 'string',
  'filter[activeSec]': 'string',
  'filter[activeSecRatio]': 'string',
  'filter[standardActiveSec]': 'string',
  'filter[activeBias]': 'string',
  'filter[activeBiasRatio]': 'string',
  'filter[standardActiveSecRatio]': 'string',
  'filter[offcomputer]': 'string',
  'filter[computer]': 'string',
  'filter[mobile]': 'string',
  'filter[manual]': 'string',
  'filter[mobMan]': 'string',
  'filter[paidBreak]': 'string',
  'filter[unpaidBreak]': 'string',
  'filter[meeting]': 'string',
  'filter[paidLeave]': 'string',
  'filter[unpaidLeave]': 'string',
  'filter[offcomputerRatio]': 'string',
  'filter[computerRatio]': 'string',
  'filter[mobileRatio]': 'string',
  'filter[manualRatio]': 'string',
  'filter[mobManRatio]': 'string',
  'filter[paidBreakRatio]': 'string',
  'filter[unpaidBreakRatio]': 'string',
  'filter[meetingRatio]': 'string',
  'filter[paidLeaveRatio]': 'string',
  'filter[unpaidLeaveRatio]': 'string',
  'filter[unratedHis]': 'string',
  'filter[unprodHis]': 'string',
  'filter[neutralHis]': 'string',
  'filter[prodHis]': 'string',
  'filter[unratedHisRatio]': 'string',
  'filter[unprodHisRatio]': 'string',
  'filter[neutralHisRatio]': 'string',
  'filter[prodHisRatio]': 'string',
  'filter[unrated]': 'string',
  'filter[unprod]': 'string',
  'filter[neutral]': 'string',
  'filter[prod]': 'string',
  'filter[unratedRatio]': 'string',
  'filter[unprodRatio]': 'string',
  'filter[neutralRatio]': 'string',
  'filter[prodRatio]': 'string',
  'filter[idleSecMeeting]': 'string',
  'filter[clicksRatio]': 'string',
  'filter[idleSecMeetingRatio]': 'string',
  'filter[keysRatio]': 'string',
  'filter[movesRatio]': 'string',
  'filter[totalSecRatio]': 'string',
  'filter[idleMinsMeeting]': 'string',
  'filter[idleOutsideMeetingSec]': 'string',
  'filter[idleOutsideMeetingMins]': 'string',
  'filter[idleSecDuringMeetingRatio]': 'string',
  'filter[idleSecOutsideMeetingRatio]': 'string',
  'filter[idleMinsDuringMeetingRatio]': 'string',
  'filter[idleMinsOutsideMeetingRatio]': 'string',
  'filter[outShift]': 'string',
  'filter[outShiftRatio]': 'string',
  'filter[project]': 'string',
  'filter[task]': 'string',
  'filter[shift]': 'string',
  'filter[projectRatio]': 'string',
  'filter[taskRatio]': 'string',
  'filter[shiftRatio]': 'string',
  'filter[comCatRatio]': 'string',
  'filter[scoreTotal]': 'string',
  'filter[scoreTotalRatio]': 'string',
  'filter[workRange]': 'string',
  'filter[workRangeRatio]': 'string',
  'filter[modeTotal]': 'string',
  'filter[meetingCount]': 'string',
  'filter[avgMeetingDuration]': 'string',
  'filter[avgIdleTimePerMeeting]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'userId',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/summary?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

getStats_1_1_work-life

Get work-life stats v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "total" "totalHours" "lastHour" "outShift" "day" "tooManyHours" "lateHours" "outOfShiftWork" "weekendWork" "totalIssues" "dailyIssues" "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "_total" "_totalHours" "_lastHour" "_outShift" "_day" "_tooManyHours" "_lateHours" "_outOfShiftWork" "_weekendWork" "_totalIssues" "_dailyIssues" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2"
filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalHours]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[lastHour]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[day]
string

"string" -- exact match

filter[tooManyHours]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lateHours]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outOfShiftWork]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[weekendWork]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalIssues]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[dailyIssues]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "total" "totalHours" "lastHour" "outShift" "day" "tooManyHours" "lateHours" "outOfShiftWork" "weekendWork" "totalIssues" "dailyIssues" "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "_total" "_totalHours" "_lastHour" "_outShift" "_day" "_tooManyHours" "_lateHours" "_outOfShiftWork" "_weekendWork" "_totalIssues" "_dailyIssues" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'total',
  'filter[total]': 'string',
  'filter[totalHours]': 'string',
  'prefilter[lastHour]': 'string',
  'filter[outShift]': 'string',
  'prefilter[day]': 'string',
  'filter[tooManyHours]': 'string',
  'filter[lateHours]': 'string',
  'filter[outOfShiftWork]': 'string',
  'filter[weekendWork]': 'string',
  'filter[totalIssues]': 'string',
  'filter[dailyIssues]': 'string',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'total',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/work-life?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

getStats_1_1_shift

Get shift stats v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "shiftId" "shiftObj" "shiftStart" "shiftEnd" "minHours" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_shiftId" "_shiftObj" "_shiftStart" "_shiftEnd" "_minHours"
prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[shiftId]
string

"string" -- exact match

filter[shiftObj]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[shiftStart]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[shiftEnd]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[minHours]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "shiftId" "shiftObj" "shiftStart" "shiftEnd" "minHours" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_shiftId" "_shiftObj" "_shiftStart" "_shiftEnd" "_minHours"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'userId',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'filter[total]': 'string',
  'prefilter[shiftId]': 'string',
  'filter[shiftObj]': 'string',
  'prefilter[shiftStart]': 'string',
  'prefilter[shiftEnd]': 'string',
  'filter[minHours]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'userId',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/shift?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

getStats_1_1_outliers

Get outliers stats v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/outliers?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

getStats_1_1_timesheet_total

Get total stats/timesheet v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.
For work range use 1.1/stats/total?fields=start,end,workRange

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "offcomputer" "computer" "mobile" "manual" "mobMan" "paidBreak" "unpaidBreak" "meeting" "paidLeave" "unpaidLeave" "offcomputerRatio" "computerRatio" "mobileRatio" "manualRatio" "mobManRatio" "paidBreakRatio" "unpaidBreakRatio" "meetingRatio" "paidLeaveRatio" "unpaidLeaveRatio" "unratedHis" "unprodHis" "neutralHis" "prodHis" "unratedHisRatio" "unprodHisRatio" "neutralHisRatio" "prodHisRatio" "unrated" "unprod" "neutral" "prod" "unratedRatio" "unprodRatio" "neutralRatio" "prodRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "clicks" "idleSec" "idleSecMeeting" "keys" "moves" "totalSec" "activeSec" "clicksRatio" "idleSecRatio" "idleSecMeetingRatio" "keysRatio" "movesRatio" "totalSecRatio" "activeSecRatio" "totalMins" "idleMins" "idleMinsMeeting" "idleMinsRatio" "idleOutsideMeetingSec" "idleOutsideMeetingMins" "idleSecDuringMeetingRatio" "idleSecOutsideMeetingRatio" "idleMinsDuringMeetingRatio" "idleMinsOutsideMeetingRatio" "outShift" "outShiftRatio" "project" "task" "shift" "projectRatio" "taskRatio" "shiftRatio" "comCat" "comCatRatio" "scoreTotal" "scoreTotalRatio" "workRange" "workRangeRatio" "modeTotal" "total" "meetingCount" "avgMeetingDuration" "avgIdleTimePerMeeting" "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "_offcomputer" "_computer" "_mobile" "_manual" "_mobMan" "_paidBreak" "_unpaidBreak" "_meeting" "_paidLeave" "_unpaidLeave" "_offcomputerRatio" "_computerRatio" "_mobileRatio" "_manualRatio" "_mobManRatio" "_paidBreakRatio" "_unpaidBreakRatio" "_meetingRatio" "_paidLeaveRatio" "_unpaidLeaveRatio" "_unratedHis" "_unprodHis" "_neutralHis" "_prodHis" "_unratedHisRatio" "_unprodHisRatio" "_neutralHisRatio" "_prodHisRatio" "_unrated" "_unprod" "_neutral" "_prod" "_unratedRatio" "_unprodRatio" "_neutralRatio" "_prodRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio" "_clicks" "_idleSec" "_idleSecMeeting" "_keys" "_moves" "_totalSec" "_activeSec" "_clicksRatio" "_idleSecRatio" "_idleSecMeetingRatio" "_keysRatio" "_movesRatio" "_totalSecRatio" "_activeSecRatio" "_totalMins" "_idleMins" "_idleMinsMeeting" "_idleMinsRatio" "_idleOutsideMeetingSec" "_idleOutsideMeetingMins" "_idleSecDuringMeetingRatio" "_idleSecOutsideMeetingRatio" "_idleMinsDuringMeetingRatio" "_idleMinsOutsideMeetingRatio" "_outShift" "_outShiftRatio" "_project" "_task" "_shift" "_projectRatio" "_taskRatio" "_shiftRatio" "_comCat" "_comCatRatio" "_scoreTotal" "_scoreTotalRatio" "_workRange" "_workRangeRatio" "_modeTotal" "_total" "_meetingCount" "_avgMeetingDuration" "_avgIdleTimePerMeeting" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2"
filter[offcomputer]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[computer]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobile]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[manual]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobMan]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidBreak]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidBreak]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidLeave]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidLeave]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[offcomputerRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[computerRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobileRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[manualRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobManRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidBreakRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidBreakRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidLeaveRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidLeaveRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unrated]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprod]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutral]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prod]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBias]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBiasRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clicks]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keys]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[moves]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clicksRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keysRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[movesRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleOutsideMeetingSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleOutsideMeetingMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecDuringMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecOutsideMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsDuringMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsOutsideMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShiftRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[project]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[task]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[shift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[projectRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[taskRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[shiftRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCat]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCatRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[scoreTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[scoreTotalRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[workRange]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[workRangeRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[modeTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingCount]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avgMeetingDuration]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avgIdleTimePerMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "offcomputer" "computer" "mobile" "manual" "mobMan" "paidBreak" "unpaidBreak" "meeting" "paidLeave" "unpaidLeave" "offcomputerRatio" "computerRatio" "mobileRatio" "manualRatio" "mobManRatio" "paidBreakRatio" "unpaidBreakRatio" "meetingRatio" "paidLeaveRatio" "unpaidLeaveRatio" "unratedHis" "unprodHis" "neutralHis" "prodHis" "unratedHisRatio" "unprodHisRatio" "neutralHisRatio" "prodHisRatio" "unrated" "unprod" "neutral" "prod" "unratedRatio" "unprodRatio" "neutralRatio" "prodRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "clicks" "idleSec" "idleSecMeeting" "keys" "moves" "totalSec" "activeSec" "clicksRatio" "idleSecRatio" "idleSecMeetingRatio" "keysRatio" "movesRatio" "totalSecRatio" "activeSecRatio" "totalMins" "idleMins" "idleMinsMeeting" "idleMinsRatio" "idleOutsideMeetingSec" "idleOutsideMeetingMins" "idleSecDuringMeetingRatio" "idleSecOutsideMeetingRatio" "idleMinsDuringMeetingRatio" "idleMinsOutsideMeetingRatio" "outShift" "outShiftRatio" "project" "task" "shift" "projectRatio" "taskRatio" "shiftRatio" "comCat" "comCatRatio" "scoreTotal" "scoreTotalRatio" "workRange" "workRangeRatio" "modeTotal" "total" "meetingCount" "avgMeetingDuration" "avgIdleTimePerMeeting" "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "_offcomputer" "_computer" "_mobile" "_manual" "_mobMan" "_paidBreak" "_unpaidBreak" "_meeting" "_paidLeave" "_unpaidLeave" "_offcomputerRatio" "_computerRatio" "_mobileRatio" "_manualRatio" "_mobManRatio" "_paidBreakRatio" "_unpaidBreakRatio" "_meetingRatio" "_paidLeaveRatio" "_unpaidLeaveRatio" "_unratedHis" "_unprodHis" "_neutralHis" "_prodHis" "_unratedHisRatio" "_unprodHisRatio" "_neutralHisRatio" "_prodHisRatio" "_unrated" "_unprod" "_neutral" "_prod" "_unratedRatio" "_unprodRatio" "_neutralRatio" "_prodRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio" "_clicks" "_idleSec" "_idleSecMeeting" "_keys" "_moves" "_totalSec" "_activeSec" "_clicksRatio" "_idleSecRatio" "_idleSecMeetingRatio" "_keysRatio" "_movesRatio" "_totalSecRatio" "_activeSecRatio" "_totalMins" "_idleMins" "_idleMinsMeeting" "_idleMinsRatio" "_idleOutsideMeetingSec" "_idleOutsideMeetingMins" "_idleSecDuringMeetingRatio" "_idleSecOutsideMeetingRatio" "_idleMinsDuringMeetingRatio" "_idleMinsOutsideMeetingRatio" "_outShift" "_outShiftRatio" "_project" "_task" "_shift" "_projectRatio" "_taskRatio" "_shiftRatio" "_comCat" "_comCatRatio" "_scoreTotal" "_scoreTotalRatio" "_workRange" "_workRangeRatio" "_modeTotal" "_total" "_meetingCount" "_avgMeetingDuration" "_avgIdleTimePerMeeting" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'offcomputer',
  'filter[offcomputer]': 'string',
  'filter[computer]': 'string',
  'filter[mobile]': 'string',
  'filter[manual]': 'string',
  'filter[mobMan]': 'string',
  'filter[paidBreak]': 'string',
  'filter[unpaidBreak]': 'string',
  'filter[meeting]': 'string',
  'filter[paidLeave]': 'string',
  'filter[unpaidLeave]': 'string',
  'filter[offcomputerRatio]': 'string',
  'filter[computerRatio]': 'string',
  'filter[mobileRatio]': 'string',
  'filter[manualRatio]': 'string',
  'filter[mobManRatio]': 'string',
  'filter[paidBreakRatio]': 'string',
  'filter[unpaidBreakRatio]': 'string',
  'filter[meetingRatio]': 'string',
  'filter[paidLeaveRatio]': 'string',
  'filter[unpaidLeaveRatio]': 'string',
  'filter[unratedHis]': 'string',
  'filter[unprodHis]': 'string',
  'filter[neutralHis]': 'string',
  'filter[prodHis]': 'string',
  'filter[unratedHisRatio]': 'string',
  'filter[unprodHisRatio]': 'string',
  'filter[neutralHisRatio]': 'string',
  'filter[prodHisRatio]': 'string',
  'filter[unrated]': 'string',
  'filter[unprod]': 'string',
  'filter[neutral]': 'string',
  'filter[prod]': 'string',
  'filter[unratedRatio]': 'string',
  'filter[unprodRatio]': 'string',
  'filter[neutralRatio]': 'string',
  'filter[prodRatio]': 'string',
  'filter[standardActiveSec]': 'string',
  'filter[activeBias]': 'string',
  'filter[activeBiasRatio]': 'string',
  'filter[standardActiveSecRatio]': 'string',
  'filter[clicks]': 'string',
  'filter[idleSec]': 'string',
  'filter[idleSecMeeting]': 'string',
  'filter[keys]': 'string',
  'filter[moves]': 'string',
  'filter[totalSec]': 'string',
  'filter[activeSec]': 'string',
  'filter[clicksRatio]': 'string',
  'filter[idleSecRatio]': 'string',
  'filter[idleSecMeetingRatio]': 'string',
  'filter[keysRatio]': 'string',
  'filter[movesRatio]': 'string',
  'filter[totalSecRatio]': 'string',
  'filter[activeSecRatio]': 'string',
  'filter[totalMins]': 'string',
  'filter[idleMins]': 'string',
  'filter[idleMinsMeeting]': 'string',
  'filter[idleMinsRatio]': 'string',
  'filter[idleOutsideMeetingSec]': 'string',
  'filter[idleOutsideMeetingMins]': 'string',
  'filter[idleSecDuringMeetingRatio]': 'string',
  'filter[idleSecOutsideMeetingRatio]': 'string',
  'filter[idleMinsDuringMeetingRatio]': 'string',
  'filter[idleMinsOutsideMeetingRatio]': 'string',
  'filter[outShift]': 'string',
  'filter[outShiftRatio]': 'string',
  'filter[project]': 'string',
  'filter[task]': 'string',
  'filter[shift]': 'string',
  'filter[projectRatio]': 'string',
  'filter[taskRatio]': 'string',
  'filter[shiftRatio]': 'string',
  'filter[comCat]': 'string',
  'filter[comCatRatio]': 'string',
  'filter[scoreTotal]': 'string',
  'filter[scoreTotalRatio]': 'string',
  'filter[workRange]': 'string',
  'filter[workRangeRatio]': 'string',
  'filter[modeTotal]': 'string',
  'filter[total]': 'string',
  'filter[meetingCount]': 'string',
  'filter[avgMeetingDuration]': 'string',
  'filter[avgIdleTimePerMeeting]': 'string',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'offcomputer',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/timesheet/total?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

getStats_1_1_timesheet_category

Get category stats/timesheet v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "meetingTotal" "comCat" "comCatObj" "entity" "name" "score" "tagId" "userCat" "clicks" "moves" "keys" "totalMins" "idleSec" "idleSecRatio" "idleMins" "idleMinsRatio" "totalSec" "activeSec" "activeSecRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_meetingTotal" "_comCat" "_comCatObj" "_entity" "_name" "_score" "_tagId" "_userCat" "_clicks" "_moves" "_keys" "_totalMins" "_idleSec" "_idleSecRatio" "_idleMins" "_idleMinsRatio" "_totalSec" "_activeSec" "_activeSecRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio"
prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[comCat]
string

"string" -- exact match

filter[comCatObj]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[entity]
string

"string" -- exact match

prefilter[name]
string

unknown API-defined value

prefilter[score]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[tagId]
string

"string" -- exact match

prefilter[userCat]
string

"string" -- exact match

filter[clicks]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[moves]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keys]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBias]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBiasRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "meetingTotal" "comCat" "comCatObj" "entity" "name" "score" "tagId" "userCat" "clicks" "moves" "keys" "totalMins" "idleSec" "idleSecRatio" "idleMins" "idleMinsRatio" "totalSec" "activeSec" "activeSecRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_meetingTotal" "_comCat" "_comCatObj" "_entity" "_name" "_score" "_tagId" "_userCat" "_clicks" "_moves" "_keys" "_totalMins" "_idleSec" "_idleSecRatio" "_idleMins" "_idleMinsRatio" "_totalSec" "_activeSec" "_activeSecRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'userId',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'filter[total]': 'string',
  'filter[meetingTotal]': 'string',
  'prefilter[comCat]': 'string',
  'filter[comCatObj]': 'string',
  'prefilter[entity]': 'string',
  'prefilter[name]': 'string',
  'prefilter[score]': 'string',
  'prefilter[tagId]': 'string',
  'prefilter[userCat]': 'string',
  'filter[clicks]': 'string',
  'filter[moves]': 'string',
  'filter[keys]': 'string',
  'filter[totalMins]': 'string',
  'filter[idleSec]': 'string',
  'filter[idleSecRatio]': 'string',
  'filter[idleMins]': 'string',
  'filter[idleMinsRatio]': 'string',
  'filter[totalSec]': 'string',
  'filter[activeSec]': 'string',
  'filter[activeSecRatio]': 'string',
  'filter[standardActiveSec]': 'string',
  'filter[activeBias]': 'string',
  'filter[activeBiasRatio]': 'string',
  'filter[standardActiveSecRatio]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'userId',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/timesheet/category?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

getStats_1_1_timesheet_summary

Get summary stats/timesheet v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort. You have to specify sort param for this API to work.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "meetingTotal" "comCat" "comCatObj" "entity" "name" "score" "tagId" "userCat" "clicks" "moves" "keys" "totalMins" "idleSec" "idleSecRatio" "idleMins" "idleMinsRatio" "totalSec" "activeSec" "activeSecRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "offcomputer" "computer" "mobile" "manual" "mobMan" "paidBreak" "unpaidBreak" "meeting" "paidLeave" "unpaidLeave" "offcomputerRatio" "computerRatio" "mobileRatio" "manualRatio" "mobManRatio" "paidBreakRatio" "unpaidBreakRatio" "meetingRatio" "paidLeaveRatio" "unpaidLeaveRatio" "unratedHis" "unprodHis" "neutralHis" "prodHis" "unratedHisRatio" "unprodHisRatio" "neutralHisRatio" "prodHisRatio" "unrated" "unprod" "neutral" "prod" "unratedRatio" "unprodRatio" "neutralRatio" "prodRatio" "idleSecMeeting" "clicksRatio" "idleSecMeetingRatio" "keysRatio" "movesRatio" "totalSecRatio" "idleMinsMeeting" "idleOutsideMeetingSec" "idleOutsideMeetingMins" "idleSecDuringMeetingRatio" "idleSecOutsideMeetingRatio" "idleMinsDuringMeetingRatio" "idleMinsOutsideMeetingRatio" "outShift" "outShiftRatio" "project" "task" "shift" "projectRatio" "taskRatio" "shiftRatio" "comCatRatio" "scoreTotal" "scoreTotalRatio" "workRange" "workRangeRatio" "modeTotal" "meetingCount" "avgMeetingDuration" "avgIdleTimePerMeeting" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_meetingTotal" "_comCat" "_comCatObj" "_entity" "_name" "_score" "_tagId" "_userCat" "_clicks" "_moves" "_keys" "_totalMins" "_idleSec" "_idleSecRatio" "_idleMins" "_idleMinsRatio" "_totalSec" "_activeSec" "_activeSecRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio" "_offcomputer" "_computer" "_mobile" "_manual" "_mobMan" "_paidBreak" "_unpaidBreak" "_meeting" "_paidLeave" "_unpaidLeave" "_offcomputerRatio" "_computerRatio" "_mobileRatio" "_manualRatio" "_mobManRatio" "_paidBreakRatio" "_unpaidBreakRatio" "_meetingRatio" "_paidLeaveRatio" "_unpaidLeaveRatio" "_unratedHis" "_unprodHis" "_neutralHis" "_prodHis" "_unratedHisRatio" "_unprodHisRatio" "_neutralHisRatio" "_prodHisRatio" "_unrated" "_unprod" "_neutral" "_prod" "_unratedRatio" "_unprodRatio" "_neutralRatio" "_prodRatio" "_idleSecMeeting" "_clicksRatio" "_idleSecMeetingRatio" "_keysRatio" "_movesRatio" "_totalSecRatio" "_idleMinsMeeting" "_idleOutsideMeetingSec" "_idleOutsideMeetingMins" "_idleSecDuringMeetingRatio" "_idleSecOutsideMeetingRatio" "_idleMinsDuringMeetingRatio" "_idleMinsOutsideMeetingRatio" "_outShift" "_outShiftRatio" "_project" "_task" "_shift" "_projectRatio" "_taskRatio" "_shiftRatio" "_comCatRatio" "_scoreTotal" "_scoreTotalRatio" "_workRange" "_workRangeRatio" "_modeTotal" "_meetingCount" "_avgMeetingDuration" "_avgIdleTimePerMeeting"
prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCat]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCatObj]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[entity]
string

"string" -- exact match

prefilter[name]
string

unknown API-defined value

prefilter[score]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[tagId]
string

"string" -- exact match

prefilter[userCat]
string

"string" -- exact match

filter[clicks]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[moves]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keys]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBias]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[activeBiasRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[standardActiveSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[offcomputer]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[computer]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobile]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[manual]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobMan]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidBreak]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidBreak]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidLeave]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidLeave]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[offcomputerRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[computerRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobileRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[manualRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[mobManRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidBreakRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidBreakRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[paidLeaveRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unpaidLeaveRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodHis]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodHisRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unrated]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprod]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutral]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prod]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unratedRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[unprodRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[neutralRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[prodRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[clicksRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keysRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[movesRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalSecRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleOutsideMeetingSec]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleOutsideMeetingMins]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecDuringMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleSecOutsideMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsDuringMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[idleMinsOutsideMeetingRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShiftRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[project]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[task]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[shift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[projectRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[taskRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[shiftRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[comCatRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[scoreTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[scoreTotalRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[workRange]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[workRangeRatio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[modeTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[meetingCount]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avgMeetingDuration]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avgIdleTimePerMeeting]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "meetingTotal" "comCat" "comCatObj" "entity" "name" "score" "tagId" "userCat" "clicks" "moves" "keys" "totalMins" "idleSec" "idleSecRatio" "idleMins" "idleMinsRatio" "totalSec" "activeSec" "activeSecRatio" "standardActiveSec" "activeBias" "activeBiasRatio" "standardActiveSecRatio" "offcomputer" "computer" "mobile" "manual" "mobMan" "paidBreak" "unpaidBreak" "meeting" "paidLeave" "unpaidLeave" "offcomputerRatio" "computerRatio" "mobileRatio" "manualRatio" "mobManRatio" "paidBreakRatio" "unpaidBreakRatio" "meetingRatio" "paidLeaveRatio" "unpaidLeaveRatio" "unratedHis" "unprodHis" "neutralHis" "prodHis" "unratedHisRatio" "unprodHisRatio" "neutralHisRatio" "prodHisRatio" "unrated" "unprod" "neutral" "prod" "unratedRatio" "unprodRatio" "neutralRatio" "prodRatio" "idleSecMeeting" "clicksRatio" "idleSecMeetingRatio" "keysRatio" "movesRatio" "totalSecRatio" "idleMinsMeeting" "idleOutsideMeetingSec" "idleOutsideMeetingMins" "idleSecDuringMeetingRatio" "idleSecOutsideMeetingRatio" "idleMinsDuringMeetingRatio" "idleMinsOutsideMeetingRatio" "outShift" "outShiftRatio" "project" "task" "shift" "projectRatio" "taskRatio" "shiftRatio" "comCatRatio" "scoreTotal" "scoreTotalRatio" "workRange" "workRangeRatio" "modeTotal" "meetingCount" "avgMeetingDuration" "avgIdleTimePerMeeting" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_meetingTotal" "_comCat" "_comCatObj" "_entity" "_name" "_score" "_tagId" "_userCat" "_clicks" "_moves" "_keys" "_totalMins" "_idleSec" "_idleSecRatio" "_idleMins" "_idleMinsRatio" "_totalSec" "_activeSec" "_activeSecRatio" "_standardActiveSec" "_activeBias" "_activeBiasRatio" "_standardActiveSecRatio" "_offcomputer" "_computer" "_mobile" "_manual" "_mobMan" "_paidBreak" "_unpaidBreak" "_meeting" "_paidLeave" "_unpaidLeave" "_offcomputerRatio" "_computerRatio" "_mobileRatio" "_manualRatio" "_mobManRatio" "_paidBreakRatio" "_unpaidBreakRatio" "_meetingRatio" "_paidLeaveRatio" "_unpaidLeaveRatio" "_unratedHis" "_unprodHis" "_neutralHis" "_prodHis" "_unratedHisRatio" "_unprodHisRatio" "_neutralHisRatio" "_prodHisRatio" "_unrated" "_unprod" "_neutral" "_prod" "_unratedRatio" "_unprodRatio" "_neutralRatio" "_prodRatio" "_idleSecMeeting" "_clicksRatio" "_idleSecMeetingRatio" "_keysRatio" "_movesRatio" "_totalSecRatio" "_idleMinsMeeting" "_idleOutsideMeetingSec" "_idleOutsideMeetingMins" "_idleSecDuringMeetingRatio" "_idleSecOutsideMeetingRatio" "_idleMinsDuringMeetingRatio" "_idleMinsOutsideMeetingRatio" "_outShift" "_outShiftRatio" "_project" "_task" "_shift" "_projectRatio" "_taskRatio" "_shiftRatio" "_comCatRatio" "_scoreTotal" "_scoreTotalRatio" "_workRange" "_workRangeRatio" "_modeTotal" "_meetingCount" "_avgMeetingDuration" "_avgIdleTimePerMeeting"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'userId',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'filter[total]': 'string',
  'filter[meetingTotal]': 'string',
  'filter[comCat]': 'string',
  'filter[comCatObj]': 'string',
  'prefilter[entity]': 'string',
  'prefilter[name]': 'string',
  'prefilter[score]': 'string',
  'prefilter[tagId]': 'string',
  'prefilter[userCat]': 'string',
  'filter[clicks]': 'string',
  'filter[moves]': 'string',
  'filter[keys]': 'string',
  'filter[totalMins]': 'string',
  'filter[idleSec]': 'string',
  'filter[idleSecRatio]': 'string',
  'filter[idleMins]': 'string',
  'filter[idleMinsRatio]': 'string',
  'filter[totalSec]': 'string',
  'filter[activeSec]': 'string',
  'filter[activeSecRatio]': 'string',
  'filter[standardActiveSec]': 'string',
  'filter[activeBias]': 'string',
  'filter[activeBiasRatio]': 'string',
  'filter[standardActiveSecRatio]': 'string',
  'filter[offcomputer]': 'string',
  'filter[computer]': 'string',
  'filter[mobile]': 'string',
  'filter[manual]': 'string',
  'filter[mobMan]': 'string',
  'filter[paidBreak]': 'string',
  'filter[unpaidBreak]': 'string',
  'filter[meeting]': 'string',
  'filter[paidLeave]': 'string',
  'filter[unpaidLeave]': 'string',
  'filter[offcomputerRatio]': 'string',
  'filter[computerRatio]': 'string',
  'filter[mobileRatio]': 'string',
  'filter[manualRatio]': 'string',
  'filter[mobManRatio]': 'string',
  'filter[paidBreakRatio]': 'string',
  'filter[unpaidBreakRatio]': 'string',
  'filter[meetingRatio]': 'string',
  'filter[paidLeaveRatio]': 'string',
  'filter[unpaidLeaveRatio]': 'string',
  'filter[unratedHis]': 'string',
  'filter[unprodHis]': 'string',
  'filter[neutralHis]': 'string',
  'filter[prodHis]': 'string',
  'filter[unratedHisRatio]': 'string',
  'filter[unprodHisRatio]': 'string',
  'filter[neutralHisRatio]': 'string',
  'filter[prodHisRatio]': 'string',
  'filter[unrated]': 'string',
  'filter[unprod]': 'string',
  'filter[neutral]': 'string',
  'filter[prod]': 'string',
  'filter[unratedRatio]': 'string',
  'filter[unprodRatio]': 'string',
  'filter[neutralRatio]': 'string',
  'filter[prodRatio]': 'string',
  'filter[idleSecMeeting]': 'string',
  'filter[clicksRatio]': 'string',
  'filter[idleSecMeetingRatio]': 'string',
  'filter[keysRatio]': 'string',
  'filter[movesRatio]': 'string',
  'filter[totalSecRatio]': 'string',
  'filter[idleMinsMeeting]': 'string',
  'filter[idleOutsideMeetingSec]': 'string',
  'filter[idleOutsideMeetingMins]': 'string',
  'filter[idleSecDuringMeetingRatio]': 'string',
  'filter[idleSecOutsideMeetingRatio]': 'string',
  'filter[idleMinsDuringMeetingRatio]': 'string',
  'filter[idleMinsOutsideMeetingRatio]': 'string',
  'filter[outShift]': 'string',
  'filter[outShiftRatio]': 'string',
  'filter[project]': 'string',
  'filter[task]': 'string',
  'filter[shift]': 'string',
  'filter[projectRatio]': 'string',
  'filter[taskRatio]': 'string',
  'filter[shiftRatio]': 'string',
  'filter[comCatRatio]': 'string',
  'filter[scoreTotal]': 'string',
  'filter[scoreTotalRatio]': 'string',
  'filter[workRange]': 'string',
  'filter[workRangeRatio]': 'string',
  'filter[modeTotal]': 'string',
  'filter[meetingCount]': 'string',
  'filter[avgMeetingDuration]': 'string',
  'filter[avgIdleTimePerMeeting]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'userId',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/timesheet/summary?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

getStats_1_1_timesheet_work-life

Get work-life stats/timesheet v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "total" "totalHours" "lastHour" "outShift" "day" "tooManyHours" "lateHours" "outOfShiftWork" "weekendWork" "totalIssues" "dailyIssues" "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "_total" "_totalHours" "_lastHour" "_outShift" "_day" "_tooManyHours" "_lateHours" "_outOfShiftWork" "_weekendWork" "_totalIssues" "_dailyIssues" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2"
filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalHours]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[lastHour]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outShift]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[day]
string

"string" -- exact match

filter[tooManyHours]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lateHours]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[outOfShiftWork]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[weekendWork]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[totalIssues]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[dailyIssues]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "total" "totalHours" "lastHour" "outShift" "day" "tooManyHours" "lateHours" "outOfShiftWork" "weekendWork" "totalIssues" "dailyIssues" "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "_total" "_totalHours" "_lastHour" "_outShift" "_day" "_tooManyHours" "_lateHours" "_outOfShiftWork" "_weekendWork" "_totalIssues" "_dailyIssues" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'total',
  'filter[total]': 'string',
  'filter[totalHours]': 'string',
  'prefilter[lastHour]': 'string',
  'filter[outShift]': 'string',
  'prefilter[day]': 'string',
  'filter[tooManyHours]': 'string',
  'filter[lateHours]': 'string',
  'filter[outOfShiftWork]': 'string',
  'filter[weekendWork]': 'string',
  'filter[totalIssues]': 'string',
  'filter[dailyIssues]': 'string',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'total',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/timesheet/work-life?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

getStats_1_1_timesheet_shift

Get shift stats/timesheet v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "shiftId" "shiftObj" "shiftStart" "shiftEnd" "minHours" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_shiftId" "_shiftObj" "_shiftStart" "_shiftEnd" "_minHours"
prefilter[userId]
string

"string" -- exact match

prefilter[userObjPrePos]
string

"string" -- exact match

prefilter[userObjPos]
string

"string" -- exact match

prefilter[userName]
string

"string" -- exact match

prefilter[userNameNorm]
string

unknown API-defined value

prefilter[userArchived]
string

"string" -- exact match

prefilter[currentTagId]
string

"string" -- exact match

prefilter[currentTagObj]
string

"string" -- exact match

prefilter[currentTagName]
string

"string" -- exact match

prefilter[currentTagNameNorm]
string

"string" -- exact match

prefilter[projectId]
string

"string" -- exact match

prefilter[projectObj]
string

"string" -- exact match

prefilter[projectName]
string

"string" -- exact match

prefilter[projectNameNorm]
string

"string" -- exact match

prefilter[projectIntegrationProvider]
string

"string" -- exact match

prefilter[projectIntegrationName]
string

"string" -- exact match

prefilter[projectIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskId]
string

"string" -- exact match

prefilter[taskObj]
string

"string" -- exact match

prefilter[taskName]
string

"string" -- exact match

prefilter[taskNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationProvider]
string

"string" -- exact match

prefilter[taskIntegrationName]
string

"string" -- exact match

prefilter[taskIntegrationNameNorm]
string

"string" -- exact match

prefilter[taskIntegrationLink]
string

"string" -- exact match

prefilter[taskIntegrationLastTracked]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[timezone]
string

"string" -- exact match

prefilter[start]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[end]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[item]
string

"string" -- exact match

filter[ratio]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[ratioTotal]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[count]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[quants]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[offsets]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant0]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant1]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[quant2]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[total]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[shiftId]
string

"string" -- exact match

filter[shiftObj]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[shiftStart]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

prefilter[shiftEnd]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[minHours]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

ratio-page
string

When specified, defines how many resulting first items to skip

ratio-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

ratio-sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "userId" "userObjPrePos" "userObjPos" "userName" "userNameNorm" "userArchived" "currentTagId" "currentTagObj" "currentTagName" "currentTagNameNorm" "projectId" "projectObj" "projectName" "projectNameNorm" "projectIntegrationProvider" "projectIntegrationName" "projectIntegrationNameNorm" "taskId" "taskObj" "taskName" "taskNameNorm" "taskIntegrationProvider" "taskIntegrationName" "taskIntegrationNameNorm" "taskIntegrationLink" "taskIntegrationLastTracked" "date" "timezone" "start" "end" "item" "ratio" "ratioTotal" "count" "quants" "offsets" "quant0" "quant1" "quant2" "total" "shiftId" "shiftObj" "shiftStart" "shiftEnd" "minHours" "_userId" "_userObjPrePos" "_userObjPos" "_userName" "_userNameNorm" "_userArchived" "_currentTagId" "_currentTagObj" "_currentTagName" "_currentTagNameNorm" "_projectId" "_projectObj" "_projectName" "_projectNameNorm" "_projectIntegrationProvider" "_projectIntegrationName" "_projectIntegrationNameNorm" "_taskId" "_taskObj" "_taskName" "_taskNameNorm" "_taskIntegrationProvider" "_taskIntegrationName" "_taskIntegrationNameNorm" "_taskIntegrationLink" "_taskIntegrationLastTracked" "_date" "_timezone" "_start" "_end" "_item" "_ratio" "_ratioTotal" "_count" "_quants" "_offsets" "_quant0" "_quant1" "_quant2" "_total" "_shiftId" "_shiftObj" "_shiftStart" "_shiftEnd" "_minHours"
ratio-filter[total]
string

Prefilter ratio totals.

ratio-field
string

A field to specify for "ratio" paging. Default is first specified in "ratio" param

ratio-id
string

ID of ratio item for "ratio" paging. Default is top first in ratio array.

date-page
string

When specified, defines how many resulting first items to skip

date-limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0',
  page: 'string',
  limit: 'string',
  sort: 'userId',
  'prefilter[userId]': 'string',
  'prefilter[userObjPrePos]': 'string',
  'prefilter[userObjPos]': 'string',
  'prefilter[userName]': 'string',
  'prefilter[userNameNorm]': 'string',
  'prefilter[userArchived]': 'string',
  'prefilter[currentTagId]': 'string',
  'prefilter[currentTagObj]': 'string',
  'prefilter[currentTagName]': 'string',
  'prefilter[currentTagNameNorm]': 'string',
  'prefilter[projectId]': 'string',
  'prefilter[projectObj]': 'string',
  'prefilter[projectName]': 'string',
  'prefilter[projectNameNorm]': 'string',
  'prefilter[projectIntegrationProvider]': 'string',
  'prefilter[projectIntegrationName]': 'string',
  'prefilter[projectIntegrationNameNorm]': 'string',
  'prefilter[taskId]': 'string',
  'prefilter[taskObj]': 'string',
  'prefilter[taskName]': 'string',
  'prefilter[taskNameNorm]': 'string',
  'prefilter[taskIntegrationProvider]': 'string',
  'prefilter[taskIntegrationName]': 'string',
  'prefilter[taskIntegrationNameNorm]': 'string',
  'prefilter[taskIntegrationLink]': 'string',
  'prefilter[taskIntegrationLastTracked]': 'string',
  'prefilter[date]': 'string',
  'prefilter[timezone]': 'string',
  'prefilter[start]': 'string',
  'prefilter[end]': 'string',
  'prefilter[item]': 'string',
  'filter[ratio]': 'string',
  'filter[ratioTotal]': 'string',
  'filter[count]': 'string',
  'prefilter[quants]': 'string',
  'prefilter[offsets]': 'string',
  'filter[quant0]': 'string',
  'filter[quant1]': 'string',
  'filter[quant2]': 'string',
  'filter[total]': 'string',
  'prefilter[shiftId]': 'string',
  'filter[shiftObj]': 'string',
  'prefilter[shiftStart]': 'string',
  'prefilter[shiftEnd]': 'string',
  'filter[minHours]': 'string',
  'ratio-page': 'string',
  'ratio-limit': 'string',
  'ratio-sort': 'userId',
  'ratio-filter[total]': 'string',
  'ratio-field': 'string',
  'ratio-id': 'string',
  'date-page': 'string',
  'date-limit': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/timesheet/shift?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

getStats_1_1_timesheet_outliers

Get outliers stats/timesheet v1.1.
NOTE: This documentation uses ratio=score and sort=modeTotal as an example. As such, you can get responses that contain score and modeTotal, depending on the parameters you specify when making the request. It is important to understand that score will be replaced by the value you specify for the ratio param and modeTotal will be replaced by the value you specify for sort.

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 date-time for the start of the query range (inclusive). Defaults to 30 minutes before the to parameter

to
string <date-time>

ISO 8601 date-time for the end of the query range (exclusive). Defaults to the current time

user
string

Comma-separated list of user IDs to filter results. If omitted, returns data for the authenticated user. Use all to retrieve company-wide totals

tag
string

Comma-separated list of tag IDs. When specified, filters results to include only users assigned to these tags

task
string

Task ID to filter statistics. When specified, returns statistics only for the specified task

unpaid
integer

Set to 1 to include unpaid time from unpaid breaks in the report. Set to 0 or omit to exclude unpaid time

breaks
string

Specifies which types of breaks to include in results: all for all breaks, paid for paid breaks only, or unpaid for unpaid breaks only. Cannot be combined with the task parameter

Enum: "all" "paid" "unpaid"
fields
string

Comma-separated list of field names to include in the response. When specified, only the requested fields will be returned

group-by
string

Field name to group results by. Results will be aggregated according to the specified field if grouping is supported for that field

resolve
string

Optional comma-separated list of field names to resolve.

ratio
string

Optional comma-separated list of field names to get total ratio of.

level
string

Level of information ("user" by default)

Enum: "company" "user"
timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"

Period unit of ranges subdivision. days by default

Enum: "minutes" "hours" "days" "months" "years"
interval
integer <int32> >= 1

Number of period units. 1 by default

paging
integer

Set to 1 to include paging object (current page information) in response. 0 (do not include) by default

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  user: 'string',
  tag: 'string',
  task: 'string',
  unpaid: '0',
  breaks: 'all',
  fields: 'string',
  'group-by': 'string',
  resolve: 'string',
  ratio: 'string',
  level: 'company',
  timezone: 'string',
  period: 'days',
  interval: '1',
  paging: '0'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/stats/timesheet/outliers?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

Files

files

getFiles

Retrieve list of all files (screenshots, webcam captures, etc.) for users.

This endpoint returns files captured during work sessions, including screenshots and webcam images based on company tracking settings.

File Types:

  • Screenshots of user activity
  • Webcam captures (if enabled)
  • Other tracked media files

Use Cases:

  • Review user activity evidence
  • Audit work sessions
  • Compliance and verification

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Comma-separated list of user IDs whose files to retrieve (defaults to current user)

tag
string

Comma-separated list of tag IDs to retrieve files for all users in those tags

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "date" "entity" "avg-activity" "duplicate" "isBlured" "_date" "_entity" "_avg-activity" "_duplicate" "_isBlured"
filter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[entity]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avg-activity]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[duplicate]
string

match string

filter[isBlured]
string

match string

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  tag: 'string',
  page: 'string',
  limit: 'string',
  sort: 'date',
  'filter[date]': 'string',
  'filter[entity]': 'string',
  'filter[avg-activity]': 'string',
  'filter[duplicate]': 'string',
  'filter[isBlured]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/files?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    },
  • "paging": {
    }
}

getFilesOfType

Retrieve files filtered by specific type (screenshots, webcam, etc.).

This endpoint returns files of a specific type, allowing focused retrieval of screenshots or webcam captures separately.

File Types:

  • screenshot - Screen captures during work
  • webcam - Webcam images (if enabled)
  • Other configured file types

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
type
required
string

Type of file to retrieve (screenshot, video, etc.)

Enum: "file" "screenshot" "video"
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Comma-separated list of user IDs whose files to retrieve (defaults to current user)

tag
string

Comma-separated list of tag IDs to retrieve files for all users in those tags

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "date" "entity" "avg-activity" "duplicate" "isBlured" "_date" "_entity" "_avg-activity" "_duplicate" "_isBlured"
filter[date]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[entity]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[avg-activity]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[duplicate]
string

match string

filter[isBlured]
string

match string

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  tag: 'string',
  page: 'string',
  limit: 'string',
  sort: 'date',
  'filter[date]': 'string',
  'filter[entity]': 'string',
  'filter[avg-activity]': 'string',
  'filter[duplicate]': 'string',
  'filter[isBlured]': 'string'
}).toString();

const type = 'YOUR_type_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/files/${type}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    },
  • "paging": {
    }
}

getFileSignedUrl

Generate a temporary signed URL for secure file download.

This endpoint creates a time-limited, authenticated URL for downloading a specific file without requiring additional authentication. The URL expires after a set period.

Use Cases:

  • Secure file downloads in web applications
  • Temporary access to screenshots/webcam images
  • Sharing files without exposing permanent URLs

Security:

  • URLs are time-limited and expire automatically
  • No authentication required once URL is generated
  • Suitable for embedding in reports or dashboards

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
type
required
string

Type of file to retrieve (screenshot, video, etc.)

Enum: "file" "screenshot" "video"
date
required
string <date-time>

ISO 8601 timestamp when the file was captured

number
required
integer

File index number (for screenshots, corresponds to monitor number)

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const type = 'YOUR_type_PARAMETER';
const date = 'YOUR_date_PARAMETER';
const number = 'YOUR_number_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/files/${type}/signed-url/${date}/${number}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

putFile

Create or update file metadata entry in the system.

This endpoint ensures a file entry exists in the database with the specified metadata. Used by tracking clients to register captured files.

Purpose:

  • Register newly captured screenshots/webcam images
  • Update file metadata if entry already exists
  • Link files to work sessions and users

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
type
required
string

Type of file to retrieve (screenshot, video, etc.)

Enum: "file" "screenshot" "video"
date
required
string <date-time>

ISO 8601 timestamp when the file was captured

number
required
integer

File index number (for screenshots, corresponds to monitor number)

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
contentType
string

MIME type of the file (e.g., image/png, image/jpeg)

blur
boolean

When true, the screenshot image is blurred for privacy

chunkId
string <full-date>

ISO 8601 timestamp of the time chunk when the file was created

clicks
integer <int32>

Number of mouse clicks recorded during the screenshot period

movements
integer <int32>

Number of mouse movements recorded during the screenshot period

keys
integer <int32>

Number of keyboard key presses recorded during the screenshot period

period
integer <int32>

Duration of the screenshot period in seconds

imageSize
integer <int32>

File size in bytes

imageMd5
string

MD5 hash of the image file for integrity verification

createdAt
string <full-date>

ISO 8601 timestamp when the file was created

h
integer <int32>

Image height in pixels

w
integer <int32>

Image width in pixels

projectId
string

Unique identifier of the project associated with this file

taskId
string

Unique identifier of the task associated with this file

screenNumber
integer <int32>

Monitor number for multi-monitor setups (0-based index)

type
string

Type of file (e.g., screenshot, video)

Responses

Request samples

Content type
application/json
{
  • "contentType": "string",
  • "blur": true,
  • "chunkId": "string",
  • "clicks": 0,
  • "movements": 0,
  • "keys": 0,
  • "period": 0,
  • "imageSize": 0,
  • "imageMd5": "string",
  • "createdAt": "string",
  • "h": 0,
  • "w": 0,
  • "projectId": "string",
  • "taskId": "string",
  • "screenNumber": 0,
  • "type": "string"
}

Response samples

Content type
application/json
{
  • "data": { }
}

deleteFile

Remove a specific file entry from the system.

This endpoint deletes the metadata entry for a specific file. The actual file in storage may be removed separately based on retention policies.

Use Cases:

  • Remove individual file entries
  • Clean up file metadata
  • Data retention compliance

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
type
required
string

Type of file to retrieve (screenshot, video, etc.)

Enum: "file" "screenshot" "video"
date
required
string <date-time>

ISO 8601 timestamp when the file was captured

number
required
integer

File index number (for screenshots, corresponds to monitor number)

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const type = 'YOUR_type_PARAMETER';
const date = 'YOUR_date_PARAMETER';
const number = 'YOUR_number_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/files/${type}/${date}/${number}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

Categories

Under this section, you can get / update / assign productivity ratings for users or groups

Entity class parameter is an enum class and can have the following values: "default", "none", "app", "title", "URL", "domain", "keyword"

Score parameters are categorized as below:

4 = Productive
3 = Neutral
2 = Unproductive
0 = Unrated

getCategories

Retrieve list of productivity categories configured in the company.

Categories classify applications and websites as productive, unproductive, or neutral. This endpoint returns all categories that have been used or configured in the company.

Category Types:

  • Productive: Work-related applications/websites
  • Unproductive: Non-work activities
  • Neutral: Uncategorized or ambiguous activities

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
string

If specified, ID of Company, user refers to. If omitted, the operation refers to global

global-unrated
string

When true, returns only categories that are unrated in both company and global scopes

Enum: "true" "false"
page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "time" "name" "entity" "score" "_time" "_name" "_entity" "_score"
filter[time]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[name]
string

"string" -- exact match

filter[entity]
string

predefined value

filter[score]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  'global-unrated': 'true',
  page: 'string',
  limit: 'string',
  sort: 'time',
  'filter[time]': 'string',
  'filter[name]': 'string',
  'filter[entity]': 'string',
  'filter[score]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/categories?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

setCategory

Configure productivity classification for an application or website at company level.

This endpoint sets the default productivity category (productive/unproductive/neutral) for a specific application or website across the entire company.

Configuration Scope:

  • Applies to all users in the company
  • Can be overridden per user with Set User Category
  • Affects productivity calculations and reports

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
string

If specified, ID of Company, user refers to. If omitted, the operation refers to global

Request Body schema: application/json
id
string

Unique identifier of the category (application or website)

entity
string

Entity class name (e.g., application name, website domain)

name
string

Display name of the entity

score
number

Productivity score rating from 2 (unproductive) to 4 (productive), or null if unrated

standardActiveSecRatio
number

Ratio between 0 and 1 that overrides the standard active-to-total seconds ratio. Used to calculate average activity percentage per application

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "entity": "string",
  • "name": "string",
  • "score": 0,
  • "standardActiveSecRatio": 0
}

Response samples

Content type
application/json
{
  • "data": { }
}

getUserCategories

Retrieve productivity categories specific to a user or group.

This endpoint returns categories that have been customized for a specific user or group (tag), overriding the company-wide defaults.

Parameter Flexibility:

  • Pass a user ID to get user-specific category overrides
  • Pass a group ID (tag ID) to get group-level category overrides

Group Productivity Override: When a user belongs to only one group, the group's productivity override is applied (unless there is individual override for the user). This allows setting productivity classifications at the group level for consistent team settings.

Returns:

  • User-specific category overrides
  • Group-level category overrides (when group ID is provided)
  • Custom productivity classifications
  • Applications/websites with user/group-level settings

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of the user

query Parameters
company
required
string

ID of Company, user refers to.

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "time" "name" "entity" "score" "_time" "_name" "_entity" "_score"
filter[time]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[name]
string

"string" -- exact match

filter[entity]
string

predefined value

filter[score]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  page: 'string',
  limit: 'string',
  sort: 'time',
  'filter[time]': 'string',
  'filter[name]': 'string',
  'filter[entity]': 'string',
  'filter[score]': 'string'
}).toString();

const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/categories/user/${userId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

setUserCategory

Configure user-specific or group-specific productivity classification override.

This endpoint sets a custom productivity category for a specific user or group (tag), overriding the company-wide default for that application or website.

Parameter Flexibility:

  • Pass a user ID to set user-specific category override
  • Pass a group ID (tag ID) to set group-level category override

Group Productivity Override: When a user belongs to only one group, the group's productivity override is applied (unless there is individual override for the user). This enables setting productivity classifications at the group/team level for consistent settings across team members.

Use Cases:

  • Developer needs IDE classified as productive (vs neutral company default)
  • Designer needs design tools classified differently
  • Role-specific productivity definitions
  • Team/group-level productivity standards

Priority: User-level settings override group-level settings, which override company-level settings.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of the user

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
id
required
string

Unique identifier of the category (application or website)

entity
required
string

Entity class name (e.g., application name, website domain)

name
required
string

Display name of the entity

score
number

Productivity score rating from 2 (unproductive) to 4 (productive), or null if unrated

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "entity": "string",
  • "name": "string",
  • "score": 0
}

Response samples

Content type
application/json
{
  • "data": { }
}

getCategoriesUnratedCount

Get count of uncategorized applications and websites.

This endpoint returns the number of applications and websites that have been detected but not yet assigned a productivity classification.

Use Cases:

  • Identify items needing categorization
  • Monitor category coverage
  • Productivity setup progress tracking

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/categories/unrated-count?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    },
  • "paging": {
    }
}

Groups (Tags)

Creating groups, adding managers and people to groups, updating and deleting groups

getTags

Retrieve list of all groups (tags) in the company.

Groups (also called tags) are used to organize users into teams, departments, or other organizational units. They enable group-level permissions, reporting, and settings.

Group Features:

  • Organize users into teams/departments
  • Group-level productivity overrides
  • Manager assignments for groups
  • Group-based reporting and analytics

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/tags?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

createTag

Create a new group (tag) in the company.

This endpoint creates a new organizational group for categorizing users into teams, departments, or other organizational units.

Use Cases:

  • Create department groups (Sales, Engineering, etc.)
  • Organize teams by location or function
  • Set up project-based groups
  • Enable group-level management and reporting

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
name
string

Display name of the user group (tag)

description
string

Detailed description of the group's purpose or membership criteria

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getTag

Retrieve details of a specific group (tag).

This endpoint returns complete information about a group including its name, members, managers, and configuration.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
tagId
required
string

Unique identifier of the user group (tag)

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const tagId = 'YOUR_tagId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/tags/${tagId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

putTag

Update details of a specific group (tag).

This endpoint modifies group properties such as name, description, or other configuration settings.

Updatable Fields:

  • Group name
  • Group description
  • Group settings

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
tagId
required
string

Unique identifier of the user group (tag)

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
name
string

Display name of the user group (tag)

description
string

Detailed description of the group's purpose or membership criteria

active
boolean

Whether the group is active. When false, the group is archived and hidden from normal views

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "active": true
}

Response samples

Content type
application/json
{
  • "data": { }
}

deleteTag

Delete a group (tag) from the company.

This endpoint removes a group. Users who were members of this group will no longer be associated with it.

Important:

  • Users are not deleted, only the group association is removed
  • Group-level settings (like productivity overrides) will no longer apply
  • Historical data referencing this group is preserved

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
tagId
required
string

Unique identifier of the user group (tag)

query Parameters
company
required
string

ID of Company, user refers to.

deleted
string

When true, operates on an archived (deleted) group instead of an active one

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  deleted: 'true'
}).toString();

const tagId = 'YOUR_tagId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/tags/${tagId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

addTagManager

Assign a manager to a group (tag).

This endpoint designates a user as a manager for the group, granting them management permissions for group members.

Manager Permissions:

  • View group member activity and reports
  • Manage group settings
  • Approve time off and schedule changes
  • Access group-level analytics

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
tagId
required
string

Unique identifier of the user group (tag)

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
userId
required
string

Unique identifier of the user to assign as group manager

Responses

Request samples

Content type
application/json
{
  • "userId": "string"
}

Response samples

Content type
application/json
{
  • "data": { }
}

deleteTagManager

Remove a manager from a group (tag).

This endpoint revokes a user's manager permissions for the group. The user can still be a regular member of the group.

Effect:

  • User loses manager permissions for this group
  • User remains a group member (if they were one)
  • Manager-level access to reports and settings is revoked

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
tagId
required
string

Unique identifier of the user group (tag)

userId
required
string

Unique identifier of the group manager

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const tagId = 'YOUR_tagId_PARAMETER';
const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/tags/${tagId}/managers/${userId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

addUserTag

Add a user to a group (tag) as a member.

This endpoint assigns a user to a group, making them a member of that organizational unit. Group membership enables group-level reporting, permissions, and settings.

Group Membership Benefits:

  • Group-level productivity overrides (when user belongs to only one group)
  • Group-based reporting and analytics
  • Manager oversight for group members
  • Organizational structure and hierarchy

Use Cases:

  • Assign user to department or team
  • Add user to project group
  • Organize users by location or function

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of user (use "me" or empty string to reference caller)

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
tagId
string

Unique identifier of tag to assign to user

Responses

Request samples

Content type
application/json
{
  • "tagId": "string"
}

Response samples

Content type
application/json
{
  • "data": { }
}

deleteUserTag

Remove a user from a group (tag).

This endpoint removes a user's membership from a group. The user will no longer be associated with that organizational unit.

Effect:

  • User is removed from the group
  • Group-level settings no longer apply to this user
  • Group productivity overrides are removed (if user was in only this group)
  • User remains in the system, only group association is removed

Use Cases:

  • User changes departments or teams
  • Remove user from project group
  • Reorganize team structure

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of user (use "me" or empty string to reference caller)

tagId
required
string

Unique identifier of tag

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const userId = 'YOUR_userId_PARAMETER';
const tagId = 'YOUR_tagId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users/${userId}/tags/${tagId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

WorkSchedules

work schedules

getWorkSchedules

Retrieve work schedules for users including shifts, time off, and leave periods.

This endpoint returns work schedule data via streaming for efficient handling of large datasets. Schedules define when users are expected to work, including regular shifts, time off, and leave.

Schedule Types:

  • Regular work shifts
  • Time off and leave periods
  • Holidays and non-working days
  • Custom schedule patterns

Performance Note: Schedules are returned via stream. For large date ranges, connect to a stream handler. Requesting long ranges over HTTP will buffer all data before responding.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Comma-separated list of user IDs

from
required
string

Start date and time of the schedule period (ISO 8601 format)

to
required
string

End date and time of the schedule period (ISO 8601 format)

work-range
number

Time range in seconds for the work schedule period

leave-type
string

Comma-separated list of leave types to filter by (e.g., paidLeave, unpaidLeave)

approved
string

Filter schedules by approval status: pending, approved, or disapproved

Enum: "pending" "approved" "disapproved"
resolve-names
boolean
Default: false

When true, includes reviewer name and user name in the response. Defaults to false

include-auto-approved
boolean
Default: true

When true, includes automatically approved schedules in results. Defaults to true

exclude-status
string

Comma-separated list of approval statuses to exclude (e.g., pending, approved, disapproved)

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "start" "leaveType" "_start" "_leaveType"
filter[start]
string

"string" -- exact match

filter[leaveType]
string

"string" -- exact match

Enum: "paidLeave" "unpaidLeave"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  from: 'string',
  to: 'string',
  'work-range': '0',
  'leave-type': 'string',
  approved: 'pending',
  'resolve-names': 'false',
  'include-auto-approved': 'true',
  'exclude-status': 'string',
  page: 'string',
  limit: 'string',
  sort: 'start',
  'filter[start]': 'string',
  'filter[leaveType]': 'paidLeave'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/work-schedules?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

putWorkSchedules

Bulk create or update work schedules for multiple users.

This endpoint allows batch creation/update of work schedules. The API streams responses for efficient handling of large schedule datasets.

Replace Behavior: The from and to query parameters define the date range bounds. All existing schedules within this range are removed first, then the new schedules from the request body are inserted into this empty time window. This is a replace operation, not a merge.

Bulk Upload Guidelines:

  • Send schedules in chunks of ~30k entries (≈1 year for 100 users)
  • Schedules must be in serial chronological order
  • All schedules must be valid before submission
  • Connection may timeout with excessive data

Important:

  • Old schedules in the date range are deleted before new ones are added
  • Schedules must be chronologically ordered
  • Invalid schedules will cause entire batch to fail
  • For single shift: duplicate "from" and "to" in query params

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
required
string

Start date and time of the schedule period (ISO 8601 format)

to
required
string

End date and time of the schedule period (ISO 8601 format)

Request Body schema: application/json
Array ()
userId
required
string

Id of the user who has the schedule

schedules
required
Array of Array of strings

Array of schedule tuples, each containing: [startTime (ISO 8601), endTime (ISO 8601), minimumHours (optional), leaveType (optional), reason (optional)]

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "ignored": [
    ]
}

getWorkSchedule

Retrieve details of a specific work schedule entry.

This endpoint returns complete information about a single schedule entry including shift times, user assignment, and schedule type.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
id
required
string

Unique identifier of the work schedule

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const id = 'YOUR_id_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/work-schedules/${id}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

putWorkSchedule

Update a specific work schedule entry.

This endpoint modifies an existing schedule entry, allowing changes to shift times, schedule type, or other schedule properties.

Updatable Fields:

  • Shift start and end times
  • Schedule type (work, leave, time off)
  • User assignment
  • Schedule notes

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
id
required
string

Unique identifier of the work schedule

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
approved
required
string

Updated approval status for the leave request (pending, approved, or disapproved)

Enum: "pending" "approved" "disapproved"

Responses

Request samples

Content type
application/json
{
  • "approved": "pending"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

deleteWorkSchedule

Remove a specific work schedule entry.

This endpoint deletes a schedule entry, typically used to remove incorrect schedules or cancel planned shifts.

Use Cases:

  • Remove incorrect schedule entries
  • Cancel planned shifts
  • Clean up old schedules

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
id
required
string

Unique identifier of the work schedule

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const id = 'YOUR_id_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/work-schedules/${id}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

getWorkSchedulesIssues

Retrieve work schedule issues and conflicts for dashboard monitoring.

This endpoint returns scheduling problems such as overlapping shifts, missing schedules, or other conflicts that require attention.

Issue Types:

  • Overlapping shifts
  • Missing schedule coverage
  • Invalid schedule entries
  • Scheduling conflicts

Use Cases:

  • Executive dashboard widgets
  • Schedule validation
  • Proactive issue detection

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Comma-separated list of user IDs, or special values: all, managed, all-self, managed-self, all-on-reports, managed-on-reports

tag
string

Comma-separated list of tag IDs to filter users by their assigned tags

from
required
string

Start date and time of the schedule period (ISO 8601 format)

to
required
string

End date and time of the schedule period (ISO 8601 format)

group-by
string

Field to group results by: either by user's current tag ID or by user ID

Enum: "currentTagId" "userId"
all-users-tag
string

When set to 1, includes the special "all users" tag ID in results. Defaults to 0

Enum: "0" "1"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  tag: 'string',
  from: 'string',
  to: 'string',
  'group-by': 'currentTagId',
  'all-users-tag': '0'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/work-schedules/issues?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

getLeaveStats

Retrieve aggregated leave statistics including total and approved leave counts.

This endpoint returns aggregated statistics about leave requests and approvals, useful for workforce planning and leave management.

Statistics Provided:

  • Total pending leave count (in days)
  • Total approved leave count (in days)

Note: Leave counts are calculated in days, with a maximum of 1 day per calendar day. For example, if multiple leave requests overlap on the same day, they count as 1 day total.

Use Cases:

  • Workforce planning
  • Leave management reporting
  • Capacity planning

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Comma-separated list of user IDs

from
required
string

Start date and time of the schedule period (ISO 8601 format)

to
required
string

End date and time of the schedule period (ISO 8601 format)

work-range
number

Time range in seconds for the work schedule period

leave-type
string

Comma-separated list of leave types to filter by (e.g., paidLeave, unpaidLeave)

approved
string

Filter schedules by approval status: pending, approved, or disapproved

Enum: "pending" "approved" "disapproved"
resolve-names
boolean
Default: false

When true, includes reviewer name and user name in the response. Defaults to false

include-auto-approved
boolean
Default: true

When true, includes automatically approved schedules in results. Defaults to true

exclude-status
string

Comma-separated list of approval statuses to exclude (e.g., pending, approved, disapproved)

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "start" "leaveType" "_start" "_leaveType"
filter[start]
string

"string" -- exact match

filter[leaveType]
string

"string" -- exact match

Enum: "paidLeave" "unpaidLeave"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  from: 'string',
  to: 'string',
  'work-range': '0',
  'leave-type': 'string',
  approved: 'pending',
  'resolve-names': 'false',
  'include-auto-approved': 'true',
  'exclude-status': 'string',
  page: 'string',
  limit: 'string',
  sort: 'start',
  'filter[start]': 'string',
  'filter[leaveType]': 'paidLeave'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/work-schedules/stats?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "totalPendingCount": 0,
  • "totalApprovedCount": 0
}

Notifications

user notifications

getUserNotifications

Retrieve list of notifications for the authenticated user.

This endpoint returns all notifications sent to the user, including system alerts, reminders, and custom notifications.

Notification Types:

  • System notifications (updates, alerts)
  • Work reminders (not started working, breaks)
  • Custom notifications from administrators

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "name" "active" "notifyType" "recipientId" "user" "pricingPlan" "isDEN" "_name" "_active" "_notifyType" "_recipientId" "_user" "_pricingPlan" "_isDEN"
filter[name]
string

"string" -- starts with

filter[active]
boolean

boolean value

filter[notifyType]
string

"string" -- exact match

Enum: "daily" "realtime" "weekly"
filter[recipientId]
string

"string" -- exact match

filter[user]
string

"string" -- exact match

filter[pricingPlan]
string

"string" -- exact match

filter[isDEN]
boolean

boolean value

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  page: 'string',
  limit: 'string',
  sort: 'name',
  'filter[name]': 'string',
  'filter[active]': 'true',
  'filter[notifyType]': 'daily',
  'filter[recipientId]': 'string',
  'filter[user]': 'string',
  'filter[pricingPlan]': 'string',
  'filter[isDEN]': 'true'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/notifications?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

createUserNotification

Create a new notification for users.

This endpoint allows administrators to send custom notifications to users, useful for announcements, reminders, or important updates.

Use Cases:

  • Send company announcements
  • Create custom reminders
  • Alert users about important events

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{
  • "notification": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getUserNotificationDetails

Retrieve detailed information about a specific notification.

This endpoint returns complete notification details including content, status, and delivery information.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
notificationId
required
string

Unique identifier of the notification

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const notificationId = 'YOUR_notificationId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/notifications/${notificationId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

updateUserNotification

Update notification settings or mark as read.

This endpoint allows modification of notification properties, such as marking notifications as read or updating notification preferences.

Common Updates:

  • Mark notification as read/unread
  • Update notification settings
  • Modify notification preferences

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
notificationId
required
string

Unique identifier of the notification

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{
  • "notification": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

subscribeUserNotification

Subscribe to a specific notification type or channel.

This endpoint enables notifications for a specific type, allowing users to opt-in to receive certain notifications via email, push, or in-app channels.

Subscription Channels:

  • Email notifications
  • Push notifications
  • In-app notifications

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
notificationId
required
string

Unique identifier of the notification

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
recipientIds
required
Array of strings

Array of user IDs who will receive the notification

Responses

Request samples

Content type
application/json
{
  • "recipientIds": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

unsubscribeUserNotification

Unsubscribe from a specific notification type or channel.

This endpoint disables notifications for a specific type, allowing users to opt-out of receiving certain notifications.

Use Cases:

  • Disable email notifications
  • Turn off push notifications
  • Opt-out of specific notification types

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
notificationId
required
string

Unique identifier of the notification

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
recipientIds
required
Array of strings

Array of user IDs who will receive the notification

Responses

Request samples

Content type
application/json
{
  • "recipientIds": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Breaks

Paid/Unpaid Breaks

getBreaks

Retrieve list of break time records for users.

This endpoint returns break periods taken by users during work sessions, including lunch breaks, rest periods, and other time away from work.

Break Types:

  • Scheduled breaks (lunch, rest periods)
  • Unscheduled breaks
  • Paid and unpaid breaks

Use Cases:

  • Track break compliance
  • Calculate paid vs unpaid time
  • Monitor break patterns
  • Generate break reports

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "name" "type" "breakLimit" "keywords" "_name" "_type" "_breakLimit" "_keywords"
filter[name]
string

"string" -- starts with

filter[type]
string

"string" -- starts with

filter[breakLimit]
string

"number" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[keywords]
string

set of keywords to be matched

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "keyphrase" "_keyphrase"
filter[keyphrase]
string

A keyphrase for searching by keywords

assigned
boolean

When true, returns only break types that are assigned to or accessible by the authenticated user

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  page: ['string', 'string'],
  limit: ['string', 'string'],
  sort: ['name', 'keyphrase'],
  'filter[name]': 'string',
  'filter[type]': 'string',
  'filter[breakLimit]': 'string',
  'filter[keywords]': 'string',
  'filter[keyphrase]': 'string',
  assigned: 'true'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/breaks?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

createBreak

Create a new break time record.

This endpoint records a break period for a user, specifying start time, duration, and break type (paid/unpaid).

Break Recording:

  • Manual break entry
  • Automatic break detection
  • Break type classification

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
name
required
string

Display name of the break type

type
required
string

Break type: paid (counts toward work time) or unpaid (does not count toward work time)

Enum: "paid" "unpaid"
active
boolean

Whether this break type is currently active and available for use

public
boolean

When true, the break is accessible to all users without restrictions. When false, access is limited by the access field

access
Array of strings

Array of user IDs or tag IDs that have permission to use this break type. Only applies when public is false

scope
string

Access scope level: user (individual users), tag (groups/teams), or company (entire organization)

Enum: "user" "tag" "company"
breakLimit
integer [ 1 .. 240 ]

Maximum duration allowed for this break type in minutes. Must be between 1 and 240 minutes (4 hours)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "paid",
  • "active": true,
  • "public": true,
  • "access": [
    ],
  • "scope": "user",
  • "breakLimit": 1
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getBreakDetails

Retrieve detailed information about a specific break.

This endpoint returns complete break details including start time, duration, break type, and associated user information.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
breakId
required
string

Unique identifier of the break type

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const breakId = 'YOUR_breakId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/breaks/${breakId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

updateBreak

Update break time record details.

This endpoint allows modification of break information such as start time, duration, or break type classification.

Updatable Fields:

  • Break start and end times
  • Break duration
  • Break type (paid/unpaid)
  • Break notes or description

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
breakId
required
string

Unique identifier of the break type

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
name
required
string

Display name of the break type

type
required
string

Break type: paid (counts toward work time) or unpaid (does not count toward work time)

Enum: "paid" "unpaid"
active
boolean

Whether this break type is currently active and available for use

public
boolean

When true, the break is accessible to all users without restrictions. When false, access is limited by the access field

access
Array of strings

Array of user IDs or tag IDs that have permission to use this break type. Only applies when public is false

scope
string

Access scope level: user (individual users), tag (groups/teams), or company (entire organization)

Enum: "user" "tag" "company"
breakLimit
integer [ 1 .. 240 ]

Maximum duration allowed for this break type in minutes. Must be between 1 and 240 minutes (4 hours)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "paid",
  • "active": true,
  • "public": true,
  • "access": [
    ],
  • "scope": "user",
  • "breakLimit": 1
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

deleteBreak

Remove a break time record.

This endpoint deletes a break entry, typically used to correct errors or remove incorrectly recorded breaks.

Use Cases:

  • Correct break recording errors
  • Remove duplicate entries
  • Adjust time records

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
breakId
required
string

Unique identifier of the break type

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const breakId = 'YOUR_breakId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/breaks/${breakId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

IP Addresses

User IP addresses for Office/Remote classification

getIpAddresses

Retrieve list of allowed IP addresses for company access control.

This endpoint returns IP addresses that are whitelisted for accessing the company's TimeDoctor account, useful for implementing IP-based security restrictions.

IP Address Management:

  • Whitelist specific IP addresses
  • IP ranges for office networks
  • Security access control
  • Geo-location restrictions

Use Cases:

  • Restrict access to office IPs
  • Implement security policies
  • Compliance requirements

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "locationType" "_locationType"
filter[locationType]
string

"string" -- exact match

Enum: "Office" "Remote"
from
string <date-time>

Filter IP addresses modified after this date

to
string <date-time>

Filter IP addresses modified before this date

deleted
boolean

Include archived IP addresses in the response

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  page: 'string',
  limit: 'string',
  sort: 'locationType',
  'filter[locationType]': 'Office',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  deleted: 'true'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/ipaddresses?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

createIpAddress

Add a new IP address to the company whitelist.

This endpoint creates a new IP address record, allowing access from the specified IP address or range.

IP Configuration:

  • Single IP addresses
  • IP ranges (CIDR notation)
  • Description/label for identification
  • Enable/disable status

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
ipAddress
string

Single IP address for access restriction (e.g., 192.168.1.100) (Required when type is "single")

type
required
string

IP address configuration type: single IP, IP range, or CIDR notation for subnet

Enum: "single" "range" "cidr"
ipRangeStart
string

Starting IP address of the allowed range (e.g., 192.168.1.1) (Required when type is "range")

ipRangeEnd
string

Ending IP address of the allowed range (e.g., 192.168.1.254) (Required when type is "range")

ipCidr
string

IP address range in CIDR notation for subnet whitelisting (e.g., 192.168.1.0/24) (Required when type is "cidr")

locationType
required
string

Location type classification for this IP address (Office for on-site, Remote for external)

Enum: "Office" "Remote"
ipType
required
string

IP address type: Public (internet-routable) or Private (RFC 1918 internal)

Enum: "Public" "Private"

Responses

Request samples

Content type
application/json
{
  • "ipAddress": "string",
  • "type": "single",
  • "ipRangeStart": "string",
  • "ipRangeEnd": "string",
  • "ipCidr": "string",
  • "locationType": "Office",
  • "ipType": "Public"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getIpAddress

Retrieve details of a specific IP address record.

This endpoint returns complete information about a whitelisted IP address including its configuration, status, and metadata.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
ipAddressId
required
string

ID of IP address record

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const ipAddressId = 'YOUR_ipAddressId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/ipaddresses/${ipAddressId}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

updateIpAddress

Update an existing IP address record.

This endpoint modifies IP address configuration such as the IP range, description, or enable/disable status.

Updatable Fields:

  • IP address or range
  • Description/label
  • Enable/disable status
  • Access permissions

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
ipAddressId
required
string

ID of IP address record

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
ipAddress
string

Single IP address for access restriction (e.g., 192.168.1.100) (Required when type is "single")

type
string

IP address configuration type: single IP, IP range, or CIDR notation for subnet

Enum: "single" "range" "cidr"
ipRangeStart
string

Starting IP address of the allowed range (e.g., 192.168.1.1) (Required when type is "range")

ipRangeEnd
string

Ending IP address of the allowed range (e.g., 192.168.1.254) (Required when type is "range")

ipCidr
string

IP address range in CIDR notation for subnet whitelisting (e.g., 192.168.1.0/24) (Required when type is "cidr")

locationType
string

Location type classification for this IP address (Office for on-site, Remote for external)

Enum: "Office" "Remote"
ipType
string

IP address type: Public (internet-routable) or Private (RFC 1918 internal)

Enum: "Public" "Private"

Responses

Request samples

Content type
application/json
{
  • "ipAddress": "string",
  • "type": "single",
  • "ipRangeStart": "string",
  • "ipRangeEnd": "string",
  • "ipCidr": "string",
  • "locationType": "Office",
  • "ipType": "Public"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

deleteIpAddress

Remove an IP address from the company whitelist.

This endpoint archives an IP address record, preventing access from that IP. The record is archived rather than permanently deleted for audit purposes.

Use Cases:

  • Revoke access from specific IPs
  • Remove outdated IP ranges
  • Update security policies

Note: IP records are archived, not permanently deleted, for security audit trails.

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
ipAddressId
required
string

ID of IP address record

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const ipAddressId = 'YOUR_ipAddressId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/ipaddresses/${ipAddressId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": true
}

Pending Approvals

Silent user approvals

getPendingApprovals

Retrieve list of pending user approvals awaiting administrator action.

This endpoint returns users who have registered but are pending approval before they can access the system. Useful for managing user onboarding workflows.

Pending Approval States:

  • New user registrations
  • Invitation acceptances
  • Access requests

Use Cases:

  • User onboarding management
  • Access control workflows
  • Approval queue monitoring

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

blocked
string

Filter approvals by blocked status (true for blocked approvals, false for unblocked)

page
string

When specified, defines how many resulting first items to skip

limit
string

When specified, defines maximum number of resulting first items to be returned; or use API-specific hard limit by default

sort
string

Which field to sort by, prepend it with "_" for descending sorting

Enum: "name" "dateTimeAdded" "lastSeen" "_name" "_dateTimeAdded" "_lastSeen"
filter[name]
string

"string" -- starts with

filter[dateTimeAdded]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

filter[lastSeen]
string

"ISO_date" -- exact match; or "from_to" -- inclusive range; or "from_"; or "_to"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  blocked: 'string',
  page: 'string',
  limit: 'string',
  sort: 'name',
  'filter[name]': 'string',
  'filter[dateTimeAdded]': 'string',
  'filter[lastSeen]': 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/v1/pending-approvals?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

deletePendingApproval

Remove a pending approval request for a specific user.

This endpoint deletes a pending approval, effectively rejecting the user's access request or registration.

Use Cases:

  • Reject user registration
  • Cancel pending access request
  • Clean up stale approvals

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

ID of the user to delete

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/v1/pending-approvals/${userId}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

updatePendingApproval

Approve or update a pending user approval request.

This endpoint processes a pending approval, typically approving the user and granting them access to the system.

Approval Actions:

  • Approve user registration
  • Grant system access
  • Set initial user permissions
  • Configure user settings

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

ID of the user to delete

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
userId
string

Unique identifier of the user whose time entries require approval

approved
boolean

When true, the time entry has been approved by an authorized approver. Defaults to false

blocked
boolean

When true, the approval is blocked and cannot proceed until resolved. Defaults to false

Responses

Request samples

Content type
application/json
{
  • "userId": "string",
  • "approved": true,
  • "blocked": true
}

Response samples

Content type
application/json
{
  • "data": { }
}

bulkUpdatePendingApprovals

Bulk approve or update multiple pending user approvals.

This endpoint allows batch processing of pending approvals, useful for approving multiple users at once.

Bulk Operations:

  • Approve multiple users simultaneously
  • Apply consistent settings
  • Efficient onboarding for teams

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
Array ()
userId
string

Unique identifier of the user whose time entries require approval

approved
boolean

When true, the time entry has been approved by an authorized approver. Defaults to false

blocked
boolean

When true, the approval is blocked and cannot proceed until resolved. Defaults to false

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "data": { }
}

bulkDeletePendingApprovals

Bulk remove multiple pending approval requests.

This endpoint allows batch deletion of pending approvals, useful for rejecting multiple access requests at once.

Bulk Operations:

  • Reject multiple users simultaneously
  • Clean up stale approval requests
  • Efficient approval queue management

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
Array ()
string

Responses

Request samples

Content type
application/json
[
  • "string"
]

Response samples

Content type
application/json
{
  • "data": { }
}

SSO

loginOauth2

Exchange SSO provider token for TimeDoctor access token.

This endpoint completes the SSO login flow by exchanging the provider's authentication token for a TimeDoctor access token. This is typically called after the user has been authenticated by the SSO provider.

SSO Flow:

  1. User initiates SSO login via SSO Authorize
  2. User authenticates with SSO provider
  3. Provider redirects back with token
  4. This endpoint exchanges provider token for TD token

Supported Providers:

  • Google Workspace
  • Microsoft Azure AD
  • Okta
  • Other SAML/OAuth2 providers

Related Endpoints:

path Parameters
provider
required
string

SSO provider identifier for OAuth2 authentication (e.g., workos, google, microsoft)

query Parameters
token
string

OAuth2 authorization token received during the SSO authentication flow

Request Body schema: application/json
any

Responses

Request samples

Content type
application/json
null

Response samples

Content type
application/json
{
  • "data": {
    }
}

findMyCompany

Discover all companies associated with an email address via SSO.

This endpoint returns information about all companies that have SSO configured for the provided email address. This helps users identify which companies they can access via SSO login.

Use Cases:

  • User forgot which company they belong to
  • User has access to multiple companies via SSO
  • Determine available SSO login options
  • Company discovery during onboarding

Returns:

  • List of companies with SSO enabled for this email
  • Company names and identifiers
  • SSO provider information

Related Endpoints:

Request Body schema: application/json
email
required
string

User's email address for authentication or SSO lookup

Responses

Request samples

Content type
application/json
{
  • "email": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

oneTimeLogin

Request a one-time verification code sent to email.

This endpoint sends a one-time verification code to the user's email address. The code can be used to verify the user's identity and discover their SSO-enabled companies without requiring a password.

Verification Flow:

  1. User provides email address
  2. System sends verification code to email
  3. User receives code and submits it via Find Company with Code
  4. System returns list of SSO-enabled companies

Security:

  • Code expires after a short time period
  • Rate limiting prevents abuse
  • Only works for SSO-configured email domains

Related Endpoints:

Request Body schema: application/json
email
required
string

User's email address for authentication or SSO lookup

Responses

Request samples

Content type
application/json
{
  • "email": "string"
}

Response samples

Content type
application/json
{ }

findMyCompanyCode

Verify one-time code and discover SSO-enabled companies.

This endpoint validates the one-time verification code sent via email and returns information about all companies with SSO configured for that email address.

Verification Process:

  1. User requests code via One-Time Login
  2. User receives code in email
  3. User submits code to this endpoint
  4. System validates code and returns company list

Returns:

  • List of SSO-enabled companies for this email
  • Company details and SSO provider information
  • Available login options

Security:

  • Code is single-use
  • Code expires after short time period
  • Invalid codes return error

Related Endpoints:

path Parameters
code
required
string

One-time verification code sent to the user's email for authentication

Request Body schema: application/json
any

Responses

Request samples

Content type
application/json
null

Response samples

Content type
application/json
{
  • "data": {
    }
}

checkSsoOtp

Check if SSO OTP (One-Time Password) is enabled for any of the user's companies.

This endpoint helps determine whether additional OTP verification is required during the SSO login flow. If any of the user's companies have forceSsoOTP enabled, the response will indicate that OTP is required.

Request Body schema: application/json
email
required
string

User's email address to check SSO OTP requirement across associated companies

issuer
string

OAuth2 issuer domain to filter companies by specific SSO provider

Responses

Request samples

Content type
application/json
{
  • "email": "string",
  • "issuer": "string"
}

Response samples

Content type
application/json
{
  • "SSO_OTP": true
}

ssoAuthorize

Initiate SSO authorization flow by redirecting to the provider's authorization URL.

This endpoint constructs the appropriate authorization URL for the specified SSO provider and redirects the user to complete the authentication process. After successful authentication, the provider will redirect back to the specified redirect_uri.

This is typically the first step in the SSO login flow.

path Parameters
provider
required
string

OAuth2 SSO provider identifier (e.g., workos) for authorization flow initiation

query Parameters
client_id
required
string

OAuth2 client ID registered with the SSO provider for this application

redirect_uri
required
string

OAuth2 redirect URI where the user will be sent after successful SSO authorization

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  client_id: 'string',
  redirect_uri: 'string'
}).toString();

const provider = 'YOUR_provider_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/sso/${provider}/authorize?${query}`,
  {method: 'GET'}
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

Payroll

getUsersPayroll

Retrieve payroll information for multiple users.

This endpoint returns payroll details including pay rates, payment methods, and billing configurations for users in the company.

Payroll Information:

  • Hourly/salary rates
  • Payment methods
  • Billing rates for clients
  • Currency settings

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date>

ISO 8601 date for the start of the payroll period (YYYY-MM-DD)

to
string <date>

ISO 8601 date for the end of the payroll period (YYYY-MM-DD)

tag
string

Comma-separated tag IDs to filter time entries for payroll calculations

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24',
  to: '2019-08-24',
  tag: 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users/payroll?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [ ],
  • "paging": {
    }
}

putUserPayroll

Update payroll information for a specific user.

This endpoint modifies payroll details such as pay rate, billing rate, and payment method for an individual user.

Updatable Fields:

  • Pay rate (hourly/salary)
  • Billing rate for clients
  • Payment method
  • Currency

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of the user to retrieve payroll data for

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
id
required
string

Unique identifier of the user for payroll configuration

currency
string

ISO 4217 currency code for payroll calculations (e.g., USD, EUR, GBP)

adjustment
number

Absolute adjustment value applied to the payroll total in the specified currency

payRate
number

Hourly pay rate multiplier for calculating total compensation

payMethod
string

Payment method identifier (e.g., transferwise, paypal) if enabled in company settings

payIdentifier
number

Total tracked time in seconds for payroll calculations

hourlyLimit
number

Maximum billable hours limit per time period

hourlyLimitRange
string

Time range for hourly limit enforcement (weekday, period, or perday)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "currency": "string",
  • "adjustment": 0,
  • "payRate": 0,
  • "payMethod": "string",
  • "payIdentifier": 0,
  • "hourlyLimit": 0,
  • "hourlyLimitRange": "string"
}

Response samples

Content type
application/json
{
  • "data": { }
}

deletePayroll

Remove payroll information for a specific user.

This endpoint clears all payroll details for a user, resetting them to company defaults or removing custom payroll configuration.

Use Cases:

  • Reset to company defaults
  • Remove custom payroll settings
  • Clean up user data

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
userId
required
string

Unique identifier of the user to retrieve payroll data for

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const userId = 'YOUR_userId_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/users/${userId}/payroll?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": { }
}

putUsersPayrollBulk

Bulk update payroll information for multiple users.

This endpoint allows batch modification of payroll details for multiple users in a single request, useful for company-wide payroll updates.

Bulk Operations:

  • Update multiple users at once
  • Apply consistent pay rates
  • Set billing rates in bulk
  • Efficient for large teams

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
id
required
string

Unique identifier of the user for payroll configuration

currency
string

ISO 4217 currency code for payroll calculations (e.g., USD, EUR, GBP)

adjustment
number

Absolute adjustment value applied to the payroll total in the specified currency

payRate
number

Hourly pay rate multiplier for calculating total compensation

payMethod
string

Payment method identifier (e.g., transferwise, paypal) if enabled in company settings

payIdentifier
number

Total tracked time in seconds for payroll calculations

hourlyLimit
number

Maximum billable hours limit per time period

hourlyLimitRange
string

Time range for hourly limit enforcement (weekday, period, or perday)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "currency": "string",
  • "adjustment": 0,
  • "payRate": 0,
  • "payMethod": "string",
  • "payIdentifier": 0,
  • "hourlyLimit": 0,
  • "hourlyLimitRange": "string"
}

Response samples

Content type
application/json
{
  • "data": { }
}

getCompanyPayrollSettings

Retrieve company-wide payroll settings and defaults.

This endpoint returns default payroll configuration that applies to all users unless overridden by individual user settings.

Company Settings:

  • Default pay rates
  • Default billing rates
  • Currency preferences
  • Payment method defaults

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.0/companies/payroll?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [ ],
  • "paging": {
    }
}

putCompanyPayrollSettings

Update company-wide payroll settings and defaults.

This endpoint modifies default payroll configuration that will apply to new users and can serve as fallback for users without custom settings.

Configurable Defaults:

  • Default pay rates
  • Default billing rates
  • Currency settings
  • Payment methods

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
transferWise
required
boolean

When true, enables TransferWise (Wise) integration for international payroll transfers

transferWiseCurrency
required
string

ISO 4217 source currency code for TransferWise payroll transfers

payoneer
required
boolean

When true, enables Payoneer integration for global payroll processing

paypal
required
boolean

When true, enables PayPal Mass Payouts integration for batch payroll payments

bitWage
required
boolean

When true, enables BitWAGE integration for cryptocurrency payroll payments

quickBooks
boolean

When true, enables QuickBooks integration for payroll export and accounting sync

gusto
required
boolean

When true, enables Gusto integration for automated payroll processing

adp
required
boolean

When true, enables ADP Workforce Now integration for enterprise payroll processing

adpCompanyCode
required
string

Company code identifier for ADP Workforce Now integration

adpMaxHours
number

Maximum billable hours per period for ADP payroll export

adpIncludeUserNames
required
boolean

When true, includes employee names in ADP payroll export files

Responses

Request samples

Content type
application/json
{
  • "transferWise": true,
  • "transferWiseCurrency": "string",
  • "payoneer": true,
  • "paypal": true,
  • "bitWage": true,
  • "quickBooks": true,
  • "gusto": true,
  • "adp": true,
  • "adpCompanyCode": "string",
  • "adpMaxHours": 0,
  • "adpIncludeUserNames": true
}

Response samples

Content type
application/json
{
  • "data": { }
}

Calendar

getCalendarAuthUrl

Generate Google Calendar OAuth2 authorization URL for user consent.

This endpoint returns the URL where users should be redirected to grant TimeDoctor access to their Google Calendar. This is the first step in the OAuth2 flow.

OAuth2 Flow:

  1. Get authorization URL (this endpoint)
  2. Redirect user to Google consent screen
  3. Handle callback with authorization code
  4. Exchange code for access token

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar/auth-url?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

startCalendarWatch

Start Google Calendar webhook notifications for real-time event updates.

This endpoint sets up a watch channel that receives notifications when calendar events change, enabling real-time synchronization without constant polling.

Webhook Setup:

  • Requires public HTTPS callback URL
  • Receives notifications for event changes
  • Automatic renewal before expiration

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
callbackUrl
required
string

Public HTTPS webhook URL

Responses

Request samples

Content type
application/json
{
  • "callbackUrl": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

stopCalendarWatch

Stop Google Calendar webhook notifications.

This endpoint terminates the active watch channel, stopping real-time event notifications from Google Calendar.

Use Cases:

  • Disable calendar integration
  • Change webhook configuration
  • Troubleshoot notification issues

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar/watch/stop?${query}`,
  {
    method: 'POST',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

calendarPublicWebhookReceiver

Public webhook endpoint for receiving Google Calendar notifications.

This unauthenticated endpoint receives push notifications from Google when calendar events change. It responds quickly (2xx) and processes events asynchronously.

Important:

  • Public endpoint (no authentication required)
  • Must be HTTPS with valid certificate
  • Responds immediately to prevent timeouts
  • Processes notifications asynchronously

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)

Responses

Request samples

const fetch = require('node-fetch');

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar-public/webhook`,
  {
    method: 'POST',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

calendarHandleCallback

Handle OAuth2 callback from Google after user authorization.

This endpoint receives the authorization code from Google after the user grants calendar access, then exchanges it for access and refresh tokens.

OAuth2 Flow:

  1. User authorizes on Google consent screen
  2. Google redirects to this callback URL
  3. Exchange authorization code for tokens
  4. Store tokens for calendar access

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

code
required
string

Authorization code

state
string
scope
string

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  code: 'string',
  state: 'string',
  scope: 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar/callback?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

getCalendarEvents

Fetch calendar events directly from Google Calendar API.

This endpoint retrieves events in real-time from Google Calendar, bypassing local storage for the most up-to-date information.

Live Fetch:

  • Direct Google Calendar API call
  • Most current event data
  • Requires valid OAuth token

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 start date/time for filtering events (inclusive)

to
string <date-time>

ISO 8601 end date/time for filtering events (exclusive)

limit
integer <int32>

Maximum number of events to return. Defaults to 250

orderBy
string

Field to order results by. Defaults to startTime

Value: "startTime"
singleEvents
string

When false, recurring events are not expanded into individual instances. Defaults to true

Enum: "true" "false"

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  limit: '0',
  orderBy: 'startTime',
  singleEvents: 'true'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar/events?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

deleteCalendarEvents

Delete stored calendar events from local database.

This endpoint removes calendar events from local storage, either by specific event ID or all events before a certain date.

Deletion Options:

  • Delete specific event by ID
  • Delete all events before date
  • Clean up old event data

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

eventId
string

Unique identifier of a single event to delete from Google Calendar

before
string <date-time>

ISO 8601 timestamp. When specified, deletes all events that start before this date/time

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  eventId: 'string',
  before: '2019-08-24T14:15:22Z'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar/events?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

getStoredCalendarEvents

Retrieve calendar events from local database storage.

This endpoint returns previously synchronized calendar events from the local database, providing faster access without calling Google Calendar API.

Local Storage:

  • Faster response than live fetch
  • No Google API quota usage
  • May not reflect latest changes

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

from
string <date-time>

ISO 8601 start date/time for filtering events (inclusive)

to
string <date-time>

ISO 8601 end date/time for filtering events (exclusive)

limit
integer <int32>

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  limit: '0'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar/stored-events?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

syncCalendarEvents

Manually trigger calendar event synchronization and return updated events.

This endpoint fetches latest events from Google Calendar and updates local storage, then returns the synchronized events.

Synchronization:

  • Fetches events from Google Calendar
  • Updates local database
  • Returns synchronized events
  • Useful for on-demand updates

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
from
string <date-time>

ISO 8601 start date/time for syncing events (inclusive)

to
string <date-time>

ISO 8601 end date/time for syncing events (exclusive)

limit
integer <int32>

Maximum number of events to sync

force
boolean

When true, forces a full resync even if events were recently synced

Responses

Request samples

Content type
application/json
{
  • "from": "2019-08-24T14:15:22Z",
  • "to": "2019-08-24T14:15:22Z",
  • "limit": 0,
  • "force": true
}

Response samples

Content type
application/json
{
  • "data": [
    ]
}

refreshCalendarToken

Refresh expired OAuth2 access token using refresh token.

This endpoint renews the Google Calendar access token when it expires, using the stored refresh token to obtain a new access token.

Token Refresh:

  • Automatic when access token expires
  • Uses stored refresh token
  • No user interaction required

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar/refresh-token?${query}`,
  {
    method: 'POST',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

getCalendarTokenStatus

Check Google Calendar OAuth2 token status and connection health.

This endpoint returns information about the current OAuth2 token, including whether it's valid, expired, or if re-authorization is needed.

Status Information:

  • Token validity
  • Expiration time
  • Connection status
  • Granted scopes

Related Endpoints:

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/calendar/token-status?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

Software Cost Insights

getSoftwareCostInsights

Get list of software cost insights

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Filter by single user ID or comma-separated list of user IDs

tag
string

Filter by single tag ID or comma-separated list of tag IDs

type
string

Filter by software cost insight type classification

toolName
string

Filter by exact software tool name

toolCategory
string

Filter by software tool category classification

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  tag: 'string',
  type: 'string',
  toolName: 'string',
  toolCategory: 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/software-cost-insights?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

createSoftwareCostInsight

Create a new software cost insight

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
toolName
required
string

Name of the software tool or application

toolCategory
string

Category classification of the software tool

toolCategoryId
string

Unique identifier of the tool category

user
required
string

Unique identifier of the user for this insight

totalWorkHours
number

Total work hours tracked in decimal format

totalToolHours
number

Total tool usage hours in decimal format

activeStatus
integer

Active usage status indicator

type
string

Type classification of the insight record

Responses

Request samples

Content type
application/json
{
  • "toolName": "string",
  • "toolCategory": "string",
  • "toolCategoryId": "string",
  • "user": "string",
  • "totalWorkHours": 0,
  • "totalToolHours": 0,
  • "activeStatus": 0,
  • "type": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

getSoftwareCostInsight

Get a specific software cost insight by ID

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
id
required
string

Unique identifier of the software cost insight record

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const id = 'YOUR_id_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/software-cost-insights/${id}?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": {
    }
}

modifySoftwareCostInsight

Update a software cost insight

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
id
required
string

Unique identifier of the software cost insight record

query Parameters
company
required
string

ID of Company, user refers to.

Request Body schema: application/json
toolName
string

Name of the software tool or application

toolCategory
string

Category classification of the software tool

toolCategoryId
string

Unique identifier of the tool category

totalWorkHours
number

Total work hours tracked in decimal format

totalToolHours
number

Total tool usage hours in decimal format

activeStatus
integer

Active usage status indicator

type
string

Type classification of the insight record

Responses

Request samples

Content type
application/json
{
  • "toolName": "string",
  • "toolCategory": "string",
  • "toolCategoryId": "string",
  • "totalWorkHours": 0,
  • "totalToolHours": 0,
  • "activeStatus": 0,
  • "type": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

removeSoftwareCostInsight

Delete a software cost insight

Authorizations:
ApiKeyAuth (apiKey)
path Parameters
id
required
string

Unique identifier of the software cost insight record

query Parameters
company
required
string

ID of Company, user refers to.

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({company: 'string'}).toString();

const id = 'YOUR_id_PARAMETER';
const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/software-cost-insights/${id}?${query}`,
  {
    method: 'DELETE',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{ }

getSoftwareCostInsightsCategory

Get software cost insights aggregated by category

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Filter by single user ID or comma-separated list of user IDs

tag
string

Filter by single tag ID or comma-separated list of tag IDs

start
string <date-time>

ISO 8601 timestamp for the start of the reporting period (inclusive)

end
string <date-time>

ISO 8601 timestamp for the end of the reporting period (inclusive)

timezone
string

IANA timezone identifier for date calculations (e.g., America/New_York, Europe/London)

user-tz
integer

User timezone mode: 0=no timezone adjustment, 1=external timezone, 2=internal timezone

Enum: 0 1 2
use-local-time
integer

When 1, use local time for calculations; when 0, use UTC time

Enum: 0 1
params
string

Additional query parameters for advanced filtering and aggregation

summary
string

Summary aggregation type for grouping statistics (e.g., daily, weekly, monthly)

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  tag: 'string',
  start: '2019-08-24T14:15:22Z',
  end: '2019-08-24T14:15:22Z',
  timezone: 'string',
  'user-tz': '0',
  'use-local-time': '0',
  params: 'string',
  summary: 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/software-cost-insights/category?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

getSoftwareCostInsightsSummary

Get summary statistics for software cost insights

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Filter by single user ID or comma-separated list of user IDs

tag
string

Filter by single tag ID or comma-separated list of tag IDs

start
string <date-time>

ISO 8601 timestamp for the start of the reporting period (inclusive)

end
string <date-time>

ISO 8601 timestamp for the end of the reporting period (inclusive)

timezone
string

IANA timezone identifier for date calculations (e.g., America/New_York, Europe/London)

user-tz
integer

User timezone mode: 0=no timezone adjustment, 1=external timezone, 2=internal timezone

Enum: 0 1 2
use-local-time
integer

When 1, use local time for calculations; when 0, use UTC time

Enum: 0 1
params
string

Additional query parameters for advanced filtering and aggregation

summary
string

Summary aggregation type for grouping statistics (e.g., daily, weekly, monthly)

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  tag: 'string',
  start: '2019-08-24T14:15:22Z',
  end: '2019-08-24T14:15:22Z',
  timezone: 'string',
  'user-tz': '0',
  'use-local-time': '0',
  params: 'string',
  summary: 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/software-cost-insights/summary?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}

getSoftwareCostInsightsTimesheetSummary

Get software cost insights summary with timesheet breakdown

Authorizations:
ApiKeyAuth (apiKey)
query Parameters
company
required
string

ID of Company, user refers to.

user
string

Filter by single user ID or comma-separated list of user IDs

tag
string

Filter by single tag ID or comma-separated list of tag IDs

start
string <date-time>

ISO 8601 timestamp for the start of the reporting period (inclusive)

end
string <date-time>

ISO 8601 timestamp for the end of the reporting period (inclusive)

timezone
string

IANA timezone identifier for date calculations (e.g., America/New_York, Europe/London)

user-tz
integer

User timezone mode: 0=no timezone adjustment, 1=external timezone, 2=internal timezone

Enum: 0 1 2
use-local-time
integer

When 1, use local time for calculations; when 0, use UTC time

Enum: 0 1
params
string

Additional query parameters for advanced filtering and aggregation

summary
string

Summary aggregation type for grouping statistics (e.g., daily, weekly, monthly)

Responses

Request samples

const fetch = require('node-fetch');

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  tag: 'string',
  start: '2019-08-24T14:15:22Z',
  end: '2019-08-24T14:15:22Z',
  timezone: 'string',
  'user-tz': '0',
  'use-local-time': '0',
  params: 'string',
  summary: 'string'
}).toString();

const resp = await fetch(
  `https://api2.timedoctor.com/api/1.1/software-cost-insights/timesheet/summary?${query}`,
  {
    method: 'GET',
    headers: {
      Authorization: 'YOUR_API_KEY_HERE'
    }
  }
);

const data = await resp.text();
console.log(data);

Response samples

Content type
application/json
{
  • "data": [
    ]
}