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.
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.
Time doctor API calls actually use the HTTPS protocol, the secure form of HTTP. All calls for version 1.0 begin with the prefix:
The request header for all API calls must include the following parameters: "accept: application/json" "content: application/json"
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.
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:
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}.
Time Doctor API support ISO date and time format i.e. YYYY-MM-DDT00:00:00Z (Z refers to UTC timezone)
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
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 below.
For example from=2021-07-02T00:00:00Z & to=2021-07-02T23:59:59Z OR from=2021-07-02T00:00:00Z & to=2021-07-03T00:00:00Z
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 black titles are from the time when the setting was disabled.
The tags refer to Groups in Time Doctor.
Files refer to the screencasts (screenshots and screen videos) in Time Doctor.
Categories refer to the productivity ratings in Time Doctor.
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.
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.
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, user ID, email, etc. You will see the filters query parameters in some of the API calls where you can use them.
Login and get access token
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). |
{- "email": "string",
- "password": "string",
- "totpCode": "string",
- "permissions": "write"
}
{- "data": {
- "token": "string",
- "expires": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}
}
Register account
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 |
{- "name": "string",
- "email": "string",
- "timezone": "string",
- "password": "string",
- "twoFactorAuth": false,
- "referrer": "string"
}
{- "data": {
- "token": "string",
- "expires": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}
}
Register account
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 Tracking mode of company |
interactiveTrackingMode | string Interactive tracking mode of company |
pricingPlan | string Default: "standard_new" Pricing plan of company |
{- "name": "string",
- "email": "string",
- "timezone": "string",
- "password": "string",
- "referrer": "string",
- "company": "string",
- "trackingMode": "mixed",
- "interactiveTrackingMode": "manual",
- "pricingPlan": "standard_new"
}
{- "data": {
- "token": "string",
- "expires": "string",
- "createdAt": "string",
- "userId": "string",
- "companyId": "string",
- "workspaceId": "string",
- "noWorkspaces": true
}
}
Modify profile data
apiKey
) 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 |
{- "name": "string",
- "email": "string",
- "timezone": "string",
- "password": "string",
- "twoFactorAuth": false,
- "referrer": "string"
}
{- "data": { }
}
Get an email to restore (reset) your password
email required | string |
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);
{- "data": { }
}
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);
{- "data": { }
}
Logout and invalidate access token, identified by ID
apiKey
) id | string token ID, returned by GET |
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);
{- "data": { }
}
Get list of own administered companies or workspaces in a company. In case there is no owned company record for this auth token, it will return an empty list.
apiKey
) no-workspaces | string If specified, result will contain directly tracking companies/workspaces |
const fetch = require('node-fetch'); const query = new URLSearchParams({'no-workspaces': 'true'}).toString(); const resp = await fetch( `https://api2.timedoctor.com/api/1.0/companies?${query}`, { method: 'GET', headers: { Authorization: 'YOUR_API_KEY_HERE' } } ); const data = await resp.text(); console.log(data);
{- "data": [
- {
- "role": "string",
- "hiredAt": "string",
- "lastSeen": {
- "updatedAt": "string",
- "online": true,
- "ip": "string"
}, - "tagIds": [
- "string"
], - "onlyProjectIds": [
- "string"
], - "name": "string",
- "company": {
- "id": "string",
- "name": "string",
- "createdAt": "string",
- "oldCompanyId": "string",
- "noWorkspaces": true,
- "timezone": "string",
- "locked": true,
- "userCount": 0,
- "userDiscount": 0,
- "forceUserCount": 0,
- "minBillableUsers": 0,
- "allUsersTagId": "string",
- "hasManagedApprovals": true,
- "subscription": {
- "plan": "string",
- "status": "string",
- "expires": "string"
}, - "settings": {
- "name": "string",
- "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,
- "signupStep": 0,
- "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,
- "custom": {
- "browserExtensionEnabled": true,
- "completedStep": {
- "manageUsers": true,
- "setupGroups": true,
- "companySettings": true
}
}, - "webAndAppTracking": "off"
}, - "splitTest": [
- {
- "name": "string",
- "value": "string"
}
], - "pricingPlan": "string"
}, - "custom": {
- "completedStep": {
- "addEmployee": true,
- "employeeTrack": true,
- "confirmEmail": true,
- "companySettings": true
}
}, - "isSilent": true,
- "isInteractive": true,
- "allowManual": true
}
]
}
Add a company or a workspace
apiKey
) company | string If specified, ID of Company or Workspace, user refers to. If omitted, the operation refers to global |
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") |
pricingPlan | string Pricing plan of company |
newOwnerId | string New company owner |
object Tracking time information for silent companies | |
whoCanAccessScreenshots | string Access level required for screenshots page |
allowLeavesForRegularUsers | boolean Allow regular users to apply for the leaves |
{- "noWorkspaces": true,
- "name": "string",
- "description": "string",
- "creator": "string",
- "timezone": "string",
- "pricingPlan": "basic",
- "newOwnerId": "string",
- "silentTrackingTimes": {
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "hours": [
- [
- "8:00",
- "13:00"
], - [
- "14:00",
- "17:00"
]
], - "timezone": "UTC"
}, - "whoCanAccessScreenshots": "none",
- "allowLeavesForRegularUsers": true
}
{- "data": {
- "id": "string",
- "name": "string",
- "createdAt": "string",
- "creatorId": "string",
- "oldCompanyId": "string",
- "noWorkspaces": true,
- "timezone": "string",
- "locked": true,
- "userCount": 0,
- "userDiscount": 0,
- "forceUserCount": 0,
- "minBillableUsers": 0,
- "uniqueUserCount": 0,
- "allUsersTagId": "string",
- "hasManagedApprovals": true,
- "subscription": {
- "plan": "string",
- "status": "string",
- "expires": "string"
}, - "settings": {
- "name": "string",
- "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,
- "signupStep": 0,
- "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,
- "custom": {
- "browserExtensionEnabled": true,
- "completedStep": {
- "manageUsers": true,
- "setupGroups": true,
- "companySettings": true
}
}, - "webAndAppTracking": "off"
}, - "splitTest": [
- {
- "name": "string",
- "value": "string"
}
], - "pricingPlan": "string"
}
}
Get company by ID
apiKey
) companyId required | string ID of Company or Workspace |
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);
{- "data": {
- "id": "string",
- "name": "string",
- "createdAt": "string",
- "creatorId": "string",
- "oldCompanyId": "string",
- "noWorkspaces": true,
- "timezone": "string",
- "locked": true,
- "userCount": 0,
- "userDiscount": 0,
- "forceUserCount": 0,
- "minBillableUsers": 0,
- "uniqueUserCount": 0,
- "allUsersTagId": "string",
- "hasManagedApprovals": true,
- "subscription": {
- "plan": "string",
- "status": "string",
- "expires": "string"
}, - "settings": {
- "name": "string",
- "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,
- "signupStep": 0,
- "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,
- "custom": {
- "browserExtensionEnabled": true,
- "completedStep": {
- "manageUsers": true,
- "setupGroups": true,
- "companySettings": true
}
}, - "webAndAppTracking": "off"
}, - "splitTest": [
- {
- "name": "string",
- "value": "string"
}
], - "pricingPlan": "string"
}
}
Modify details of a company
apiKey
) companyId required | string ID of Company or Workspace |
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") |
pricingPlan | string Pricing plan of company |
newOwnerId | string New company owner |
object Tracking time information for silent companies | |
whoCanAccessScreenshots | string Access level required for screenshots page |
allowLeavesForRegularUsers | boolean Allow regular users to apply for the leaves |
{- "noWorkspaces": true,
- "name": "string",
- "description": "string",
- "creator": "string",
- "timezone": "string",
- "pricingPlan": "basic",
- "newOwnerId": "string",
- "silentTrackingTimes": {
- "days": [
- 1,
- 2,
- 3,
- 4,
- 5
], - "hours": [
- [
- "8:00",
- "13:00"
], - [
- "14:00",
- "17:00"
]
], - "timezone": "UTC"
}, - "whoCanAccessScreenshots": "none",
- "allowLeavesForRegularUsers": true
}
{- "data": { }
}
Get all the timezones for all company users
apiKey
) companyId required | string ID of Company or Workspace |
const fetch = require('node-fetch'); const companyId = 'YOUR_companyId_PARAMETER'; const resp = await fetch( `https://api2.timedoctor.com/api/1.0/companies/${companyId}/timezones`, { method: 'GET', headers: { Authorization: 'YOUR_API_KEY_HERE' } } ); const data = await resp.text(); console.log(data);
{- "data": [
- "string"
]
}
Get list of own administered companies
apiKey
) userId required | string ID of User ( |
company required | string ID of Company or Workspace, user refers to. |
self | string If specified, returns user data of |
detail | string Level of detail in reply |
task-project-names | string If specified, the method will resolve the names for tasks and projects |
no-tag | string Return only users without tags |
include-archived-users | boolean Default: false include archived user ids in user param |
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 which field to sort by, prepend it with "_" for descending sorting |
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" |
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);
{- "data": [
- {
- "hiredAt": "string",
- "timezone": "string",
- "active": true,
- "profileTimezone": "string",
- "status": "string",
- "createdAt": "string",
- "id": "string",
- "twoFactorAuth": true,
- "email": "string",
- "emailConfirmed": true,
- "reportIn24HourFormat": true,
- "managerBannerDismissed": "notShown",
- "name": "string",
- "role": "owner",
- "onlyProjectIds": [
- "string"
]
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}, - "self": {
- "hiredAt": "string",
- "timezone": "string",
- "active": true,
- "profileTimezone": "string",
- "status": "string",
- "createdAt": "string",
- "id": "string",
- "twoFactorAuth": true,
- "email": "string",
- "emailConfirmed": true,
- "reportIn24HourFormat": true,
- "managerBannerDismissed": "notShown",
- "name": "string",
- "role": "owner",
- "onlyProjectIds": [
- "string"
]
}
}
Get/resolve list of users
apiKey
) 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 |
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 If specified, returns user data of |
detail | string Level of detail in reply |
task-project-names | string If specified, the method will resolve the names for tasks and projects |
no-tag | string Return only users without tags |
include-archived-users | boolean Default: false include archived user ids in user param |
deleted | string 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 which field to sort by, prepend it with "_" for descending sorting |
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" |
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);
{- "data": [
- {
- "hiredAt": "string",
- "timezone": "string",
- "active": true,
- "profileTimezone": "string",
- "status": "string",
- "createdAt": "string",
- "id": "string",
- "twoFactorAuth": true,
- "email": "string",
- "emailConfirmed": true,
- "reportIn24HourFormat": true,
- "managerBannerDismissed": "notShown",
- "name": "string",
- "role": "owner",
- "onlyProjectIds": [
- "string"
]
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}, - "self": {
- "hiredAt": "string",
- "timezone": "string",
- "active": true,
- "profileTimezone": "string",
- "status": "string",
- "createdAt": "string",
- "id": "string",
- "twoFactorAuth": true,
- "email": "string",
- "emailConfirmed": true,
- "reportIn24HourFormat": true,
- "managerBannerDismissed": "notShown",
- "name": "string",
- "role": "owner",
- "onlyProjectIds": [
- "string"
]
}
}
Get user by ID
apiKey
) userId required | string ID of User ( |
company | string If specified, ID of Company or Workspace, user refers to. If omitted, the operation refers to global |
detail | string Level of detail in reply |
task-project-names | string If specified, the method will resolve the names for tasks and projects |
no-tag | string Return only users without tags |
include-archived-users | boolean Default: false include archived user ids in user param |
deleted | string 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 which field to sort by, prepend it with "_" for descending sorting |
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" |
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);
{- "data": {
- "hiredAt": "string",
- "timezone": "string",
- "active": true,
- "profileTimezone": "string",
- "status": "string",
- "createdAt": "string",
- "id": "string",
- "twoFactorAuth": true,
- "email": "string",
- "emailConfirmed": true,
- "reportIn24HourFormat": true,
- "managerBannerDismissed": "notShown",
- "name": "string",
- "role": "owner",
- "onlyProjectIds": [
- "string"
], - "employeeId": "string",
- "exists": 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,
- "signupStep": 0,
- "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,
- "custom": {
- "browserExtensionEnabled": true,
- "completedStep": {
- "manageUsers": true,
- "setupGroups": true,
- "companySettings": true
}
}, - "webAndAppTracking": "off",
- "managerIds": [
- "string"
], - "tagIds": [
- "string"
], - "silentInfo": [
- "string"
]
}
}
Modify user data in company
apiKey
) userId required | string ID of User ( |
company required | string ID of Company or Workspace, user refers to. |
deleted | string Operate on active or disabled (deleted) user |
name | string User's name |
role | string 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 |
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) |
{- "name": "string",
- "role": "owner",
- "onlyProjectIds": [
- "string"
], - "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"
}
{- "data": { }
}
Delete user from a company
apiKey
) userId required | string ID of User ( |
company required | string ID of Company or Workspace, user refers to. |
deleted | string Operate on active or disabled (deleted) user |
delete-permanently | string Permanently delete the user from the system |
reason | string Reason for deleting the user |
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);
{- "data": { }
}
Invite new user to company
NOTE: If you have paid for the month and then you add more users to the account later, you’ll be charged a prorated amount for the remainder of the month for each new user added.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
name | string Optional full name of invited user |
email required | string Email of invited user |
role | string A role of invited user in company |
employeeId | string Optional employee ID of invited user |
noSendEmail | string Don't send invitation email |
onlyProjectIds | Array of strings If specified, allows only specified project IDs to be accessed |
{- "name": "string",
- "email": "string",
- "role": "owner",
- "employeeId": "string",
- "noSendEmail": "true",
- "onlyProjectIds": [
- "string"
]
}
{- "data": { }
}
Get list of user's invitations (TODO:)
apiKey
) company required | string ID of Company or Workspace, user refers to. |
email required | string |
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);
{- "data": {
- "name": "string",
- "invitePending": true,
- "id": "string"
}
}
Send a BULK of user invitations
apiKey
) company required | string ID of Company or Workspace, user refers to. |
required | Array of objects Invited Users |
noSendEmail | string Don't send invitation email |
onlyProjectIds | Array of strings If specified, allows only specified project IDs to be accessed |
tagIds | Array of strings |
{- "users": [
- {
- "name": "string",
- "email": "string",
- "password": "string",
- "role": "owner",
- "employeeId": "string"
}
], - "noSendEmail": "true",
- "onlyProjectIds": [
- "string"
], - "tagIds": [
- "string"
]
}
{- "data": [
- {
- "status": "sent",
- "userId": "string",
- "reason": "string",
- "error": {
- "message": "string"
}
}
]
}
Get details of all users configurations for a company
apiKey
) company | string If specified, ID of Company or Workspace, user refers to. If omitted, the operation refers to global |
self | string If specified, returns user data of |
detail | string Level of detail in reply |
task-project-names | string If specified, the method will resolve the names for tasks and projects |
no-tag | string Return only users without tags |
include-archived-users | boolean Default: false include archived user ids in user param |
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 which field to sort by, prepend it with "_" for descending sorting |
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" |
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);
{- "data": [
- {
- "hiredAt": "string",
- "timezone": "string",
- "active": true,
- "profileTimezone": "string",
- "status": "string",
- "createdAt": "string",
- "id": "string",
- "twoFactorAuth": true,
- "email": "string",
- "emailConfirmed": true,
- "reportIn24HourFormat": true,
- "managerBannerDismissed": "notShown",
- "name": "string",
- "role": "owner",
- "onlyProjectIds": [
- "string"
]
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}, - "self": {
- "hiredAt": "string",
- "timezone": "string",
- "active": true,
- "profileTimezone": "string",
- "status": "string",
- "createdAt": "string",
- "id": "string",
- "twoFactorAuth": true,
- "email": "string",
- "emailConfirmed": true,
- "reportIn24HourFormat": true,
- "managerBannerDismissed": "notShown",
- "name": "string",
- "role": "owner",
- "onlyProjectIds": [
- "string"
]
}
}
Get info about all active user tokens
apiKey
) 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 which field to sort by, prepend it with "_" for descending sorting |
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" |
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);
{- "data": [
- {
- "id": "string",
- "token": "string",
- "ip": "string",
- "userAgent": "string",
- "createdAt": "string",
- "expiresAt": "string"
}
]
}
Get list of projects in company
apiKey
) 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 If specified, returns all projects instead of assigned |
show-integration | string If set, integration projects will be also listed |
allow-unassigned | string If set, unassigned projects will also be listed |
detail | string Level of details ( |
user | string If specified, a comma-separated list of user IDs to resolve the accessible projects for; it's for yourself 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 which field to sort by, prepend it with "_" for descending sorting |
filter[id] | string "string" -- exact match |
filter[name] | string "string" -- starts with |
filter[keywords] | string set of keywords to be matched |
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 which field to sort by, prepend it with "_" for descending sorting |
filter[keyphrase] | string A keyphrase for searching by keywords |
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', 'string'], limit: ['string', 'string'], sort: ['id', 'keyphrase'], 'filter[id]': 'string', 'filter[name]': 'string', 'filter[keywords]': 'string', 'filter[keyphrase]': '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);
{- "data": [
- {
- "integration": {
- "provider": "string",
- "data": { }
}, - "name": "string",
- "description": "string",
- "deleted": true,
- "weight": 0
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Add a project
apiKey
) company required | string ID of Company or Workspace, user refers to. |
scope | string Scope of project |
Array of objects Details of users who have access to | |
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 |
{- "scope": "workspace",
- "users": [
- {
- "id": "string",
- "role": "tag"
}
], - "cloneTasksFromId": "string",
- "cloneAccessFromId": "string",
- "name": "string",
- "description": "string",
- "deleted": true,
- "weight": 0
}
{- "data": {
- "integration": {
- "provider": "string",
- "data": { }
}, - "name": "string",
- "description": "string",
- "deleted": true,
- "weight": 0
}
}
Get details of a project
apiKey
) projectId required | string ID of Project |
company required | string ID of Company or Workspace, user refers to. |
deleted | string If specified, operates on deleted project instead of active. |
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);
{- "data": {
- "integration": {
- "provider": "string",
- "data": { }
}, - "name": "string",
- "description": "string",
- "deleted": true,
- "weight": 0
}
}
Modify details of a project
apiKey
) projectId required | string ID of Project |
company required | string ID of Company or Workspace, user refers to. |
deleted | string If specified, operates on deleted project instead of active. |
name | string Project name |
description | string Project description |
deleted | boolean Is project deleted (archived)? |
weight | number Priority measure |
{- "name": "string",
- "description": "string",
- "deleted": true,
- "weight": 0
}
{- "data": { }
}
Delete a project
apiKey
) projectId required | string ID of Project |
company required | string ID of Company or Workspace, user refers to. |
deleted | string If specified, operates on deleted project instead of active. |
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);
{ }
Make project private and add/change user access
apiKey
) projectId required | string ID of Project |
userId required | string ID of User which access shall be changed |
company required | string ID of Company or Workspace, user refers to. |
deleted | string If specified, operates on deleted project instead of active. |
role | string Role of user in project ( |
{- "role": "user"
}
{ }
Delete a project user access
apiKey
) projectId required | string ID of Project |
userId required | string ID of User which access shall be changed |
company required | string ID of Company or Workspace, user refers to. |
deleted | string If specified, operates on deleted project instead of active. |
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);
{ }
Make project public access
apiKey
) projectId required | string ID of Project |
company required | string ID of Company or Workspace, user refers to. |
deleted | string If specified, operates on deleted project instead of active. |
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);
{ }
Get list of projects in company with an added support for socket streamable chunks
apiKey
) 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 If specified, returns all projects instead of assigned |
show-integration | string If set, integration projects will be also listed |
allow-unassigned | string If set, unassigned projects will also be listed |
detail | string Level of details ( |
user | string If specified, a comma-separated list of user IDs to resolve the accessible projects for; it's for yourself 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 which field to sort by, prepend it with "_" for descending sorting |
filter[id] | string "string" -- exact match |
filter[name] | string "string" -- starts with |
filter[keywords] | string set of keywords to be matched |
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 which field to sort by, prepend it with "_" for descending sorting |
filter[keyphrase] | string A keyphrase for searching by keywords |
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', 'string'], limit: ['string', 'string'], sort: ['id', 'keyphrase'], 'filter[id]': 'string', 'filter[name]': 'string', 'filter[keywords]': 'string', 'filter[keyphrase]': '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);
{- "data": [
- {
- "integration": {
- "provider": "string",
- "data": { }
}, - "name": "string",
- "description": "string",
- "deleted": true,
- "weight": 0
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Get list of tasks in company
apiKey
) 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. |
show-integration | string If set, integration tasks will be also listed |
public-only | string If set, only the public tasks will be listed |
deleted | string Set to get deleted tasks instead of active. |
projectless | string If set, only tasks without a project assigned will be listed |
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 which field to sort by, prepend it with "_" for descending sorting |
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 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 which field to sort by, prepend it with "_" for descending sorting |
filter[keyphrase] | string A keyphrase for searching by keywords |
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.0/tasks?${query}`, { method: 'GET', headers: { Authorization: 'YOUR_API_KEY_HERE' } } ); const data = await resp.text(); console.log(data);
{- "data": [
- {
- "id": "string",
- "status": "string",
- "reporterId": "string",
- "deleted": true,
- "deletedAt": "string",
- "folders": { },
- "project": {
- "id": "string",
- "weight": 0
}, - "name": "string",
- "description": "string",
- "integration": {
- "provider": "string",
- "data": { }
}
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Add a task
apiKey
) company required | string ID of Company or Workspace, user refers to. |
object | |
name | string Task name |
description | string Task description |
weight | number Priority measure |
deleted | boolean Is task deleted? |
status | string Status of the task, used for filtering |
public | boolean Make the task public when requested as admin, manager or owner |
{- "project": {
- "id": "string",
- "weight": 0
}, - "name": "string",
- "description": "string",
- "weight": 0,
- "deleted": true,
- "status": "string",
- "public": true
}
{- "data": {
- "id": "string",
- "status": "string",
- "reporterId": "string",
- "deleted": true,
- "deletedAt": "string",
- "folders": { },
- "project": {
- "id": "string",
- "weight": 0
}, - "name": "string",
- "description": "string",
- "integration": {
- "provider": "string",
- "data": { }
}
}
}
Get details of a task
apiKey
) taskId required | string ID of Task |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": {
- "id": "string",
- "status": "string",
- "reporterId": "string",
- "deleted": true,
- "deletedAt": "string",
- "folders": { },
- "project": {
- "id": "string",
- "weight": 0
}, - "name": "string",
- "description": "string",
- "integration": {
- "provider": "string",
- "data": { }
}
}
}
Modify details of a task
apiKey
) taskId required | string ID of Task |
company required | string ID of Company or Workspace, user refers to. |
object | |
name | string Task name |
description | string Task description |
weight | number Priority measure |
deleted | boolean Is task deleted? |
status | string Status of the task, used for filtering |
public | boolean Make the task public when requested as admin, manager or owner |
{- "project": {
- "id": "string",
- "weight": 0
}, - "name": "string",
- "description": "string",
- "weight": 0,
- "deleted": true,
- "status": "string",
- "public": true
}
{- "data": { }
}
Set to restore (unarchive) the task instead of archiving it.
apiKey
) taskId required | string ID of Task |
company required | string ID of Company or Workspace, user refers to. |
deleted | string Set to restore (unarchive) the task instead of archiving it. |
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);
{- "data": { }
}
Get list of tasks in company with an added support for socket streamable chunks
apiKey
) 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. |
show-integration | string If set, integration tasks will be also listed |
public-only | string If set, only the public tasks will be listed |
deleted | string Set to get deleted tasks instead of active. |
projectless | string If set, only tasks without a project assigned will be listed |
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 which field to sort by, prepend it with "_" for descending sorting |
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 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 which field to sort by, prepend it with "_" for descending sorting |
filter[keyphrase] | string A keyphrase for searching by keywords |
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);
{- "data": [
- {
- "id": "string",
- "status": "string",
- "reporterId": "string",
- "deleted": true,
- "deletedAt": "string",
- "folders": { },
- "project": {
- "id": "string",
- "weight": 0
}, - "name": "string",
- "description": "string",
- "integration": {
- "provider": "string",
- "data": { }
}
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Get detailed worklog for a user
NOTE: It is recommended to run this API call for 7 days at a time to avoid performance issues.
apiKey
) 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 | string <date-time> ISO Date of range ending (exclusive); current by default |
detail | string If specified, the method will return detailed activities with device IDs and comments |
exclude-fields | string Comma-separated list of fields to exclude from results |
include-modes | string Comma-separated list of worklog modes to include optional modes like unpaidLeave in the results |
task-project-names | string If specified, the method will resolve the names for tasks and projects |
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' }).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);
{- "data": [
- {
- "taskId": "string",
- "projectId": "string",
- "mode": "offline",
- "date": "2019-08-24T14:15:22Z",
- "start": "2019-08-24T14:15:22Z",
- "time": 0,
- "userId": "string",
- "taskName": "string",
- "projectName": "string",
- "deviceId": "string"
}
]
}
Get detailed timeuse for a user
apiKey
) 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 | string <date-time> ISO Date of range ending (exclusive); current by default |
detail | string If specified, the method will return detailed activities with device IDs and comments |
exclude-fields | string Comma-separated list of fields to exclude from results |
include-modes | string Comma-separated list of worklog modes to include optional modes like unpaidLeave in the results |
category | string If specified, ID of category to filter by |
category-details | string If specified, the method will resolve the details for categories |
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', category: 'string', 'category-details': 'true' }).toString(); const resp = await fetch( `https://api2.timedoctor.com/api/1.0/activity/timeuse?${query}`, { method: 'GET', headers: { Authorization: 'YOUR_API_KEY_HERE' } } ); const data = await resp.text(); console.log(data);
{- "data": [
- {
- "start": "2019-08-24T14:15:22Z",
- "time": 0,
- "score": 0,
- "category": {
- "id": "string",
- "entity": "string",
- "name": "string",
- "scope": "string",
- "score": 0,
- "time": 0
}, - "type": "string",
- "value": "string",
- "title": "string"
}
]
}
Get timeise stats of user
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
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 which field to sort by, prepend it with "_" for descending sorting |
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 |
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);
{- "data": [
- {
- "type": "string",
- "value": "string",
- "title": "string",
- "score": 0,
- "time": 0,
- "category": "string",
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}
]
}
Get edit time ranges for a user(s)
apiKey
) 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 | string <date-time> ISO Date of range ending (exclusive); current by default |
exclude-fields | string Comma-separated list of fields to exclude from results |
include-modes | string Comma-separated list of worklog modes to include optional modes like unpaidLeave in the results |
approved | string If specified, the method will filter by approval |
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) |
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);
{- "data": [
- {
- "userId": "string",
- "start": "2019-08-24T14:15:22Z",
- "taskId": "string",
- "projectId": "string",
- "end": "2019-08-24T14:15:22Z",
- "operation": "add",
- "reason": "string",
- "approved": true
}
]
}
Add edit time range for a user
apiKey
) company required | string ID of Company or Workspace, user refers to. |
userId | string ID of the user |
start required | string <date-time> ISO date of beginning |
taskId required | string ID of Task. |
projectId required | string ID of Project. |
end | 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) |
operation required | string Edit Time Operation |
reason required | string |
approved required | boolean |
{- "userId": "string",
- "start": "2019-08-24T14:15:22Z",
- "taskId": "string",
- "projectId": "string",
- "end": "2019-08-24T14:15:22Z",
- "operation": "add",
- "reason": "string",
- "approved": true
}
{- "data": {
- "userId": "string",
- "start": "2019-08-24T14:15:22Z",
- "taskId": "string",
- "projectId": "string",
- "end": "2019-08-24T14:15:22Z",
- "operation": "add",
- "reason": "string",
- "approved": true
}
}
update edit time records in bulk
apiKey
) company required | string ID of Company or Workspace, user refers to. |
userId | string ID of the user |
start required | string <date-time> ISO date of beginning |
taskId required | string ID of Task. |
projectId required | string ID of Project. |
end | 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) |
operation required | string Edit Time Operation |
reason required | string |
approved required | boolean |
[- {
- "userId": "string",
- "start": "2019-08-24T14:15:22Z",
- "taskId": "string",
- "projectId": "string",
- "end": "2019-08-24T14:15:22Z",
- "operation": "add",
- "reason": "string",
- "approved": true
}
]
{- "data": {
- "userId": "string",
- "start": "2019-08-24T14:15:22Z",
- "taskId": "string",
- "projectId": "string",
- "end": "2019-08-24T14:15:22Z",
- "operation": "add",
- "reason": "string",
- "approved": true
}
}
Modify edit time range for a user
apiKey
) id required | string ID of the time to edit |
company required | string ID of Company or Workspace, user refers to. |
userId | string ID of the user |
start required | string <date-time> ISO date of beginning |
taskId required | string ID of Task. |
projectId required | string ID of Project. |
end | 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) |
operation required | string Edit Time Operation |
reason required | string |
approved required | boolean |
{- "userId": "string",
- "start": "2019-08-24T14:15:22Z",
- "taskId": "string",
- "projectId": "string",
- "end": "2019-08-24T14:15:22Z",
- "operation": "add",
- "reason": "string",
- "approved": true
}
{- "data": {
- "id": "string",
- "mqId": "string"
}
}
Get detailed disconnectivity data for a user
apiKey
) 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 | string <date-time> ISO Date of range ending (exclusive); current by default |
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' }).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);
{- "data": [
- {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "time": 0,
- "userId": "string"
}
]
}
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
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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[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[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[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[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[idleMinsRatio] | 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" |
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 if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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[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[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[keys]': 'string', 'filter[moves]': 'string', 'filter[totalSec]': 'string', 'filter[activeSec]': 'string', 'filter[clicksRatio]': 'string', 'filter[idleSecRatio]': 'string', 'filter[keysRatio]': 'string', 'filter[movesRatio]': 'string', 'filter[totalSecRatio]': 'string', 'filter[activeSecRatio]': 'string', 'filter[totalMins]': 'string', 'filter[idleMins]': 'string', 'filter[idleMinsRatio]': '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', '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);
{- "data": [
- {
- "total": 0,
- "modeTotal": 0
}
]
}
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
.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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[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 if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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[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);
{- "data": [
- {
- "total": 0
}
]
}
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.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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[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[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[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[clicksRatio] | 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[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" |
ratio-page | string if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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[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[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[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[clicksRatio]': 'string', 'filter[keysRatio]': 'string', 'filter[movesRatio]': 'string', 'filter[totalSecRatio]': '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', '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);
{- "data": [
- {
- "total": 0,
- "modeTotal": 0
}
]
}
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
.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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 if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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);
{- "data": { }
}
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
.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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 if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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);
{- "data": { }
}
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
.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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' }).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);
{- "data": { }
}
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
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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[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[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[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[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[idleMinsRatio] | 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" |
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 if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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[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[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[keys]': 'string', 'filter[moves]': 'string', 'filter[totalSec]': 'string', 'filter[activeSec]': 'string', 'filter[clicksRatio]': 'string', 'filter[idleSecRatio]': 'string', 'filter[keysRatio]': 'string', 'filter[movesRatio]': 'string', 'filter[totalSecRatio]': 'string', 'filter[activeSecRatio]': 'string', 'filter[totalMins]': 'string', 'filter[idleMins]': 'string', 'filter[idleMinsRatio]': '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', '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);
{- "data": [
- {
- "total": 0,
- "modeTotal": 0
}
]
}
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
.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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[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 if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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[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);
{- "data": [
- {
- "total": 0
}
]
}
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.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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[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[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[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[clicksRatio] | 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[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" |
ratio-page | string if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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[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[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[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[clicksRatio]': 'string', 'filter[keysRatio]': 'string', 'filter[movesRatio]': 'string', 'filter[totalSecRatio]': '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', '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);
{- "data": [
- {
- "total": 0,
- "modeTotal": 0
}
]
}
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
.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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 if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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);
{- "data": { }
}
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
.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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 which field to sort by, prepend it with "_" for descending sorting |
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 if specified, page ID to get results for; or first page by default |
ratio-limit | string if specified, maximum number of 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 |
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 if specified, page ID to get results for; or first page by default |
date-limit | string if specified, maximum number of items to be returned; or use API-specific hard limit by default |
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', 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);
{- "data": { }
}
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
.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date-time> ISO Date of range beginning (inclusive); ( |
to | string <date-time> ISO Date of range ending (exclusive); current by default |
user | string Comma-separated list of User IDs yourself if omitted; |
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 |
unpaid | integer If set to 1, includes unpaid time (from unpaid breaks) into report |
breaks | string Specifies breaks to get. This may not be combined with "task" parameter |
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). |
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) |
timezone | string Timezone of ranges breaks. |
period | string Default: "days" Period unit of ranges subdivision. |
interval | integer <int32> >= 1 Number of period units. |
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' }).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);
{- "data": { }
}
Get all files
apiKey
) company required | string ID of Company or Workspace, user refers to. |
user | string Comma-separated list of user IDs, whose files to get; self by default |
tag | string Comma-separated list of tag IDs, whose users' files to get |
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 which field to sort by, prepend it with "_" for descending sorting |
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 |
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);
{- "data": {
- "userId": "string",
- "date": "2019-08-24T14:15:22Z",
- "deviceId": "string",
- "numbers": [
- {
- "number": "string",
- "mime": "string",
- "deleted": true,
- "avgActivity": 0,
- "meta": {
- "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"
}, - "url": "string",
- "urls": {
- "original": "string",
- "small": "string"
}, - "entity": "file"
}
]
}, - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Delete user files
apiKey
) company required | string ID of Company or Workspace, user refers to. |
userId required | string ID of User, whose files to delete |
from required | string <date-time> Start date (inclusive) |
to required | string <date-time> End date (exclusive) |
const fetch = require('node-fetch'); const query = new URLSearchParams({ company: 'string', userId: 'string', from: '2019-08-24T14:15:22Z', to: '2019-08-24T14:15:22Z' }).toString(); const resp = await fetch( `https://api2.timedoctor.com/api/1.0/files?${query}`, { method: 'DELETE', headers: { Authorization: 'YOUR_API_KEY_HERE' } } ); const data = await resp.text(); console.log(data);
{ }
Get files by type
apiKey
) type required | string File type |
company required | string ID of Company or Workspace, user refers to. |
user | string Comma-separated list of user IDs, whose files to get; self by default |
tag | string Comma-separated list of tag IDs, whose users' files to get |
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 which field to sort by, prepend it with "_" for descending sorting |
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 |
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);
{- "data": {
- "userId": "string",
- "date": "2019-08-24T14:15:22Z",
- "deviceId": "string",
- "numbers": [
- {
- "number": "string",
- "mime": "string",
- "deleted": true,
- "avgActivity": 0,
- "meta": {
- "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"
}, - "url": "string",
- "urls": {
- "original": "string",
- "small": "string"
}, - "entity": "file"
}
]
}, - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Get signed URL
apiKey
) type required | string File type |
date required | string <date-time> File date |
number required | integer File number |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": {
- "original": "string",
- "small": "string"
}
}
Ensure file entry
apiKey
) type required | string File type |
date required | string <date-time> File date |
number required | integer File number |
company required | string ID of Company or Workspace, user refers to. |
contentType | string MIME type of file |
blur | boolean Blurred image |
chunkId | string <full-date> Time chunk the file was created in |
clicks | integer <int32> |
movements | integer <int32> |
keys | integer <int32> |
period | integer <int32> |
imageSize | integer <int32> |
imageMd5 | string |
createdAt | string <full-date> Time the file was created |
h | integer <int32> |
w | integer <int32> |
projectId | string |
taskId | string |
screenNumber | integer <int32> |
type | string |
{- "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"
}
{- "data": { }
}
Delete file entry
apiKey
) type required | string File type |
date required | string <date-time> File date |
number required | integer File number |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": { }
}
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
Resolve categories by IDs
apiKey
) company required | string ID of Company or Workspace, user refers to. |
ids required | string Comma-separated list of Category IDs to resolve |
const fetch = require('node-fetch'); const query = new URLSearchParams({ company: 'string', ids: 'string' }).toString(); const resp = await fetch( `https://api2.timedoctor.com/api/1.0/categories/resolve?${query}`, { method: 'GET', headers: { Authorization: 'YOUR_API_KEY_HERE' } } ); const data = await resp.text(); console.log(data);
{- "data": [
- {
- "scope": "global",
- "id": "string",
- "entity": "string",
- "name": "string",
- "score": 0
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Get list of used categories in company
apiKey
) company | string If specified, ID of Company or Workspace, user refers to. If omitted, the operation refers to global |
global-unrated | string If specified, returns only items which unrated both in company and in global scopes |
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 which field to sort by, prepend it with "_" for descending sorting |
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" |
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);
{- "data": [
- {
- "scope": "global",
- "id": "string",
- "entity": "string",
- "name": "string",
- "score": 0
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Set category on company
apiKey
) company | string If specified, ID of Company or Workspace, user refers to. If omitted, the operation refers to global |
id | string Category ID |
entity | string Entity class |
name | string Entity name |
score | number Score as number 2 to 4 or null |
standardActiveSecRatio | number number in 0...1, used to override the standard active-to-total seconds ratio, used to calculate average activity per app |
{- "id": "string",
- "entity": "string",
- "name": "string",
- "score": 0,
- "standardActiveSecRatio": 0
}
{- "data": { }
}
Get list of used categories by user
apiKey
) userId required | string ID of User |
company required | string ID of Company or Workspace, user refers to. |
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 which field to sort by, prepend it with "_" for descending sorting |
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" |
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);
{- "data": {
- "scope": "global",
- "id": "string",
- "entity": "string",
- "name": "string",
- "score": 0
}
}
Set category on user
apiKey
) userId required | string ID of User |
company required | string ID of Company or Workspace, user refers to. |
id required | string Category ID |
entity required | string Entity class |
name required | string Entity name |
score | number Score as number 2 to 4 or null |
{- "id": "string",
- "entity": "string",
- "name": "string",
- "score": 0
}
{- "data": { }
}
Get a count of un-used categories in company
apiKey
) const fetch = require('node-fetch'); const resp = await fetch( `https://api2.timedoctor.com/api/1.0/categories/unrated-count`, { method: 'GET', headers: { Authorization: 'YOUR_API_KEY_HERE' } } ); const data = await resp.text(); console.log(data);
{- "data": {
- "unratedCatsCount": "string"
}, - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Create a group (tag)
apiKey
) company required | string ID of Company or Workspace, user refers to. |
name | string Group (Tag) name |
description | string Group (Tag) description |
{- "name": "string",
- "description": "string"
}
{- "data": {
- "id": "string",
- "name": "string",
- "creatorId": "string",
- "deleted": true,
- "readOnly": true,
- "managers": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "modifiedAt": "2019-08-24T14:15:22Z"
}
}
Get details of a group (tag)
apiKey
) tagId required | string ID of Group (Tag) |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": {
- "id": "string",
- "name": "string",
- "creatorId": "string",
- "deleted": true,
- "readOnly": true,
- "managers": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "modifiedAt": "2019-08-24T14:15:22Z"
}
}
Modify details of a group (tag)
apiKey
) tagId required | string ID of Group (Tag) |
company required | string ID of Company or Workspace, user refers to. |
name | string Group (Tag) name |
description | string Group (Tag) description |
active | boolean Is group (tag) active? Not active means archived |
{- "name": "string",
- "description": "string",
- "active": true
}
{- "data": { }
}
Delete a group (tag)
apiKey
) tagId required | string ID of Group (Tag) |
company required | string ID of Company or Workspace, user refers to. |
deleted | string Operate on an archived group (tag) |
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);
{- "data": { }
}
Add a manager to a group (tag)
apiKey
) tagId required | string ID of Group (Tag) |
company required | string ID of Company or Workspace, user refers to. |
userId required | string ID of the group manager |
{- "userId": "string"
}
{- "data": { }
}
Remove a manager from a group (tag)
apiKey
) tagId required | string ID of Group (Tag) |
userId required | string ID of the group manager |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": { }
}
Make a user a group member
apiKey
) userId required | string ID of User ( |
company required | string ID of Company or Workspace, user refers to. |
tagId | string ID of Tag |
{- "tagId": "string"
}
{- "data": { }
}
Remove a user as a group member
apiKey
) userId required | string ID of User ( |
tagId required | string ID of Tag |
company required | string ID of Company or Workspace, user refers to. |
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);
{ }
Schedules are returned by a stream. If you request a really large amount of data, it is best to connect the response to a stream handler. Requesting long ranges with large data over HTTP will have a large amount data get dumped as the request handler will assemble the entire stream of data into an array before showing you any response.
apiKey
) company required | string ID of Company or Workspace, user refers to. |
user | string Comma-separated list of user IDs |
from required | string The start time of the schedule |
to required | string The end time of the schedule |
work-range | number The work range of the schedule |
leave-type | string If specified, comma-separated list of leave types to resolve |
approved | string Approved/Disapprved schedules |
resolve-names | boolean Default: false include reviewer name & user name |
include-auto-approved | boolean Default: true include auto approved edit time records |
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 which field to sort by, prepend it with "_" for descending sorting |
filter[start] | string "string" -- exact match |
filter[leaveType] | string "string" -- exact match |
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', 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);
{- "data": [
- {
- "id": "string",
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "minimumHours": 0,
- "userId": "string",
- "leaveType": "string",
- "approved": "string",
- "reason": "string",
- "reviewedAt": "2019-08-24T14:15:22Z",
- "reviewerId": "string",
- "createdBy": "string",
- "reviewerName": "string",
- "userName": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "time": 0
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Payload for work schedules. The API streams the responses. Over HTTP, the connection might hangup if you send too many schedules. If you have large schedules to send, split the schedules and send them in chunks. Send about 30k (approximately 1 year schedule for 100 users) per chunk.
Ensure you sent only valid schedules in a serial order. The API will throw an
error if an invalid schedule is set or the schedule is not in a serial order or
if an invalid schedule is included.
Hint: to add single shift, please set duplicate the "from" and "to" in query params
from array in body
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from required | string The start time of the schedule |
to required | string The end time of the schedule |
userId required | string Id of the user who has the schedule |
schedules required | Array of Array of strings An array of tuples in the format [startTime, endTime, minimumHours, leaveType, reason]. Minimum hours and leaveType are optional |
[- {
- "userId": "string",
- "schedules": [
- [
- "2000-01-01T10:00:00.000Z",
- "2000-01-01T18:00:00.000Z",
- 4,
- "paidLeave",
- "sick"
]
]
}
]
{- "data": [
- {
- "id": "string",
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "minimumHours": 0,
- "userId": "string",
- "leaveType": "string",
- "approved": "string",
- "reason": "string",
- "reviewedAt": "2019-08-24T14:15:22Z",
- "reviewerId": "string",
- "createdBy": "string",
- "reviewerName": "string",
- "userName": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "time": 0
}
], - "ignored": [
- {
- "id": "string",
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "minimumHours": 0,
- "userId": "string",
- "leaveType": "string",
- "approved": "string",
- "reason": "string",
- "reviewedAt": "2019-08-24T14:15:22Z",
- "reviewerId": "string",
- "createdBy": "string",
- "reviewerName": "string",
- "userName": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "time": 0
}
]
}
Get a single schedule
apiKey
) id required | string id of the work schedule |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": {
- "id": "string",
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "minimumHours": 0,
- "userId": "string",
- "leaveType": "string",
- "approved": "string",
- "reason": "string",
- "reviewedAt": "2019-08-24T14:15:22Z",
- "reviewerId": "string",
- "createdBy": "string",
- "reviewerName": "string",
- "userName": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "time": 0
}
}
Update a single schedule
apiKey
) id required | string id of the work schedule |
company required | string ID of Company or Workspace, user refers to. |
approved required | string Approve/Disapproved the leave type schedule |
{- "approved": "pending"
}
{- "data": {
- "id": "string",
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "minimumHours": 0,
- "userId": "string",
- "leaveType": "string",
- "approved": "string",
- "reason": "string",
- "reviewedAt": "2019-08-24T14:15:22Z",
- "reviewerId": "string",
- "createdBy": "string",
- "reviewerName": "string",
- "userName": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "time": 0
}
}
Delete a single schedule
apiKey
) id required | string id of the work schedule |
company required | string ID of Company or Workspace, user refers to. |
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);
{ }
Get work-schedules issues for Executive Dashboard widgets
apiKey
) company required | string ID of Company or Workspace, user refers to. |
user | string Comma-separated list of user IDs or special value |
tag | string Comma-separated list of tag IDs |
from required | string The start time of the schedule |
to required | string The end time of the schedule |
group-by | string Group by field |
all-users-tag | string include allUserTagId into results |
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);
{- "data": [
- {
- "userId": "string",
- "userName": "string",
- "currentTagId": "string",
- "currentTagName": "string",
- "issues": 0,
- "shifts": 0,
- "ratio": 0
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
total leave count and approved leave count
apiKey
) company required | string ID of Company or Workspace, user refers to. |
user | string Comma-separated list of user IDs |
from required | string The start time of the schedule |
to required | string The end time of the schedule |
work-range | number The work range of the schedule |
leave-type | string If specified, comma-separated list of leave types to resolve |
approved | string Approved/Disapprved schedules |
resolve-names | boolean Default: false include reviewer name & user name |
include-auto-approved | boolean Default: true include auto approved edit time records |
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 which field to sort by, prepend it with "_" for descending sorting |
filter[start] | string "string" -- exact match |
filter[leaveType] | string "string" -- exact match |
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', 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);
{- "data": [
- {
- "id": "string",
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "minimumHours": 0,
- "userId": "string",
- "leaveType": "string",
- "approved": "string",
- "reason": "string",
- "reviewedAt": "2019-08-24T14:15:22Z",
- "reviewerId": "string",
- "createdBy": "string",
- "reviewerName": "string",
- "userName": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "time": 0
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
get user notifications
apiKey
) company required | string ID of Company or Workspace, user refers to. |
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 which field to sort by, prepend it with "_" for descending sorting |
filter[name] | string "string" -- starts with |
filter[active] | boolean boolean value |
filter[notifyType] | string "string" -- exact match |
filter[recipientId] | string "string" -- exact match |
filter[user] | string "string" -- exact match |
filter[pricingPlan] | string "string" -- exact match |
filter[isDEN] | boolean boolean value |
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);
{- "data": [
- {
- "_id": "string",
- "name": "string",
- "notifyType": "daily",
- "condType": "string",
- "condValue": "string",
- "scope": "workspace",
- "dataIds": [
- "string"
], - "daysApplicable": [
- 0
], - "active": true,
- "recipientIds": [
- "string"
]
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Create user notification
apiKey
) company required | string ID of Company or Workspace, user refers to. |
object |
{- "notification": {
- "name": "string",
- "notifyType": "daily",
- "condType": "string",
- "condValue": "string",
- "scope": "workspace",
- "dataIds": [
- "string"
], - "daysApplicable": [
- 0
], - "active": true,
- "recipientIds": [
- "string"
]
}
}
{- "data": {
- "_id": "string",
- "name": "string",
- "notifyType": "daily",
- "condType": "string",
- "condValue": "string",
- "scope": "workspace",
- "dataIds": [
- "string"
], - "daysApplicable": [
- 0
], - "active": true,
- "recipientIds": [
- "string"
]
}
}
get notification details
apiKey
) notificationId required | string ID of notification |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": {
- "_id": "string",
- "name": "string",
- "notifyType": "daily",
- "condType": "string",
- "condValue": "string",
- "scope": "workspace",
- "dataIds": [
- "string"
], - "daysApplicable": [
- 0
], - "active": true,
- "recipientIds": [
- "string"
]
}
}
Update user notification
apiKey
) notificationId required | string ID of notification |
company required | string ID of Company or Workspace, user refers to. |
object |
{- "notification": {
- "name": "string",
- "notifyType": "daily",
- "condType": "string",
- "condValue": "string",
- "scope": "workspace",
- "dataIds": [
- "string"
], - "daysApplicable": [
- 0
], - "active": true
}
}
{- "data": {
- "_id": "string",
- "name": "string",
- "notifyType": "daily",
- "condType": "string",
- "condValue": "string",
- "scope": "workspace",
- "dataIds": [
- "string"
], - "daysApplicable": [
- 0
], - "active": true,
- "recipientIds": [
- "string"
]
}
}
Subscribe user notification
apiKey
) notificationId required | string ID of notification |
company required | string ID of Company or Workspace, user refers to. |
recipientIds required | Array of strings List of notification recipient ids |
{- "recipientIds": [
- "string"
]
}
{- "data": {
- "_id": "string",
- "name": "string",
- "notifyType": "daily",
- "condType": "string",
- "condValue": "string",
- "scope": "workspace",
- "dataIds": [
- "string"
], - "daysApplicable": [
- 0
], - "active": true,
- "recipientIds": [
- "string"
]
}
}
Subscribe user notification
apiKey
) notificationId required | string ID of notification |
company required | string ID of Company or Workspace, user refers to. |
recipientIds required | Array of strings List of notification recipient ids |
{- "recipientIds": [
- "string"
]
}
{- "data": {
- "_id": "string",
- "name": "string",
- "notifyType": "daily",
- "condType": "string",
- "condValue": "string",
- "scope": "workspace",
- "dataIds": [
- "string"
], - "daysApplicable": [
- 0
], - "active": true,
- "recipientIds": [
- "string"
]
}
}
get breaks
apiKey
) company required | string ID of Company or Workspace, user refers to. |
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 which field to sort by, prepend it with "_" for descending sorting |
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 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 which field to sort by, prepend it with "_" for descending sorting |
filter[keyphrase] | string A keyphrase for searching by keywords |
assigned | boolean return only the breaks assigned to the user |
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);
{- "data": [
- {
- "_id": "string",
- "name": "string",
- "type": "paid",
- "active": true,
- "public": true,
- "access": [
- "string"
], - "scope": "user",
- "breakLimit": 1
}
], - "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Create break
apiKey
) company required | string ID of Company or Workspace, user refers to. |
name required | string Name of the break |
type required | string Type of break |
active | boolean Whether the break is active |
public | boolean Is the break access without limitation |
access | Array of strings IDs of users or tags to allow access to |
scope | string Scope of access fields |
breakLimit | integer [ 1 .. 1440 ] Break limit in minutes (max 24 hours). |
{- "name": "string",
- "type": "paid",
- "active": true,
- "public": true,
- "access": [
- "string"
], - "scope": "user",
- "breakLimit": 1
}
{- "data": {
- "_id": "string",
- "name": "string",
- "type": "paid",
- "active": true,
- "public": true,
- "access": [
- "string"
], - "scope": "user",
- "breakLimit": 1
}
}
get break details
apiKey
) breakId required | string ID of break |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": {
- "_id": "string",
- "name": "string",
- "type": "paid",
- "active": true,
- "public": true,
- "access": [
- "string"
], - "scope": "user",
- "breakLimit": 1
}
}
Update break
apiKey
) breakId required | string ID of break |
company required | string ID of Company or Workspace, user refers to. |
name required | string Name of the break |
type required | string Type of break |
active | boolean Whether the break is active |
public | boolean Is the break access without limitation |
access | Array of strings IDs of users or tags to allow access to |
scope | string Scope of access fields |
breakLimit | integer [ 1 .. 1440 ] Break limit in minutes (max 24 hours). |
{- "name": "string",
- "type": "paid",
- "active": true,
- "public": true,
- "access": [
- "string"
], - "scope": "user",
- "breakLimit": 1
}
{- "data": {
- "_id": "string",
- "name": "string",
- "type": "paid",
- "active": true,
- "public": true,
- "access": [
- "string"
], - "scope": "user",
- "breakLimit": 1
}
}
delete break
apiKey
) breakId required | string ID of break |
company required | string ID of Company or Workspace, user refers to. |
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);
{ }
Get list of user payrolls
apiKey
) company required | string ID of Company or Workspace, user refers to. |
from | string <date> Starting date of stats for payroll |
to | string <date> Ending date of stats for payroll |
tag | string Tag IDs |
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);
{- "data": [ ],
- "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Modify payroll details of a user
apiKey
) userId required | string ID of User |
company required | string ID of Company or Workspace, user refers to. |
id required | string User ID |
currency | string Currency ID (f.x. USD) |
adjustment | number Absolute adjustment value |
payRate | number Pay rate multiplier |
payMethod | string Payment method ID string, if enabled in payroll company setting |
payIdentifier | number Total time in seconds |
hourlyLimit | number Hourly limit in hours |
hourlyLimitRange | string Eg => weekday, period, or perday |
{- "id": "string",
- "currency": "string",
- "adjustment": 0,
- "payRate": 0,
- "payMethod": "string",
- "payIdentifier": 0,
- "hourlyLimit": 0,
- "hourlyLimitRange": "string"
}
{- "data": { }
}
Clear payroll details of a user
apiKey
) userId required | string ID of User |
company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": { }
}
Modify payroll details of a list of users
apiKey
) company required | string ID of Company or Workspace, user refers to. |
id required | string User ID |
currency | string Currency ID (f.x. USD) |
adjustment | number Absolute adjustment value |
payRate | number Pay rate multiplier |
payMethod | string Payment method ID string, if enabled in payroll company setting |
payIdentifier | number Total time in seconds |
hourlyLimit | number Hourly limit in hours |
hourlyLimitRange | string Eg => weekday, period, or perday |
{- "id": "string",
- "currency": "string",
- "adjustment": 0,
- "payRate": 0,
- "payMethod": "string",
- "payIdentifier": 0,
- "hourlyLimit": 0,
- "hourlyLimitRange": "string"
}
{- "data": { }
}
Get payroll settings for company
apiKey
) company required | string ID of Company or Workspace, user refers to. |
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);
{- "data": [ ],
- "page": {
- "cur": "string",
- "next": "string",
- "limit": 0,
- "totalCount": 0
}
}
Modify payroll settings of a company
apiKey
) company required | string ID of Company or Workspace, user refers to. |
transferWise required | boolean TransferWise enabled |
transferWiseCurrency required | string TransferWise source currency |
payoneer required | boolean Payoneer enabled |
paypal required | boolean PayPal Mass Payouts enabled |
bitWage required | boolean BitWAGE enabled |
quickBooks | boolean QuickBooks enabled |
gusto required | boolean Gusto enabled |
adp required | boolean ADP enabled |
adpCompanyCode required | string ADP Company Code |
adpMaxHours | number ADP max hours |
adpIncludeUserNames required | boolean ADP include user names |
{- "transferWise": true,
- "transferWiseCurrency": "string",
- "payoneer": true,
- "paypal": true,
- "bitWage": true,
- "quickBooks": true,
- "gusto": true,
- "adp": true,
- "adpCompanyCode": "string",
- "adpMaxHours": 0,
- "adpIncludeUserNames": true
}
{- "data": { }
}