Time Doctor API (1.0.0)

Download OpenAPI specification:Download

For access to this API and assistance using it, please contact us at support2@timedoctor.com

Authentication

ApiKeyAuth

Security Scheme Type API Key
Query parameter name: token

Auth

login, register, authorization

login

Login and get access token

Authorizations:
Request Body schema: application/json
email
required
string

An email, which was used for registration

password
required
string

A password, specified on registration

totpCode
string

TOTP code for 2FA (if enabled)

permissions
string
Default: "write"

API permissions. There are two states: "read" or "write" allows the bearer of the token to perform actions that can change state (POST, PUT, PATCH, DELETE).

Responses

Request samples

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

Response samples

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

register

Register account

Authorizations:
Request Body schema: application/json
name
required
string

User full name

email
required
string

User email to register

timezone
string

User timezone self setting

password
required
string

Desired password, must meet password policy (at least 6 characters)

twoFactorAuth
boolean
Default: false

Enable 2FA

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

Register account

Authorizations:
Request Body schema: application/json
name
required
string

User full name

email
required
string

User email to register

timezone
string

If specified, specifies which time zone company works on. Etc/UTC by default

password
required
string

Desired password, must meet password policy (at least 6 characters)

referrer
string

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

company
string

If specified, is a name for newly created company, default: "Someone's company"

trackingMode
required
string
Enum: "mixed" "interactive" "silent"

Tracking mode of company

pricingPlan
required
string
Enum: "10peruserpermonth" "basic" "standard_new" "premium" "business" "enterprise" "basic_july20" "standard_july20" "premium_july20" "resellers" "business_annual" "enterprise_annual" "basic_annual" "standard_new_annual" "premium_annual"

Pricing plan of company

Array of objects

If specified, specifies array of objects, describing current split-test

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "timezone": "string",
  • "password": "string",
  • "referrer": "string",
  • "company": "string",
  • "trackingMode": "mixed",
  • "pricingPlan": "10peruserpermonth",
  • "splitTest": [
    ]
}

Response samples

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

profile

Modify profile data

Authorizations:
Request Body schema: application/json
name
required
string

User full name

email
required
string

User email to register

timezone
string

User timezone self setting

password
required
string

Desired password, must meet password policy (at least 6 characters)

twoFactorAuth
boolean
Default: false

Enable 2FA

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": { }
}

authorization

Get list of available positions in companies or workspaces of a company

Authorizations:
query Parameters
company
string

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

task-project-names
string
Enum: "true" "false"

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

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

If specified, companies contain directly tracking companies/workspaces

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

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

Responses

Request samples

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

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

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

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

Response samples

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

authorizationLogin

Login, get access token and get authorization

Authorizations:
Request Body schema: application/json
email
required
string

An email, which was used for registration

password
required
string

A password, specified on registration

totpCode
string

TOTP code for 2FA (if enabled)

permissions
string
Default: "write"

API permissions. There are two states: "read" or "write" allows the bearer of the token to perform actions that can change state (POST, PUT, PATCH, DELETE).

Responses

Request samples

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

Response samples

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

logout

Logout and invalidate access token

Authorizations:

Responses

Request samples

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

const query = new URLSearchParams({
  token: 'YOUR_API_KEY_HERE'
}).toString();

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/logout?' + query,
  {method: 'GET'}
);

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

Response samples

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

Companies

companies

companies

Get list of own administered companies or workspaces in a company

Authorizations:
query Parameters
no-workspaces
string
Enum: "true" "false"

If specified, result will contain directly tracking companies/workspaces

Responses

Request samples

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

const query = new URLSearchParams({
  'no-workspaces': 'true',
  token: 'YOUR_API_KEY_HERE'
}).toString();

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/companies?' + query,
  {method: 'GET'}
);

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

Response samples

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

addCompany

Add a company or a workspace

Authorizations:
query Parameters
company
string

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

Request Body schema: application/json
noWorkspaces
boolean
name
required
string

Name of the company/workspace

description
string

Optional description of company/workspace

creator
string

ID of User who created

timezone
string

Name of timezone, it works by (default: "Etc/UTC")

parentId
string

If omitted, a new company will be created. If specified, a workspace will be created inside this specified company ID

pricingPlan
string
Enum: "10peruserpermonth" "basic" "standard_new" "premium" "business" "enterprise" "basic_july20" "standard_july20" "premium_july20" "resellers" "business_annual" "enterprise_annual" "basic_annual" "standard_new_annual" "premium_annual"

Pricing plan of company

newOwnerId
string

New company owner

Responses

Request samples

Content type
application/json
{
  • "noWorkspaces": true,
  • "name": "string",
  • "description": "string",
  • "creator": "string",
  • "timezone": "string",
  • "parentId": "string",
  • "pricingPlan": "10peruserpermonth",
  • "newOwnerId": "string"
}

Response samples

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

company

Get company by ID

Authorizations:
path Parameters
companyId
required
string

ID of Company or Workspace

Responses

Request samples

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

const query = new URLSearchParams({
  token: 'YOUR_API_KEY_HERE'
}).toString();

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/companies/:companyId?' + query,
  {method: 'GET'}
);

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

Response samples

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

putCompany

Modify details of a company

Authorizations:
path Parameters
companyId
required
string

ID of Company or Workspace

Request Body schema: application/json
noWorkspaces
boolean
name
required
string

Name of the company/workspace

description
string

Optional description of company/workspace

creator
string

ID of User who created

timezone
string

Name of timezone, it works by (default: "Etc/UTC")

parentId
string

If omitted, a new company will be created. If specified, a workspace will be created inside this specified company ID

pricingPlan
string
Enum: "10peruserpermonth" "basic" "standard_new" "premium" "business" "enterprise" "basic_july20" "standard_july20" "premium_july20" "resellers" "business_annual" "enterprise_annual" "basic_annual" "standard_new_annual" "premium_annual"

Pricing plan of company

newOwnerId
string

New company owner

Responses

Request samples

Content type
application/json
{
  • "noWorkspaces": true,
  • "name": "string",
  • "description": "string",
  • "creator": "string",
  • "timezone": "string",
  • "parentId": "string",
  • "pricingPlan": "10peruserpermonth",
  • "newOwnerId": "string"
}

Response samples

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

deleteCompany

Delete a company

Authorizations:
path Parameters
companyId
required
string

ID of Company or Workspace

Responses

Request samples

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

const query = new URLSearchParams({
  token: 'YOUR_API_KEY_HERE'
}).toString();

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/companies/:companyId?' + query,
  {method: 'DELETE'}
);

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

Response samples

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

putCompanySub

Modify subscription details of a company

Authorizations:
path Parameters
companyId
required
string

ID of Company or Workspace

Request Body schema: application/json
expires
string <date-time>

Expiration date

forceUserCount
integer

Always send this nonzero user count to accounting

userDiscount
integer

Send actual number of users minus this value to accounting

minBillableUsers
integer

If nonzero, will force this number of users if less than this

Responses

Request samples

Content type
application/json
{
  • "expires": "2019-08-24T14:15:22Z",
  • "forceUserCount": 0,
  • "userDiscount": 0,
  • "minBillableUsers": 0
}

Response samples

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

getCompanyTimezone

Get all the timezones for all company users

Authorizations:
path Parameters
companyId
required
string

ID of Company or Workspace

Responses

Request samples

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

const query = new URLSearchParams({
  token: 'YOUR_API_KEY_HERE'
}).toString();

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

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

Response samples

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

Users

users, invitations

getManagedUsers

Get list of own administered companies

Authorizations:
path Parameters
userId
required
string

ID of User (me or empty means caller)

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

self
string
Enum: "true" "false"

If specified, returns user data of userId in self reply field

detail
string
Enum: "id" "name" "info" "alias" "tags" "settings" "managers"

Level of detail in reply

task-project-names
string
Enum: "true" "false"

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

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

Return only users without tags

page
string

if specified, page ID to get results for; or first page by default

limit
string

if specified, maximum number of items to be returned; or use API-specific hard limit by default

sort
string
Enum: "id" "email" "name" "tag" "keywords" "role" "show-on-reports" "payroll-access" "screenshots" "videos" "created" "host-name" "os" "hired-at" "last-track" "last-active-track" "client-version" "ip" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_show-on-reports" "_payroll-access" "_screenshots" "_videos" "_created" "_host-name" "_os" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_ip"

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

filter[id]
Array of strings

"string" -- exact match

filter[email]
Array of strings

"string" -- starts with

filter[name]
Array of strings

"string" -- starts with

filter[tag]
Array of strings

"string" -- exact match

filter[keywords]
Array of strings

unknown API-defined value

filter[role]
Array of strings

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

filter[show-on-reports]
Array of strings

unknown API-defined value

filter[payroll-access]
Array of strings

unknown API-defined value

filter[screenshots]
Array of strings

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

filter[videos]
Array of strings

"string" -- exact match

filter[created]
Array of strings

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

filter[host-name]
Array of strings

"string" -- starts with

filter[os]
Array of strings

"string" -- exact match

filter[hired-at]
Array of strings

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

filter[last-track]
Array of strings

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

filter[last-active-track]
Array of strings

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

filter[client-version]
Array of strings

"string" -- exact match

filter[ip]
Array of strings

"string" -- starts with

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',
  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[show-on-reports]': 'string',
  'filter[payroll-access]': 'string',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[host-name]': 'string',
  'filter[os]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[ip]': 'string',
  token: 'YOUR_API_KEY_HERE'
}).toString();

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

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

Response samples

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

getUsers

Get/resolve list of users

Authorizations:
query Parameters
company
string

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

user
string

If specified, a comma-separated list of user IDs to resolve with same array indexes in reply as indexes in list (alias of this param is id)

manager
string

If specified, a user ID of a manager, the only managed users of whom to return

tag
string

If specified, an ID of a tag, the only members of which to return

self
string
Enum: "true" "false"

If specified, returns user data of userId in self reply field

detail
string
Enum: "id" "name" "info" "alias" "tags" "settings" "managers"

Level of detail in reply

task-project-names
string
Enum: "true" "false"

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

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

Return only users without tags

deleted
string
Enum: "true" "false"

Operate on active or disabled (deleted) user

page
string

if specified, page ID to get results for; or first page by default

limit
string

if specified, maximum number of items to be returned; or use API-specific hard limit by default

sort
string
Enum: "id" "email" "name" "tag" "keywords" "role" "show-on-reports" "payroll-access" "screenshots" "videos" "created" "host-name" "os" "hired-at" "last-track" "last-active-track" "client-version" "ip" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_show-on-reports" "_payroll-access" "_screenshots" "_videos" "_created" "_host-name" "_os" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_ip"

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

filter[id]
Array of strings

"string" -- exact match

filter[email]
Array of strings

"string" -- starts with

filter[name]
Array of strings

"string" -- starts with

filter[tag]
Array of strings

"string" -- exact match

filter[keywords]
Array of strings

unknown API-defined value

filter[role]
Array of strings

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

filter[show-on-reports]
Array of strings

unknown API-defined value

filter[payroll-access]
Array of strings

unknown API-defined value

filter[screenshots]
Array of strings

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

filter[videos]
Array of strings

"string" -- exact match

filter[created]
Array of strings

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

filter[host-name]
Array of strings

"string" -- starts with

filter[os]
Array of strings

"string" -- exact match

filter[hired-at]
Array of strings

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

filter[last-track]
Array of strings

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

filter[last-active-track]
Array of strings

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

filter[client-version]
Array of strings

"string" -- exact match

filter[ip]
Array of strings

"string" -- starts with

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',
  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[show-on-reports]': 'string',
  'filter[payroll-access]': 'string',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[host-name]': 'string',
  'filter[os]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[ip]': 'string',
  token: 'YOUR_API_KEY_HERE'
}).toString();

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

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

Response samples

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

getUser

Get user by ID

Authorizations:
path Parameters
userId
required
string

ID of User (me or empty means caller)

query Parameters
company
string

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

detail
string
Enum: "id" "name" "info" "alias" "tags" "settings" "managers"

Level of detail in reply

task-project-names
string
Enum: "true" "false"

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

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

Return only users without tags

deleted
string
Enum: "true" "false"

Operate on active or disabled (deleted) user

page
string

if specified, page ID to get results for; or first page by default

limit
string

if specified, maximum number of items to be returned; or use API-specific hard limit by default

sort
string
Enum: "id" "email" "name" "tag" "keywords" "role" "show-on-reports" "payroll-access" "screenshots" "videos" "created" "host-name" "os" "hired-at" "last-track" "last-active-track" "client-version" "ip" "_id" "_email" "_name" "_tag" "_keywords" "_role" "_show-on-reports" "_payroll-access" "_screenshots" "_videos" "_created" "_host-name" "_os" "_hired-at" "_last-track" "_last-active-track" "_client-version" "_ip"

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

filter[id]
Array of strings

"string" -- exact match

filter[email]
Array of strings

"string" -- starts with

filter[name]
Array of strings

"string" -- starts with

filter[tag]
Array of strings

"string" -- exact match

filter[keywords]
Array of strings

unknown API-defined value

filter[role]
Array of strings

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

filter[show-on-reports]
Array of strings

unknown API-defined value

filter[payroll-access]
Array of strings

unknown API-defined value

filter[screenshots]
Array of strings

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

filter[videos]
Array of strings

"string" -- exact match

filter[created]
Array of strings

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

filter[host-name]
Array of strings

"string" -- starts with

filter[os]
Array of strings

"string" -- exact match

filter[hired-at]
Array of strings

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

filter[last-track]
Array of strings

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

filter[last-active-track]
Array of strings

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

filter[client-version]
Array of strings

"string" -- exact match

filter[ip]
Array of strings

"string" -- starts with

Responses

Request samples

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

const query = new URLSearchParams({
  company: 'string',
  detail: 'id',
  'task-project-names': 'true',
  'no-tag': 'true',
  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[show-on-reports]': 'string',
  'filter[payroll-access]': 'string',
  'filter[screenshots]': 'string',
  'filter[videos]': 'string',
  'filter[created]': 'string',
  'filter[host-name]': 'string',
  'filter[os]': 'string',
  'filter[hired-at]': 'string',
  'filter[last-track]': 'string',
  'filter[last-active-track]': 'string',
  'filter[client-version]': 'string',
  'filter[ip]': 'string',
  token: 'YOUR_API_KEY_HERE'
}).toString();

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/users/:userId?' + query,
  {method: 'GET'}
);

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

Response samples

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

putUser

Modify user data in company

Authorizations:
path Parameters
userId
required
string

ID of User (me or empty means caller)

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

Operate on active or disabled (deleted) user

Request Body schema: application/json
name
string

User's name

role
string
Enum: "tag" "superAdmin" "owner" "admin" "guest" "manager" "user"

User role in company

onlyProjectIds
Array of strings

If specified, will replace project access, use empty array to allow all access

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

allowEditTime
boolean

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.

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

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.

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

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
Enum: "off" "basic" "extended" "custom"

Set tracking type (extended by default)

hasDismissedBanner
boolean

Determine if to show a manager the banner to learn how the reports work. Defaults to false

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "role": "tag",
  • "onlyProjectIds": [
    ],
  • "employeeId": "string",
  • "exists": true,
  • "active": true,
  • "screenshots": 0,
  • "videos": "string",
  • "workCheckInterval": 0,
  • "allowEditTime": true,
  • "poorTimeusePopup": true,
  • "allowDeleteScreenshots": true,
  • "tasksMode": "string",
  • "trackingMode": "string",
  • "showOnReports": true,
  • "emailReports": "string",
  • "blurScreenshots": true,
  • "allowNoBreak": true,
  • "trackInternetConnectivity": true,
  • "stripUrlQuery": true,
  • "allowAdminSID": true,
  • "hideScreencasts": true,
  • "payrollAccess": true,
  • "payrollFeature": true,
  • "workScheduleFeature": true,
  • "allowManagerTagCategories": true,
  • "allowManagerProjectsTasks": true,
  • "allowManagerInviteUsers": true,
  • "allowManagerWorkSchedules": true,
  • "forceAutostart": true,
  • "firstDayOfWeek": true,
  • "webAndAppTracking": "off",
  • "hasDismissedBanner": true
}

Response samples

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

deleteUser

Delete user from a company

Authorizations:
path Parameters
userId
required
string

ID of User (me or empty means caller)

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

Operate on active or disabled (deleted) user

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/users/:userId?' + query,
  {method: 'DELETE'}
);

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

Response samples

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

mergeUsers

Merge users in company

Authorizations:
path Parameters
userId
required
string

ID of User (me or empty means caller)

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
src
Array of strings

Array of user IDs to be merged from

Responses

Request samples

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

Response samples

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

invite

Invite new user to company

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
name
string

Optional full name of invited user

email
required
string

Email of invited user

role
string
Enum: "tag" "superAdmin" "owner" "admin" "guest" "manager" "user"

A role of invited user in company

employeeId
string

Optional employee ID of invited user

noSendEmail
string
Enum: "true" "false"

Don't send invitation email

onlyProjectIds
Array of strings

If specified, allows only specified project IDs to be accessed

Responses

Request samples

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

Response samples

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

getInvitations

Get list of user's invitations (TODO:)

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

email
required
string

Responses

Request samples

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

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

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

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

Response samples

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

deleteOwnedCompanies

Delete owned companies

Authorizations:
path Parameters
userId
required
string

ID of User (me or empty means caller)

Responses

Request samples

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

const query = new URLSearchParams({
  token: 'YOUR_API_KEY_HERE'
}).toString();

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/users/:userId/companies?' + query,
  {method: 'DELETE'}
);

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

Response samples

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

Projects

status, activity, stats

projects

Get list of projects in company

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

projects
string

If specified, comma-separated list of IDs of projects to resolve

all
string
Enum: "true" "false"

If specified, returns all projects instead of assigned

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

If set, integration projects will be also listed

detail
string
Enum: "basic" "users"

Level of details (basic by default)

user
string

If specified, a comma-separated list of user IDs to resolve the accessible projects for; it's for yourself by default

Responses

Request samples

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

const query = new URLSearchParams({
  company: 'string',
  projects: 'string',
  all: 'true',
  'show-integration': 'true',
  detail: 'basic',
  user: 'string',
  token: 'YOUR_API_KEY_HERE'
}).toString();

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

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

Response samples

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

newProject

Add a project

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

projects
string

If specified, comma-separated list of IDs of projects to resolve

all
string
Enum: "true" "false"

If specified, returns all projects instead of assigned

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

If set, integration projects will be also listed

detail
string
Enum: "basic" "users"

Level of details (basic by default)

user
string

If specified, a comma-separated list of user IDs to resolve the accessible projects for; it's for yourself by default

Request Body schema: application/json
scope
string
Enum: "workspace" "user" "tag"

Scope of project

Array of objects

Details of users who have access to user-scope project

cloneTasksFromId
string

If specified, all the tasks for new project will be cloned from project with given ID

cloneAccessFromId
string

If specified, users access will be cloned from project with given ID

name
string

Project name

description
string

Project description

deleted
boolean

Is project deleted (archived)?

weight
number

Priority measure

id
string

Unique Identifier within all the entities in API instance

Responses

Request samples

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

Response samples

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

project

Get details of a project

Authorizations:
path Parameters
projectId
required
string

ID of Project

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

If specified, operates on deleted project instead of active.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/projects/:projectId?' + query,
  {method: 'GET'}
);

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

Response samples

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

putProject

Modify details of a project

Authorizations:
path Parameters
projectId
required
string

ID of Project

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

If specified, operates on deleted project instead of active.

Request Body schema: application/json
name
string

Project name

description
string

Project description

deleted
boolean

Is project deleted (archived)?

weight
number

Priority measure

Responses

Request samples

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

Response samples

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

deleteProject

Delete a project

Authorizations:
path Parameters
projectId
required
string

ID of Project

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

If specified, operates on deleted project instead of active.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/projects/:projectId?' + query,
  {method: 'DELETE'}
);

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

Response samples

Content type
application/json
{ }

putIntegrationProject

Ensure integration project

Authorizations:
path Parameters
projectId
required
string

ID of Project

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

If specified, operates on deleted project instead of active.

Request Body schema: application/json
name
string

Project name

description
string

Project description

required
object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "integration": {
    }
}

Response samples

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

putProjectUser

Make project private and add/change user access

Authorizations:
path Parameters
projectId
required
string

ID of Project

userId
required
string

ID of User which access shall be changed

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

If specified, operates on deleted project instead of active.

Request Body schema: application/json
role
string
Enum: "tag" "superAdmin" "owner" "admin" "guest" "manager" "user"

Role of user in project (user by default)

Responses

Request samples

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

Response samples

Content type
application/json
{ }

deleteProjectUser

Delete a project user access

Authorizations:
path Parameters
projectId
required
string

ID of Project

userId
required
string

ID of User which access shall be changed

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

If specified, operates on deleted project instead of active.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/projects/:projectId/users/:userId?' + query,
  {method: 'DELETE'}
);

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

Response samples

Content type
application/json
{ }

deleteProjectUsers

Make project public access

Authorizations:
path Parameters
projectId
required
string

ID of Project

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

If specified, operates on deleted project instead of active.

Responses

Request samples

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

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

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

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

Response samples

Content type
application/json
{ }

Folders

folders

folders

Get list of folders in company

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/folders?' + query,
  {method: 'GET'}
);

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

Response samples

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

newFolder

Add a folder

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
name
string

Folder name

description
string

Folder description

weight
number

Priority measure

id
string

Unique Identifier within all the entities in API instance

creatorId
string
delete
boolean

Responses

Request samples

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

Response samples

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

folder

Get details of a folder

Authorizations:
path Parameters
folderId
required
string

ID of Folder

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/folders/:folderId?' + query,
  {method: 'GET'}
);

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

Response samples

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

putFolder

Modify details of a folder

Authorizations:
path Parameters
folderId
required
string

ID of Folder

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
name
string

Folder name

description
string

Folder description

weight
number

Priority measure

active
boolean

Is folder active? Not active means archived

Responses

Request samples

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

Response samples

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

deleteFolder

Delete a folder

Authorizations:
path Parameters
folderId
required
string

ID of Folder

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/folders/:folderId?' + query,
  {method: 'DELETE'}
);

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

Response samples

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

putFolderTask

Modify details of a folder's task

Authorizations:
path Parameters
taskId
required
string

ID of Task

folderId
required
string

ID of Folder

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
weight
number

Priority measure

Responses

Request samples

Content type
application/json
{
  • "weight": 0
}

Response samples

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

deleteFolderTask

Delete a folder's task

Authorizations:
path Parameters
taskId
required
string

ID of Task

folderId
required
string

ID of Folder

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/folders/:folderId/tasks/:taskId?' + query,
  {method: 'DELETE'}
);

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

Response samples

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

putFolderProject

Modify details of a folder's project

Authorizations:
path Parameters
projectId
required
string

ID of Project

folderId
required
string

ID of Folder

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
weight
number

Priority measure

Responses

Request samples

Content type
application/json
{
  • "weight": 0
}

Response samples

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

deleteFolderProject

Delete a folder's project

Authorizations:
path Parameters
projectId
required
string

ID of Project

folderId
required
string

ID of Folder

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/folders/:folderId/projects/:projectId?' + query,
  {method: 'DELETE'}
);

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

Response samples

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

Tasks

tasks

tasks

Get list of tasks in company

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

tasks
string

If specified, comma-separated list of IDs of tasks to resolve.

projects
string

Comma-separated IDs of Projects to filter tasks by.

folders
string

Comma-separated IDs of Folders to filter tasks by.

filter
string
Enum: "assigned" "reported" "managed"

Filter the tasks by user.

user
string

ID of user to get the tasks for. (caller by default)

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

If set, integration tasks will be also listed

deleted
string
Enum: "true" "false"

Set to get deleted tasks instead of active.

Responses

Request samples

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

const query = new URLSearchParams({
  company: 'string',
  tasks: 'string',
  projects: 'string',
  folders: 'string',
  filter: 'assigned',
  user: 'string',
  'show-integration': 'true',
  deleted: 'true',
  token: 'YOUR_API_KEY_HERE'
}).toString();

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

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

Response samples

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

newTask

Add a task

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
id
required
string

Unique Identifier within all the entities in API instance

status
required
string
reporterId
required
string
deleted
required
boolean
deletedAt
string <full-date>
folders
required
object
required
object
name
required
string

Task name

description
string

Task description

required
object

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "status": "string",
  • "reporterId": "string",
  • "deleted": true,
  • "deletedAt": "string",
  • "folders": { },
  • "project": {
    },
  • "name": "string",
  • "description": "string",
  • "integration": {
    }
}

Response samples

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

task

Get details of a task

Authorizations:
path Parameters
taskId
required
string

ID of Task

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/tasks/:taskId?' + query,
  {method: 'GET'}
);

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

Response samples

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

putTask

Modify details of a task

Authorizations:
path Parameters
taskId
required
string

ID of Task

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
object
name
string

Task name

description
string

Task description

status
string
Enum: "new" "open" "progress" "resolved" "closed" "reopen"

Task status: working phase

weight
number

Priority measure

Array of objects

Folders, which the task belongs to

deleted
boolean

Is task deleted?

assignedTo
string

ID of User, task is assigned to

Responses

Request samples

Content type
application/json
{
  • "project": {
    },
  • "name": "string",
  • "description": "string",
  • "status": "new",
  • "weight": 0,
  • "folders": [
    ],
  • "deleted": true,
  • "assignedTo": "string"
}

Response samples

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

deleteTask

Set to restore (unarchive) the task instead of archiving it.

Authorizations:
path Parameters
taskId
required
string

ID of Task

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

deleted
string
Enum: "true" "false"

Set to restore (unarchive) the task instead of archiving it.

Responses

Request samples

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

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

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/tasks/:taskId?' + query,
  {method: 'DELETE'}
);

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

Response samples

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

putIntegrationTask

Ensure integration task

Authorizations:
path Parameters
taskId
required
string

ID of Task

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
object
name
string

Task name

description
string

Task description

required
object

Responses

Request samples

Content type
application/json
{
  • "project": {
    },
  • "name": "string",
  • "description": "string",
  • "integration": {
    }
}

Response samples

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

Activity

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

putStatus

Update user working status

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
taskId
string

ID of Task.

projectId
string

ID of Project.

mode
required
string
Enum: "offline" "offcomputer" "computer" "mobile" "manual" "break"

Working Status

date
string <date-time>

ISO date of beginning

Responses

Request samples

Content type
application/json
{
  • "taskId": "string",
  • "projectId": "string",
  • "mode": "offline",
  • "date": "2019-08-24T14:15:22Z"
}

Response samples

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

postActivity

Update activity using dates

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

Request Body schema: application/json
required
Array of objects

Items of Worklog

required
Array of objects

Items of Timeuse

Responses

Request samples

Content type
application/json
{
  • "worklog": [
    ],
  • "timeuse": [
    ]
}

Response samples

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

putActivity

Add/Update activity using base date and seconds offsets

Authorizations:
path Parameters
baseDate
required
string <date-time>

Base date of a chunk, since which start/end offsets go

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

header Parameters
X-Device-ID
required
string

Device ID of the laptop where the app is tracking time

Request Body schema: application/json
clicks
required
integer
fakeActivities
required
integer
keys
required
integer
movements
required
integer
sign
required
string

A SHA-256 hash of the chunk data, signed with the public/private keys on the desktop app

required
object

Time series recordings for clicks, keystrokes and mousemovements

required
Array of objects

Items of Worklog

required
Array of objects

Items of Timeuse

required
object

A key:value pair showing the times when changes in connectivity are detected. key represents time in sec while the value is either 0 or 1 with 0 = connected and 1 = disconnected

Responses

Request samples

Content type
application/json
{
  • "clicks": 0,
  • "fakeActivities": 0,
  • "keys": 0,
  • "movements": 0,
  • "sign": "string",
  • "rawActivity": {
    },
  • "worklog": [
    ],
  • "timeuse": [
    ],
  • "connectivity": {
    }
}

Response samples

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

getActivityWorklog

Get detailed worklog for a user

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

user
string

Comma-separated list of user IDs

from
string <date-time>

ISO Date of range beginning (inclusive); (to minus 30mins) by default

to
string <date-time>

ISO Date of range ending (exclusive); current by default

detail
string
Enum: "true" "false"

If specified, the method will return detailed activities with device IDs and comments

task-project-names
string
Enum: "true" "false"

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

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',
  'task-project-names': 'true',
  token: 'YOUR_API_KEY_HERE'
}).toString();

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

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

Response samples

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

putActivityWorklog

Modify worklog ranges for a user

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

user
string

Comma-separated list of user IDs

Request Body schema: application/json
start
required
string <date-time>

ISO date of beginning

end
required
string <date-time>

ISO date of ending (a moment of ending, f.x. a minute interval ends on a moment of next 00-th second)

taskId
string

ID of Task.

projectId
string

ID of Project.

Responses

Request samples

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

Response samples

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

getActivityTimeuse

Get detailed timeuse for a user

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

user
string

Comma-separated list of user IDs

from
string <date-time>

ISO Date of range beginning (inclusive); (to minus 30mins) by default

to
string <date-time>

ISO Date of range ending (exclusive); current by default

detail
string
Enum: "true" "false"

If specified, the method will return detailed activities with device IDs and comments

category
string

If specified, ID of category to filter by

category-details
string
Enum: "true" "false"

If specified, the method will resolve the details for categories

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',
  category: 'string',
  'category-details': 'true',
  token: 'YOUR_API_KEY_HERE'
}).toString();

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/activity/timeuse?' + query,
  {method: 'GET'}
);

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

Response samples

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

timeuseStats

Get timeise stats of user

Authorizations:
query Parameters
company
required
string

ID of Company or Workspace, user refers to.

from
string <date-time>

ISO Date of range beginning (inclusive); (to minus 30mins) by default

to
string <date-time>

ISO Date of range ending (exclusive); current by default

user
string

Comma-separated list of user IDs

category
string

Category to fetch report for

page
string

if specified, page ID to get results for; or first page by default

limit
string

if specified, maximum number of items to be returned; or use API-specific hard limit by default

sort
string
Enum: "time" "score" "category" "_time" "_score" "_category"

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

filter[time]
Array of strings

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

filter[score]
Array of strings

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

filter[category]
Array of strings

"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',
  token: 'YOUR_API_KEY_HERE'
}).toString();

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

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

Response samples

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

stats

Get stats for single time range for users

Authorizations:
path Parameters
detail
required
string
Default: "mode-ratio"
Enum: "user-count" "mode-ratio" "summary-ratio" "raw-ratio" "project-total" "task-total" "work-range"

Determines what stats details to return (mode-ratio by default; work-range = mode + task + project; summary-ratio = app + score; ); or ratings method

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

user
string

Comma-separated list of User IDs yourself if omitted; all -- to get totals for workspace

tag
string

Comma-separated list of Tag IDs. If specified, users will be filtered by these tags

task
string

If specified, return only statistics on this task

fields
string

Optional comma-separated list of field names to return.

group-by
string

If specified, will group the results by given field (if such grouping is supported).

score
string

For score-ratio ratings: comma separated list of scores to get compound ratios for

min-time
number >= 0

For user-count: comma-separated minimal time values of value ranges

ids
string

If specified, comma-separated IDs of tasks/projects/categories to return info about

from
string <date-time>

ISO Date of range beginning (inclusive); (to minus 30mins) by default

to
string <date-time>

ISO Date of range ending (exclusive); current by default

page
string

if specified, page ID to get results for; or first page by default

limit
string

if specified, maximum number of items to be returned; or use API-specific hard limit by default

sort
string
Enum: "id" "tagId" "userId" "ratio" "partial" "total" "entity" "name" "score" "project" "weight" "status" "active" "assigned" "reporter" "folder" "creator" "_id" "_tagId" "_userId" "_ratio" "_partial" "_total" "_entity" "_name" "_score" "_project" "_weight" "_status" "_active" "_assigned" "_reporter" "_folder" "_creator"

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

filter[id]
Array of strings

"string" -- exact match

filter[tagId]
Array of strings

"string" -- exact match

filter[userId]
Array of strings

"string" -- exact match

filter[ratio]
Array of strings

"string" -- exact match

filter[partial]
Array of strings

"string" -- exact match

filter[total]
Array of strings

"string" -- exact match

filter[entity]
Array of strings

"string" -- exact match

filter[name]
Array of strings

"string" -- exact match

filter[score]
Array of strings

"string" -- exact match

filter[project]
Array of strings

"string" -- exact match

filter[weight]
Array of strings

"string" -- exact match

filter[status]
Array of strings

"string" -- exact match

filter[active]
Array of strings

"string" -- exact match

filter[assigned]
Array of strings

"string" -- exact match

filter[reporter]
Array of strings

"string" -- exact match

filter[folder]
Array of strings

"string" -- exact match

filter[creator]
Array of strings

"string" -- exact match

Responses

Request samples

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

const query = new URLSearchParams({
  company: 'string',
  user: 'string',
  tag: 'string',
  task: 'string',
  fields: 'string',
  'group-by': 'string',
  score: 'string',
  'min-time': '0',
  ids: 'string',
  from: '2019-08-24T14:15:22Z',
  to: '2019-08-24T14:15:22Z',
  page: 'string',
  limit: 'string',
  sort: 'id',
  'filter[id]': 'string',
  'filter[tagId]': 'string',
  'filter[userId]': 'string',
  'filter[ratio]': 'string',
  'filter[partial]': 'string',
  'filter[total]': 'string',
  'filter[entity]': 'string',
  'filter[name]': 'string',
  'filter[score]': 'string',
  'filter[project]': 'string',
  'filter[weight]': 'string',
  'filter[status]': 'string',
  'filter[active]': 'string',
  'filter[assigned]': 'string',
  'filter[reporter]': 'string',
  'filter[folder]': 'string',
  'filter[creator]': 'string',
  token: 'YOUR_API_KEY_HERE'
}).toString();

const resp = await fetch(
  'https://api2.timedoctor.com/api/1.0/stats/:detail?' + query,
  {method: 'GET'}
);

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

Response samples

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

statsTimesheet

Get stats for multiple time ranges for users

Authorizations:
path Parameters
detail
required
string
Default: "mode-ratio"
Enum: "user-count" "mode-ratio" "summary-ratio" "raw-ratio" "project-total" "task-total" "work-range"

Determines what stats details to return (mode-ratio by default; work-range = mode + task + project; summary-ratio = app + score; ); or ratings method

query Parameters
company
required
string

ID of Company or Workspace, user refers to.

timezone
string

Timezone of ranges breaks. Etc/UTC by default

period
string
Default: "days"
Enum: "minutes" "hours" "days" "months" "years"

Period unit of ranges subdivision. days by