Timesheet API (1.0.0)

Download OpenAPI specification:

The Timesheet REST API provides comprehensive functionality for creating, retrieving, updating, and deleting time tracking data.

Key Features

  • Time Entry Management: Create, update, and delete time entries
  • Project Management: Organize time entries by projects and clients
  • Reporting: Generate detailed time reports across various dimensions
  • User Management: Control access and permissions for team members

Use Cases

This API is ideal for integrating Timesheet with:

  • Project management systems
  • Accounting and invoicing software
  • Custom dashboards and reporting tools
  • Third-party productivity applications

Authentication

All API requests require authentication using either:

  • OAuth2 Bearer Token: For user-authorized applications
  • API Key: For server-to-server integrations

Rate Limiting

API requests are limited to 100 requests per minute per API key.

Oauth2 Authentication

OAuth 2.0 Authentication

timesheet.io implements the OAuth 2.0 protocol for secure authentication and authorization. This industry-standard protocol enables third-party applications to obtain limited access to user accounts without exposing sensitive credentials.

Available Grant Types

timesheet.io supports the following OAuth 2.0 grant types:

  • Authorization Code Flow: For web applications and mobile apps
  • Client Credentials: For server-to-server authentication
  • Refresh Token: For maintaining long-term access

Security Requirements

  • All API requests must use HTTPS
  • Access tokens must be sent in the Authorization header: Authorization: Bearer {token}
  • Tokens expire after 24 hours
  • Store client secrets securely and never expose them in client-side code
  • Implement PKCE for mobile applications

Registering Your Application

Step 1: Create Application

Register your application at timesheet.io Developer Portal

Step 2: Obtain Credentials

After registration, you'll receive:

  • client_id: Your application's public identifier
  • client_secret: Your application's secret key (keep this secure!)
  • redirect_urls: List of allowed callback URLs

GET https://api.timesheet.io/oauth2/auth

Authorization Code Flow

1. Authorization Request

Redirect users to our authorization endpoint:

GET https://api.timesheet.io/oauth2/auth

Required Parameters

Parameter Description
client_id Your application's client ID
redirect_uri Must match one of your registered redirect URLs
response_type Use 'code' for authorization code flow

2. Authorization Response

After user consent, we redirect to your redirect_uri with:

  • code: Authorization code

3. Token Exchange

Exchange the authorization code for tokens:

POST https://api.timesheet.io/oauth2/token
Content-Type: application/x-www-form-urlencoded

Required Parameters

Parameter Description
client_id Your application's client ID
client_secret Your application's secret key
grant_type Use 'authorization_code'
code The authorization code received
redirect_uri Must match the original request

Response

{
  "access_token": "eyJ0eXAi...",
  "token_type": "Bearer",
  "expires_in": 86400,
  "refresh_token": "def502..."
}

Client Credentials Flow

For server-to-server authentication without user context:

POST https://api.timesheet.io/oauth2/token
Content-Type: application/x-www-form-urlencoded

Required Parameters

Parameter Description
client_id Your application's client ID
client_secret Your application's secret key
grant_type Use 'client_credentials'

API Key Authentication

API Key Authentication

timesheet.io supports API Key authentication as an alternative to OAuth 2.0 for programmatic access to your timesheet data. API Keys provide a simpler authentication method for server-to-server integrations and automated scripts.

Security Requirements

  • All API requests must use HTTPS
  • API Keys must be sent in the Authorization header: Authorization: ApiKey {api_key}
  • API Keys are long-lived but can be revoked at any time
  • Store API Keys securely and never expose them in client-side code or version control
  • Use separate API Keys for different applications or environments

Generating API Keys

Step 1: Access Developer Settings

Navigate to the Developer section in your Timesheet account at https://my.timesheet.io/development

Step 2: Create New API Key

Click "Create API Key" and provide:

  • Name: A descriptive name for identification (e.g., "Production Integration", "Backup Script")
  • Permissions: Scope of access for the API key (read-only, full access, etc.)
  • Expiration: Optional expiration date for enhanced security

Step 3: Secure Your API Key

After creation, your API Key will be displayed only once:

  • Format: ts_{prefix}.{secret} (e.g., ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f)
  • Copy and store immediately - it cannot be retrieved later
  • Store securely in environment variables or secure credential storage

Making Authenticated Requests

Using ApiKey Authorization Format

Include your API Key in the Authorization header with the ApiKey scheme:

curl -H "Authorization: ApiKey ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f" \
     https://api.timesheet.io/v1/projects

JavaScript Example

const apiKey = 'ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f';

fetch('https://api.timesheet.io/v1/tasks', {
  headers: {
    'Authorization': `ApiKey ${apiKey}`,
    'Content-Type': 'application/json'
  }
})
.then(response => response.json())
.then(data => console.log(data));

Python Example

import requests

api_key = 'ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f'
headers = {
    'Authorization': f'ApiKey {api_key}',
    'Content-Type': 'application/json'
}

response = requests.get('https://api.timesheet.io/v1/timer', headers=headers)
data = response.json()

API Key Management

Listing API Keys

View all your API Keys in the developer settings to monitor usage and manage access.

Revoking API Keys

Immediately revoke API Keys that are:

  • No longer needed
  • Potentially compromised
  • Associated with decommissioned applications

Best Practices

  • Rotation: Regularly rotate API Keys (recommended: every 90 days)
  • Principle of Least Privilege: Use read-only keys when write access isn't needed
  • Environment Separation: Use different keys for development, staging, and production
  • Monitoring: Monitor API Key usage for suspicious activity

Security Considerations

Key Storage

  • Never hardcode API Keys in source code
  • Use environment variables or secure credential management systems
  • Avoid logging API Keys in application logs

Access Control

  • Set expiration dates for enhanced security
  • Regularly audit API Key usage and permissions

Error Handling

API Key authentication errors return standard HTTP status codes:

  • 401 Unauthorized: Invalid or expired API Key
  • 403 Forbidden: API Key lacks required permissions
  • 429 Too Many Requests: Rate limit exceeded

Pagination

Pagination

When you're making calls to the API, there'll be a lot of results to return. For that reason, we paginate the results to make sure responses are easier to handle.

Pagination Parameters

Parameter Description
limit Controls how many results per page (1-100). Default is 100.
page Specifies which page of results to retrieve (1-based). Default is 1.

Recommended Usage

We recommend you to set the limit parameter in every request to ensure you know how many results per page you'll get.

Examples

  • If you set the limit to 10 and page to 1 you will get the results from 1-10.
  • If you set the limit to 10 and page to 2, you'll get the results from 11-20.

Response Format

All paginated responses include metadata about the total count, current page, and pagination settings:

{
  "items": [...],
  "count": 42,
  "page": 1,
  "limit": 10,
  "sort": "created",
  "order": "desc"
}

Webhook

Webhooks

Webhooks allow you to receive real-time notifications about events in your Timesheet account. Instead of constantly polling our API, you can register a webhook URL that we'll call whenever specific events occur.

Event Types

The API supports notifications for various events including:

  • timer.start - When a timer is started
  • timer.stop - When a timer is stopped
  • task.create - When a new task is created
  • task.update - When a task is updated
  • project.create - When a new project is created

Creating Webhooks

To create a webhook, provide a target URL and the event type you want to monitor. The target URL must be a valid HTTPS URL that responds to our verification request.

Webhook Payloads

Webhook payloads are sent as JSON in the request body. Each payload includes:

  • event - The event type that triggered the webhook
  • timestamp - When the event occurred
  • data - The full resource object related to the event

Security Considerations

  • Verify the authenticity of webhook requests by validating the signature in the headers
  • Implement retry logic for temporary failures
  • Respond with 2xx status codes to acknowledge receipt

List webhooks

Retrieves a paginated list of webhooks belonging to the authenticated user. The list can be sorted and ordered using the provided parameters.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
sort
string
Default: "created"
Enum: "created" "lastUpdate" "target" "event"

Field to sort by

order
string
Default: "desc"
Enum: "asc" "desc"

Sort direction

page
integer <int64> >= 1
Default: 1
Example: page=1

Page number (1-based pagination)

limit
integer <int64> [ 1 .. 100 ]
Default: 20
Example: limit=20

Number of items per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create webhook

Creates a new webhook for the authenticated user. The webhook will send notifications to the specified target URL when the specified event occurs. The webhook URL must be a valid HTTP or HTTPS URL.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Webhook creation data containing target URL and event type

target
string
event
string

Responses

Request samples

Content type
{
  • "target": "string",
  • "event": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "target": "string",
  • "event": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0
}

Get webhook

Retrieves a specific webhook by its unique identifier. Only webhooks owned by the authenticated user can be retrieved.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: wh-123456789

Unique identifier of the webhook

Responses

Response samples

Content type
{
  • "id": "string",
  • "target": "string",
  • "event": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0
}

Update webhook

Updates an existing webhook identified by its unique ID. Only webhooks owned by the authenticated user can be updated. This endpoint allows changing the target URL and event type.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: wh-123456789

Unique identifier of the webhook to update

Request Body schema:
required

Webhook update data containing the new target URL and/or event type

target
string
event
string
deleted
boolean

Responses

Request samples

Content type
{
  • "target": "string",
  • "event": "string",
  • "deleted": true
}

Response samples

Content type
{
  • "id": "string",
  • "target": "string",
  • "event": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0
}

Remove webhook

Permanently deletes a webhook identified by its unique ID. Only webhooks owned by the authenticated user can be deleted. This operation cannot be undone.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: wh-123456789

Unique identifier of the webhook to delete

Responses

Search webhooks

Searches for webhooks matching the specified criteria. This endpoint provides more advanced filtering options than the list endpoint, such as filtering by event type. Only webhooks owned by the authenticated user will be included in results.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters including pagination, sorting, and filtering criteria

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
event
string
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "event": "string",
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Profile

Profile Management

The Profile API allows you to manage user profiles, including personal information, preferences, and account settings.

Key Capabilities

  • Retrieve current user profile information
  • Update profile details like name, email, and image
  • Manage account deletion and data privacy

Account Management

Profiles can be associated with multiple organizations and teams. The APIs provide ways to view and manage these relationships.

Data Privacy

The API provides endpoints specifically for data privacy compliance, allowing users to exercise their right to delete personal data or their entire account.

Delete user account

Completely deletes the user's account and all associated data. This action cannot be undone. Users with active subscriptions cannot delete their accounts.

Authorizations:
bearerAuthapiKeyAuth

Responses

Delete user data

Deletes all personal data associated with the current user, but preserves the account itself. This is for data privacy requests.

Authorizations:
bearerAuthapiKeyAuth

Responses

Get current user profile

Retrieves the profile information of the authenticated user. This is typically called upon login to get user details and subscription status.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
referrer
string

The referrer URL where the user came from, used for analytics

Responses

Response samples

Content type
{
  • "permission": 0,
  • "email": "string",
  • "imageUrl": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "language": "string",
  • "countryIso": "string",
  • "country": "string",
  • "ipAddress": "string",
  • "referrer": "string",
  • "newsletter": true,
  • "gdprConsent": true,
  • "invited": true,
  • "activatedTeams": true,
  • "activated": true,
  • "needsSetup": true,
  • "user": "string",
  • "lastUpdate": 0,
  • "subscriptionId": "string",
  • "expires": 0,
  • "status": 0,
  • "valid": true,
  • "expired": true,
  • "product": "string",
  • "trial": true,
  • "planBusiness": true,
  • "planPro": true,
  • "planPlus": true,
  • "planBasic": true,
  • "member": true,
  • "personalSubscriptionActive": true,
  • "organizationSubscriptionActive": true,
  • "basic": true,
  • "pro": true,
  • "plus": true,
  • "validProfile": true,
  • "validAndActivated": true,
  • "admin": true,
  • "displayName": "string",
  • "initials": "string",
  • "createdAt": "2019-08-24T14:15:22Z"
}

Update current user profile

Updates the profile information of the authenticated user. This can include personal details, preferences, and settings.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

The updated profile information

firstname
string
lastname
string
email
string
imageUrl
string
newsletter
boolean

Responses

Request samples

Content type
{
  • "firstname": "string",
  • "lastname": "string",
  • "email": "string",
  • "imageUrl": "string",
  • "newsletter": true
}

Response samples

Content type
{
  • "permission": 0,
  • "email": "string",
  • "imageUrl": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "language": "string",
  • "countryIso": "string",
  • "country": "string",
  • "ipAddress": "string",
  • "referrer": "string",
  • "newsletter": true,
  • "gdprConsent": true,
  • "invited": true,
  • "activatedTeams": true,
  • "activated": true,
  • "needsSetup": true,
  • "user": "string",
  • "lastUpdate": 0,
  • "subscriptionId": "string",
  • "expires": 0,
  • "status": 0,
  • "valid": true,
  • "expired": true,
  • "product": "string",
  • "trial": true,
  • "planBusiness": true,
  • "planPro": true,
  • "planPlus": true,
  • "planBasic": true,
  • "member": true,
  • "personalSubscriptionActive": true,
  • "organizationSubscriptionActive": true,
  • "basic": true,
  • "pro": true,
  • "plus": true,
  • "validProfile": true,
  • "validAndActivated": true,
  • "admin": true,
  • "displayName": "string",
  • "initials": "string",
  • "createdAt": "2019-08-24T14:15:22Z"
}

Settings

User Settings

The Settings API lets users customize their Timesheet experience by managing preferences and defaults.

Available Settings

Setting Description
theme UI theme preference (light/dark)
timezone User's preferred timezone
language Interface language
currency Preferred currency for rates and amounts
dateFormat How dates should be displayed
timeFormat 12h or 24h time format
firstDay First day of week (0=Sunday, 1=Monday)

Timer Settings

Special settings control the timer behavior:

  • timerRounding - Round timer times to nearest interval
  • timerRoundingType - How to round (up, down, nearest)
  • pauseRounding - Round pause times to nearest interval

Get current user settings

Retrieves all settings for the currently authenticated user. Returns preferences like theme, timezone, language, and display formats.

Authorizations:
bearerAuthapiKeyAuth

Responses

Response samples

Content type
{
  • "theme": "string",
  • "timezone": "string",
  • "language": "string",
  • "currency": "string",
  • "distance": "string",
  • "dateFormat": "string",
  • "timeFormat": "string",
  • "durationFormat": "string",
  • "csvSeparator": "string",
  • "slotDuration": 0,
  • "snapDuration": 0,
  • "firstDay": 0,
  • "defaultTaskDuration": 0,
  • "defaultBreakDuration": 0,
  • "entriesPerPage": 0,
  • "timerRounding": 0,
  • "timerRoundingType": 0,
  • "timerEditView": true,
  • "pauseRounding": 0,
  • "pauseRoundingType": 0,
  • "pauseEditView": true,
  • "showRelatives": true,
  • "weeklySummary": true,
  • "monthlySummary": true,
  • "autofillProjectSelection": true,
  • "lastUpdate": 0
}

Update current user settings

Updates settings for the currently authenticated user. This includes preferences like theme, timezone, language, currency, display formats, and timer behaviors.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Settings object containing user preferences to update

theme
string
timezone
string
language
string
currency
string
distance
string
dateFormat
string
timeFormat
string
durationFormat
string
csvSeparator
string
slotDuration
integer <int32>
snapDuration
integer <int32>
firstDay
integer <int32>
defaultTaskDuration
integer <int32>
defaultBreakDuration
integer <int32>
entriesPerPage
integer <int32>
timerRounding
integer <int32>
timerRoundingType
integer <int32>
timerEditView
boolean
pauseRounding
integer <int32>
pauseRoundingType
integer <int32>
pauseEditView
boolean
showRelatives
boolean
weeklySummary
boolean
monthlySummary
boolean
autofillProjectSelection
boolean
lastUpdate
integer <int64>

Responses

Request samples

Content type
{
  • "theme": "string",
  • "timezone": "string",
  • "language": "string",
  • "currency": "string",
  • "distance": "string",
  • "dateFormat": "string",
  • "timeFormat": "string",
  • "durationFormat": "string",
  • "csvSeparator": "string",
  • "slotDuration": 0,
  • "snapDuration": 0,
  • "firstDay": 0,
  • "defaultTaskDuration": 0,
  • "defaultBreakDuration": 0,
  • "entriesPerPage": 0,
  • "timerRounding": 0,
  • "timerRoundingType": 0,
  • "timerEditView": true,
  • "pauseRounding": 0,
  • "pauseRoundingType": 0,
  • "pauseEditView": true,
  • "showRelatives": true,
  • "weeklySummary": true,
  • "monthlySummary": true,
  • "autofillProjectSelection": true,
  • "lastUpdate": 0
}

Response samples

Content type
{
  • "theme": "string",
  • "timezone": "string",
  • "language": "string",
  • "currency": "string",
  • "distance": "string",
  • "dateFormat": "string",
  • "timeFormat": "string",
  • "durationFormat": "string",
  • "csvSeparator": "string",
  • "slotDuration": 0,
  • "snapDuration": 0,
  • "firstDay": 0,
  • "defaultTaskDuration": 0,
  • "defaultBreakDuration": 0,
  • "entriesPerPage": 0,
  • "timerRounding": 0,
  • "timerRoundingType": 0,
  • "timerEditView": true,
  • "pauseRounding": 0,
  • "pauseRoundingType": 0,
  • "pauseEditView": true,
  • "showRelatives": true,
  • "weeklySummary": true,
  • "monthlySummary": true,
  • "autofillProjectSelection": true,
  • "lastUpdate": 0
}

Organization

Organization Management

The Organization API handles the creation and management of organizational entities that represent businesses or departments. Organizations provide an overarching structure above teams for administrative and billing purposes.

Organization Structure

Organizations include:

  • Basic information (name, description, etc.)
  • Branding elements (image, color)
  • Membership with permission levels
  • Subscription and billing information

Permission Management

Organizations use a permission system:

  • Admin: Full control over the organization
  • Invoicing: Permission to manage invoices and documents
  • Billing: Permission to view and manage billing information

Member Management

The API provides endpoints to:

  • Add members to an organization
  • Update member permissions
  • Remove members
  • List and search organization members

Team Association

Organizations can contain multiple teams:

  • Teams inherit organization settings
  • Organization members can access teams based on permissions
  • Teams can be created within the organization context

Add organization member

Adds a user to an organization with specified permissions. If the user already exists in the system, they will be added to the organization. If not, an invitation will be prepared. Requires admin permission in the organization. Permission flags control what actions the user can perform in the organization - 'admin' grants full control, 'invoicing' allows invoice management, and 'billing' allows access to billing information.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
organizationId
required
string
Example: org-12345

Organization ID

Request Body schema:
required

Member creation details including email, name, and permission flags

email
string
firstname
string
lastname
string
invoicing
boolean
billing
boolean
admin
boolean

Responses

Request samples

Content type
{
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "invoicing": true,
  • "billing": true,
  • "admin": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "displayName": "string",
  • "initials": "string"
}

Get organization (Admin)

Retrieves detailed information about a specific organization by its ID. This admin-only endpoint allows system administrators to view any organization regardless of their membership. Contains additional system-level information not available in the standard endpoint.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: org-12345

Organization ID

Responses

Response samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "subscription": {
    },
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "permission": {
    }
}

Admin: Search organizations

Allows a system administrator to search all organizations in the system regardless of their membership. Supports advanced filtering and pagination. Similar to the standard search endpoint but with no permission restrictions and additional admin-only search criteria.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Admin search parameters including sort, order, pagination, and filters with additional admin-only fields

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

List organizations

Retrieves a paginated list of organizations accessible to the current user. The list includes organizations where the user has direct permissions or permissions through team membership. Results can be sorted and paginated.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
sort
string
Default: "permission"
Enum: "alpha" "permission" "created"
Example: sort=alpha

Sort field

order
string
Default: "asc"
Enum: "asc" "desc"
Example: order=asc

Sort order direction

page
required
integer <int64> >= 1
Default: 1
Example: page=1

Page number (1-based)

limit
required
integer <int64> [ 1 .. 100 ]
Default: 20
Example: limit=20

Number of items per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create organization

Creates a new organization with the current user as the administrator. The user must be authorized to create organizations based on their account type and subscription. The organization will be initially created with the current user as the only member with admin permissions.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Organization details for creation including name and optional properties. Name is required.

name
string
description
string
image
string
color
integer <int32>

Responses

Request samples

Content type
{
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0
}

Response samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "subscription": {
    },
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "permission": {
    }
}

Get organization

Retrieves detailed information about a specific organization by its ID. The user must have permissions to access the organization, either directly or through team membership. Returns a 401 if the organization doesn't exist or the user doesn't have access.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: org-12345

Organization ID

Responses

Response samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "subscription": {
    },
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "permission": {
    }
}

Update organization

Updates an existing organization's details. Only users with administrator permissions in the organization can update it. Supports partial updates - only fields included in the request will be modified.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: org-12345

Organization ID

Request Body schema:
required

Updated organization details. Only included fields will be updated.

name
string
description
string
image
string
color
integer <int32>

Responses

Request samples

Content type
{
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0
}

Response samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "subscription": {
    },
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "permission": {
    }
}

Remove organization

Soft deletes an organization by its ID. The organization will be marked as deleted but data will be preserved. Only organization administrators can perform this operation. Any associated permissions, subscriptions, and references from teams and documents will be handled appropriately.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: org-12345

Organization ID

Responses

Get organization member

Retrieves details of a specific member's permissions within an organization. Includes user profile information and permission flags. The permission ID is unique to the organization-user relationship. Requires the user to be a member of the organization with appropriate permissions.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
organizationId
required
string
Example: org-12345

Organization ID

permissionId
required
string
Example: perm-67890

Permission ID (unique identifier for the user-organization relationship)

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "displayName": "string",
  • "initials": "string"
}

Update organization member/permission

Updates a specific user's permission flags within an organization. Can modify admin, invoicing, and billing permission flags. Requires admin access in the organization. Cannot remove the last admin of an organization - at least one admin must remain.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
organizationId
required
string
Example: org-12345

Organization ID

permissionId
required
string
Example: perm-67890

Permission ID (unique identifier for the user-organization relationship)

Request Body schema:
required

Updated permission flags (admin, invoicing, billing)

invoicing
boolean
billing
boolean
admin
boolean

Responses

Request samples

Content type
{
  • "invoicing": true,
  • "billing": true,
  • "admin": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "displayName": "string",
  • "initials": "string"
}

Remove organization member

Removes a user's membership/permission from an organization (soft delete). The user will lose access to the organization and its resources. Requires admin access in the organization. Cannot remove the last admin of an organization - at least one admin must remain.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
organizationId
required
string
Example: org-12345

Organization ID

permissionId
required
string
Example: perm-67890

Permission ID (unique identifier for the user-organization relationship)

Responses

List organization members

Retrieves a paginated list of all members (users) within a specific organization with their permission details. Supports filtering by status (active/deleted) and searching by name or email. The user must have permission to view the organization's members.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
organizationId
required
string
Example: org-12345

Organization ID

Request Body schema:
required

Member list parameters including sort, order, pagination, search, and status filters

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
deleted
boolean
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "deleted": true,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Search organizations

Searches organizations accessible to the current user based on the provided parameters. Supports advanced filtering and pagination. Uses the same parameter structure as the list operation but allows more complex search criteria through the request body.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters including sort, order, pagination, and custom filters

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Team

Team Management

The Team API enables managing teams and their members, crucial for collaborative time tracking and project management.

Team Structure

Each team can have multiple members with different permission levels:

  • Owner - Full control over the team
  • Manager - Can manage projects and members
  • Member - Can track time on team projects

Teams and Organizations

Teams can be associated with organizations, which provide billing and administrative structure. A team must belong to an organization or to an individual user.

Member Management

The API provides capabilities to:

  • Add members to a team
  • Update member permissions
  • Remove members
  • Search for potential team members (colleagues)

Activate teams

Activates the team feature for the current user and creates a default team with the specified name. If team feature is already activated, only updates the user profile.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
teamName
required
string
Example: My Team

Name for the default team to be created

Responses

Response samples

Content type
{
  • "permission": 0,
  • "email": "string",
  • "imageUrl": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "language": "string",
  • "countryIso": "string",
  • "country": "string",
  • "ipAddress": "string",
  • "referrer": "string",
  • "newsletter": true,
  • "gdprConsent": true,
  • "invited": true,
  • "activatedTeams": true,
  • "activated": true,
  • "needsSetup": true,
  • "user": "string",
  • "lastUpdate": 0,
  • "subscriptionId": "string",
  • "expires": 0,
  • "status": 0,
  • "valid": true,
  • "expired": true,
  • "product": "string",
  • "trial": true,
  • "planBusiness": true,
  • "planPro": true,
  • "planPlus": true,
  • "planBasic": true,
  • "member": true,
  • "personalSubscriptionActive": true,
  • "organizationSubscriptionActive": true,
  • "basic": true,
  • "pro": true,
  • "plus": true,
  • "validProfile": true,
  • "validAndActivated": true,
  • "admin": true,
  • "displayName": "string",
  • "initials": "string",
  • "createdAt": "2019-08-24T14:15:22Z"
}

List teams

Retrieves a paginated list of teams accessible to the current user. Supports sorting and optional statistics.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
statistics
boolean
Default: false

Include team statistics like project and member counts

sort
string
Default: "permission"
Enum: "alpha" "permission" "created"

Field to sort by

order
string
Default: "asc"
Enum: "asc" "desc"

Sort direction

page
integer <int64> >= 1
Default: 1

Page number (1-based pagination)

limit
integer <int64> [ 1 .. 100 ]
Default: 20

Number of items per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create team

Creates a new team with the current user as owner. The team name must be unique for the user.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Team creation details including name, description, and other properties

organizationId
string
name
string
description
string
image
string
color
integer <int32>
projectSalaryVisibility
integer <int32>

Responses

Request samples

Content type
{
  • "organizationId": "string",
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "projectSalaryVisibility": 0
}

Response samples

Content type
{
  • "id": "string",
  • "organization": {
    },
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "projectSalaryVisibility": 0,
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "permission": {
    },
  • "projects": 0,
  • "members": 0,
  • "projectSalaryVisible": true
}

Get team member

Retrieves detailed information about a specific team member by their unique identifier within a team.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
teamId
required
string
Example: b0742508-7291-45e1-b32a-29f03edd55f9

Unique identifier of the team

id
required
string
Example: 7a1c6e32-89f4-42d3-a5ea-e6c2120ec5c0

Unique identifier of the team member to retrieve

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "employeeId": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "projectRegistrations": [
    ],
  • "displayName": "string",
  • "initials": "string"
}

Update team member

Updates an existing team member's information, including permission level. Only team owners can change permissions to owner level.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
teamId
required
string
Example: b0742508-7291-45e1-b32a-29f03edd55f9

Unique identifier of the team

id
required
string
Example: 7a1c6e32-89f4-42d3-a5ea-e6c2120ec5c0

Unique identifier of the team member to update

Request Body schema:
required

Updated team member details including permission level

firstname
string
lastname
string
employeeId
string
activate
boolean
object (TeamPermissionDto)
Array of objects (TeamMemberProjectRegistrationDto)

Responses

Request samples

Content type
{
  • "firstname": "string",
  • "lastname": "string",
  • "employeeId": "string",
  • "activate": true,
  • "permission": {
    },
  • "projectRegistrations": [
    ]
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "employeeId": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "projectRegistrations": [
    ],
  • "displayName": "string",
  • "initials": "string"
}

Remove team member

Removes a member from a team. Team owners can remove any member, and managers can remove regular members.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
teamId
required
string
Example: b0742508-7291-45e1-b32a-29f03edd55f9

Unique identifier of the team

id
required
string
Example: 7a1c6e32-89f4-42d3-a5ea-e6c2120ec5c0

Unique identifier of the team member to remove

Responses

Get colleagues

Retrieves a list of colleagues (other team members) for the current user across all their teams, or filtered by a specific team. Used for user selection in UI components. Supports pagination and search.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Parameters for filtering colleagues by team, project, search terms, and pagination settings

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
organizationId
string
status
string
teamId
string
projectId
string
withoutMe
boolean
withoutProjectMembers
boolean
lastActivity
boolean
deleted
boolean
userIds
Array of strings
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "organizationId": "string",
  • "status": "string",
  • "teamId": "string",
  • "projectId": "string",
  • "withoutMe": true,
  • "withoutProjectMembers": true,
  • "lastActivity": true,
  • "deleted": true,
  • "userIds": [
    ],
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Get team

Retrieves detailed information about a specific team by its unique identifier.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: b0742508-7291-45e1-b32a-29f03edd55f9

Unique identifier of the team to retrieve

Responses

Response samples

Content type
{
  • "id": "string",
  • "organization": {
    },
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "projectSalaryVisibility": 0,
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "permission": {
    },
  • "projects": 0,
  • "members": 0,
  • "projectSalaryVisible": true
}

Update team

Updates an existing team's information. Only team owners can update team details.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: b0742508-7291-45e1-b32a-29f03edd55f9

Unique identifier of the team to update

Request Body schema:
required

Updated team details

organizationId
string
name
string
description
string
image
string
color
integer <int32>
projectSalaryVisibility
integer <int32>
deleted
boolean

Responses

Request samples

Content type
{
  • "organizationId": "string",
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "projectSalaryVisibility": 0,
  • "deleted": true
}

Response samples

Content type
{
  • "id": "string",
  • "organization": {
    },
  • "name": "string",
  • "description": "string",
  • "image": "string",
  • "color": 0,
  • "projectSalaryVisibility": 0,
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "permission": {
    },
  • "projects": 0,
  • "members": 0,
  • "projectSalaryVisible": true
}

Remove team

Soft-deletes a team and all associated data (rates, tags, projects, etc). Only team owners can delete teams.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: b0742508-7291-45e1-b32a-29f03edd55f9

Unique identifier of the team to remove

Responses

List team members

Retrieves a paginated list of team members for a specific team. Supports filtering by status and search terms.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
teamId
required
string
Example: b0742508-7291-45e1-b32a-29f03edd55f9

Unique identifier of the team

Request Body schema:
required

Parameters for filtering, pagination, and sorting team members

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
organizationId
string
status
string
teamId
string
projectId
string
withoutMe
boolean
withoutProjectMembers
boolean
lastActivity
boolean
deleted
boolean
userIds
Array of strings
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "organizationId": "string",
  • "status": "string",
  • "teamId": "string",
  • "projectId": "string",
  • "withoutMe": true,
  • "withoutProjectMembers": true,
  • "lastActivity": true,
  • "deleted": true,
  • "userIds": [
    ],
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Register team member

Adds a new member to a team. Team owners and managers can add new members. Provides different levels of permissions: Member (1), Manager (2), Owner (3).

Authorizations:
bearerAuthapiKeyAuth
path Parameters
teamId
required
string
Example: b0742508-7291-45e1-b32a-29f03edd55f9

Unique identifier of the team to add a member to

Request Body schema:
required

Team member details including user identifier and permission level

teamId
string
email
string
firstname
string
lastname
string
employeeId
string
object (TeamPermissionDto)
Array of objects (TeamMemberProjectRegistrationDto)

Responses

Request samples

Content type
{
  • "teamId": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "employeeId": "string",
  • "permission": {
    },
  • "projectRegistrations": [
    ]
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "employeeId": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "projectRegistrations": [
    ],
  • "displayName": "string",
  • "initials": "string"
}

Search teams

Performs an advanced search for teams based on supplied parameters, with pagination and sorting options.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters including filters, pagination, and sorting options

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
organizationId
string
statistics
boolean
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "organizationId": "string",
  • "statistics": true,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Project

Project Management

The Project API handles the creation and management of projects, which are the fundamental containers for time tracking activities.

Project Structure

Projects can include:

  • Basic details (title, description, etc.)
  • Team association
  • Client/employer information
  • Color coding for visual identification
  • Members with different access levels

Project Members

Project membership controls who can track time on a project. Members can have different roles:

  • Owner - Full control over the project
  • Manager - Can manage tasks and other members
  • Member - Can track time on the project

Project Settings

Projects have configurable settings like:

  • Default billable status for tasks
  • Default rate for time entries
  • Salary visibility controls

Update project members

Updates the list of members for a specific project. Can add new members, update existing ones, or remove members not included in the list. Only users with manager or owner permissions can update members. When adding new members, they must already be members of the associated team. Each member can be assigned different roles (owner, manager, member) and salary rates. The project owner cannot be removed or downgraded through this endpoint.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
projectId
required
string
Example: proj-12345

Unique identifier of the project to update members for

Request Body schema:
required

List of project member registrations. Members not included in this list will be removed from the project. Each registration includes user ID, role, and salary settings.

Array
id
string
role
string
user
string
salaryActivated
boolean
salary
number <double>

Responses

Request samples

Content type
[
  • {
    }
]

Add project member

Adds a new member to a project. Project owners and managers can add new members. The new member must already be a member of the associated team if the project belongs to a team. Provides different levels of permissions: Member (1), Manager (2), Owner (3).

Authorizations:
bearerAuthapiKeyAuth
path Parameters
projectId
required
string
Example: proj-12345

Unique identifier of the project to add a member to

Request Body schema:
required

Project member details including user identifier and permission level

projectId
string
email
string
userId
string
object (ProjectPermissionDto)
salaryActivated
boolean
salary
number <double>

Responses

Request samples

Content type
{
  • "projectId": "string",
  • "email": "string",
  • "userId": "string",
  • "permission": {
    },
  • "salaryActivated": true,
  • "salary": 0.1
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "salaryActivated": true,
  • "salary": 0.1,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "displayName": "string",
  • "initials": "string"
}

Batch add project members

Adds multiple members to a project in a single operation. This is useful for bulk imports or when setting up a new project with multiple team members. All members must already be part of the associated team if the project belongs to a team. If any member in the batch fails validation, the entire operation will fail.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
projectId
required
string
Example: proj-12345

Unique identifier of the project to add members to

Request Body schema:
required

List of project member creation objects

Array
projectId
string
email
string
userId
string
object (ProjectPermissionDto)
salaryActivated
boolean
salary
number <double>

Responses

Request samples

Content type
[
  • {
    }
]

Batch remove project members

Removes multiple members from a project in a single operation. This is useful for cleanup operations or when removing access for multiple users at once. The project owner cannot be removed through this endpoint. If any member removal fails, the entire operation will fail.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
projectId
required
string
Example: proj-12345

Unique identifier of the project to remove members from

Request Body schema:
required

List of member IDs to remove from the project

Array
string

Responses

Request samples

Content type
[
  • "string"
]

List projects

Retrieves a paginated list of projects. Results can be filtered by team and status, and sorted by different criteria. Optional statistics can be included for each project, containing information about duration, expenses, and salaries. This endpoint supports pagination with 1-based page numbering.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
teamId
string
Example: teamId=team-123

Filter projects by team ID

status
string
Default: "active"
Enum: "all" "active" "inactive"
Example: status=active

Filter projects by status

statistics
boolean
Default: false
Example: statistics=true

Include detailed project statistics like duration, expenses, and salaries

sort
string
Default: "alpha"
Enum: "alpha" "alphaNum" "client" "duration" "created" "status"
Example: sort=created

Sort field for the results

order
string
Default: "asc"
Enum: "asc" "desc"
Example: order=desc

Sort direction

page
integer <int64> >= 1
Default: 1
Example: page=1

Page number for pagination (1-based)

limit
integer <int64> [ 1 .. 100 ]
Default: 20
Example: limit=20

Number of items per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create project

Creates a new project with the provided details. The authenticated user becomes the owner of the project and is automatically added as a project member with full permissions. If a team ID is provided, the project will be associated with that team and visible to team members according to their permissions.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Project data to create a new project. Must include title and can include team association, employer, description, and other settings.

title
string
description
string
employer
string
office
string
color
integer <int32>
taskDefaultBillable
boolean
taskDefaultRateId
string
archived
boolean
salaryVisibility
integer <int32>
salary
number <double>
teamId
string

Responses

Request samples

Content type
{
  • "title": "string",
  • "description": "string",
  • "employer": "string",
  • "office": "string",
  • "color": 0,
  • "taskDefaultBillable": true,
  • "taskDefaultRateId": "string",
  • "archived": true,
  • "salaryVisibility": 0,
  • "salary": 0.1,
  • "teamId": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "title": "string",
  • "description": "string",
  • "employer": "string",
  • "office": "string",
  • "color": 0,
  • "taskDefaultBillable": true,
  • "archived": true,
  • "salaryVisibility": 0,
  • "salary": 0.1,
  • "team": {
    },
  • "permission": {
    },
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expenses": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1,
  • "titleAndClient": "string",
  • "salaryVisible": true
}

Get project details

Retrieves detailed information about a specific project by its ID. The response includes project metadata, settings, and statistics if the user has appropriate permissions. Project visibility depends on team membership and permission settings.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: proj-12345

Unique identifier of the project to retrieve

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "title": "string",
  • "description": "string",
  • "employer": "string",
  • "office": "string",
  • "color": 0,
  • "taskDefaultBillable": true,
  • "archived": true,
  • "salaryVisibility": 0,
  • "salary": 0.1,
  • "team": {
    },
  • "permission": {
    },
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expenses": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1,
  • "titleAndClient": "string",
  • "salaryVisible": true
}

Update project

Updates an existing project with the provided details. Only the project owner, team owner, or users with manager permissions can update project details. Fields not included in the request will retain their current values. The project ID cannot be changed, and team association changes may affect member permissions.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: proj-12345

Unique identifier of the project to update

Request Body schema:
required

Updated project data. Any fields not included will remain unchanged.

title
string
description
string
employer
string
office
string
color
integer <int32>
taskDefaultBillable
boolean
taskDefaultRateId
string
archived
boolean
salaryVisibility
integer <int32>
salary
number <double>
deleted
boolean

Responses

Request samples

Content type
{
  • "title": "string",
  • "description": "string",
  • "employer": "string",
  • "office": "string",
  • "color": 0,
  • "taskDefaultBillable": true,
  • "taskDefaultRateId": "string",
  • "archived": true,
  • "salaryVisibility": 0,
  • "salary": 0.1,
  • "deleted": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "title": "string",
  • "description": "string",
  • "employer": "string",
  • "office": "string",
  • "color": 0,
  • "taskDefaultBillable": true,
  • "archived": true,
  • "salaryVisibility": 0,
  • "salary": 0.1,
  • "team": {
    },
  • "permission": {
    },
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expenses": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1,
  • "titleAndClient": "string",
  • "salaryVisible": true
}

Remove project

Soft deletes a project and all its associated data including tasks, expenses, pauses, notes, and project members. Only the project owner, team owner, or users with appropriate permissions can delete projects. This is a soft delete operation - data remains in the database but is marked as deleted and won't appear in regular queries. Administrators can restore deleted projects if needed.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: proj-12345

Unique identifier of the project to delete

Responses

Get project member

Retrieves detailed information about a specific project member by their unique identifier within a project.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
projectId
required
string
Example: proj-12345

Unique identifier of the project

id
required
string
Example: member-456

Unique identifier of the project member to retrieve

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "salaryActivated": true,
  • "salary": 0.1,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "displayName": "string",
  • "initials": "string"
}

Update project member

Updates an existing project member's information, including permission level and salary settings. Only project owners can change permissions to owner level.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
projectId
required
string
Example: proj-12345

Unique identifier of the project

id
required
string
Example: member-456

Unique identifier of the project member to update

Request Body schema:
required

Updated project member details including permission level and salary settings

object (ProjectPermissionDto)
salaryActivated
boolean
salary
number <double>

Responses

Request samples

Content type
{
  • "permission": {
    },
  • "salaryActivated": true,
  • "salary": 0.1
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "email": "string",
  • "firstname": "string",
  • "lastname": "string",
  • "imageUrl": "string",
  • "deleted": true,
  • "salaryActivated": true,
  • "salary": 0.1,
  • "permission": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "displayName": "string",
  • "initials": "string"
}

Remove project member

Removes a member from a project. Project owners can remove any member, and managers can remove regular members. The project owner cannot be removed through this endpoint.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
projectId
required
string
Example: proj-12345

Unique identifier of the project

id
required
string
Example: member-456

Unique identifier of the project member to remove

Responses

List project members

Retrieves a paginated list of members associated with a specific project. Supports filtering by status and search terms. The response includes each member's user ID, role, permissions, and salary rates (if visible based on permissions). Project members can have different roles such as owner, manager, or member, with corresponding permission levels. The authenticated user must have at least member-level access to the project to view its members.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
projectId
required
string
Example: proj-12345

Unique identifier of the project to get members for

Request Body schema:
required

Parameters for filtering, pagination, and sorting project members

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
projectId
string
status
string
withoutMe
boolean
userIds
Array of strings
withDeleted
boolean
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "projectId": "string",
  • "status": "string",
  • "withoutMe": true,
  • "userIds": [
    ],
  • "withDeleted": true,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Search projects

Performs an advanced search for projects using the provided parameters. Supports filtering by team, status, date ranges, and other criteria. Returns a paginated list of projects matching the search criteria. This endpoint offers more sophisticated filtering capabilities than the standard list endpoint. The search results respect user permissions - only projects visible to the user will be returned.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters including team filters, project filters, date ranges, and pagination settings. Supports complex filtering criteria beyond the basic list endpoint.

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
teamId
string
status
string
statistics
boolean
teamIds
Array of strings
projectIds
Array of strings
taskStartDate
string
taskEndDate
string
taskRateId
string
taskType
string
taskFilter
string
taskUserIds
Array of strings
empty
boolean
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "teamId": "string",
  • "status": "string",
  • "statistics": true,
  • "teamIds": [
    ],
  • "projectIds": [
    ],
  • "taskStartDate": "string",
  • "taskEndDate": "string",
  • "taskRateId": "string",
  • "taskType": "string",
  • "taskFilter": "string",
  • "taskUserIds": [
    ],
  • "empty": true,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Rate

Billing Rates

The Rate API manages billing rates that can be applied to time entries. Rates determine how time is valued for billing purposes.

Rate Structure

Each rate includes:

  • A title or name
  • A multiplier factor (e.g., 1.0 for standard, 1.5 for overtime)
  • An optional extra charge amount

Rate Scope

Rates can be:

  • Personal (available only to the creating user)
  • Team-wide (available to all team members)

Rate Application

Rates are applied to tasks during creation or can be modified later. Projects can set default rates to be applied to new tasks automatically.

List rates

Retrieves a paginated list of billing rates with optional filtering by team, project and status. Results can be sorted by different criteria and are subject to user permission checks. Users can only see rates they have access to based on team membership.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
teamId
string
Example: teamId=team123

Filter rates by team ID

projectId
string
Example: projectId=project456

Filter rates by project ID - if provided, will also resolve the associated teamId

status
string
Default: "active"
Enum: "all" "active" "inactive"
Example: status=active

Filter rates by status

sort
string
Default: "alpha"
Enum: "alpha" "status" "created"
Example: sort=alpha

Field to sort results by

order
string
Default: "asc"
Enum: "asc" "desc"
Example: order=asc

Sort order direction

page
integer <int64> >= 1
Default: 1
Example: page=1

Page number (1-based pagination)

limit
integer <int64> [ 1 .. 100 ]
Default: 20
Example: limit=20

Number of items per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create rate

Creates a new billing rate. The rate can be associated with a team if the teamId is provided, otherwise it will be a personal rate. User must have appropriate team permissions to create team rates. The rate includes a title, billing factor and optional extra charge.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Rate data for creation

title
string
factor
number <double>
extra
number <double>
enabled
boolean
archived
boolean
teamId
string

Responses

Request samples

Content type
{
  • "title": "string",
  • "factor": 0.1,
  • "extra": 0.1,
  • "enabled": true,
  • "archived": true,
  • "teamId": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "title": "string",
  • "factor": 0.1,
  • "extra": 0.1,
  • "enabled": true,
  • "archived": true,
  • "team": {
    }
}

Get rate

Retrieves a specific billing rate by its unique identifier. User must have appropriate permissions to view the rate. For team rates, user must be a team member with appropriate permissions.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: rate789

Unique identifier of the rate

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "title": "string",
  • "factor": 0.1,
  • "extra": 0.1,
  • "enabled": true,
  • "archived": true,
  • "team": {
    }
}

Update rate

Updates an existing billing rate. Only fields included in the request will be modified. User must have appropriate permissions to modify the rate. For team rates, user must be a team manager or owner.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: rate789

Unique identifier of the rate to update

Request Body schema:
required

Updated rate data

title
string
factor
number <double>
extra
number <double>
enabled
boolean
archived
boolean
deleted
boolean

Responses

Request samples

Content type
{
  • "title": "string",
  • "factor": 0.1,
  • "extra": 0.1,
  • "enabled": true,
  • "archived": true,
  • "deleted": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "title": "string",
  • "factor": 0.1,
  • "extra": 0.1,
  • "enabled": true,
  • "archived": true,
  • "team": {
    }
}

Remove rate

Soft-deletes a billing rate by marking it as deleted. Associated tasks will have their rate references cleared. User must have appropriate permissions to delete the rate. For team rates, user must be a team manager or owner.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: rate789

Unique identifier of the rate to remove

Responses

Search rates

Provides advanced search capabilities for rates with full filtering options. This endpoint accepts a RateListParams object that can include complex filtering criteria such as text search, team filtering, status filtering, and pagination options.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters for filtering rates

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
teamId
string
projectId
string
status
string
empty
boolean
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "teamId": "string",
  • "projectId": "string",
  • "status": "string",
  • "empty": true,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Tag

Task Categorization

The Tag API allows for creating and managing tags to categorize tasks. Tags provide a flexible way to organize time entries beyond project structure.

Tag Features

  • Color coding for visual identification
  • Team-wide or personal tags
  • Usage statistics to see how tags are utilized
  • Archive capability for infrequently used tags

Tag Management

Tags can be:

  • Created with a name and color
  • Updated to change name or color
  • Archived to hide from active selection
  • Deleted when no longer needed

Searching and Filtering

The API provides robust search capabilities to find tags by team, project, or usage status.

List tags

Retrieves a paginated list of tags. The results can be filtered by team, project and status. Optional statistics include usage data for each tag.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
teamId
string

Filter tags by team ID

projectId
string

Filter tags by project ID

status
string
Default: "active"
Enum: "all" "active" "inactive"

Filter tags by status

statistics
boolean
Default: false

Include usage statistics for each tag

sort
string
Default: "alpha"
Enum: "alpha" "status" "created"

Sort field

order
string
Default: "asc"
Enum: "asc" "desc"

Sort order direction

page
integer <int64> >= 1
Default: 1

Page number (1-based)

limit
integer <int64> [ 1 .. 100 ]
Default: 20

Number of items per page

Responses

Response samples

Content type
[
  • {
    }
]

Create tag

Creates a new tag. The tag can be associated with a team and have a color assigned. Tags are used to categorize tasks and can be used for filtering and reporting.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Tag data for creation

name
string
color
integer <int32>
archived
boolean
teamId
string

Responses

Request samples

Content type
{
  • "name": "string",
  • "color": 0,
  • "archived": true,
  • "teamId": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "name": "string",
  • "color": 0,
  • "archived": true,
  • "team": {
    },
  • "totalTime": 0
}

Get tag

Retrieves a specific tag by its ID. Includes all tag details and, if available, team information.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Tag ID

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "name": "string",
  • "color": 0,
  • "archived": true,
  • "team": {
    },
  • "totalTime": 0
}

Update tag

Updates an existing tag. Can modify tag name, color, and archived status. Requires appropriate team permissions if the tag is associated with a team.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Tag ID

Request Body schema:
required

Updated tag data

name
string
color
integer <int32>
archived
boolean
deleted
boolean

Responses

Request samples

Content type
{
  • "name": "string",
  • "color": 0,
  • "archived": true,
  • "deleted": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "lastUpdate": 0,
  • "created": 0,
  • "deleted": true,
  • "name": "string",
  • "color": 0,
  • "archived": true,
  • "team": {
    },
  • "totalTime": 0
}

Remove tag

Removes (soft-deletes) a tag by its ID. The tag will no longer appear in lists, but can potentially be restored by administrators. All tag associations with tasks will also be marked as deleted.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Tag ID

Responses

Search tags

Performs an advanced search for tags based on the provided parameters. Supports filtering by team, project, status, and search text. Results are paginated and can be sorted.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters including filters, pagination, and sorting

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
teamId
string
projectId
string
status
string
statistics
boolean
tagIds
Array of strings
empty
boolean
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "teamId": "string",
  • "projectId": "string",
  • "status": "string",
  • "statistics": true,
  • "tagIds": [
    ],
  • "empty": true,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Timer

Time Tracking

The Timer API provides endpoints for managing time tracking sessions. It allows starting, pausing, resuming, and stopping timers, as well as updating timer information.

Timer States

A timer can be in one of three states:

  • running - The timer is actively tracking time
  • paused - The timer is temporarily stopped (on break)
  • stopped - The timer is not active

Timer Operations

Operation Description
start Begin a new timing session
pause Temporarily stop the timer (for breaks)
resume Continue after a pause
stop End the timing session
update Modify timer details

Date/Time Handling

All timer operations accept and return ISO 8601 formatted dates and times. The timezone of the dates is determined by the user's settings.

Get current timer state

Retrieves the current timer state for the authenticated user. Returns information about the active timer including status (running, paused, stopped), associated task, and any active pause.

Authorizations:
bearerAuthapiKeyAuth

Responses

Response samples

Content type
{
  • "status": "string",
  • "user": "string",
  • "task": {
    },
  • "pause": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "paused": true,
  • "running": true,
  • "stopped": true
}

Pause the current timer

Pauses an active timing session. Creates a new pause record associated with the current task and sets the timer to paused state. Returns the updated timer information with pause details.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Timer pause parameters including pause start date/time

startDateTime
string
valid
boolean

Responses

Request samples

Content type
{
  • "startDateTime": "string",
  • "valid": true
}

Response samples

Content type
{
  • "status": "string",
  • "user": "string",
  • "task": {
    },
  • "pause": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "paused": true,
  • "running": true,
  • "stopped": true
}

Resume a paused timer

Resumes a paused timing session. Ends the associated pause with the specified end time and sets the timer back to running state. Returns the updated timer information.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Timer resume parameters including pause end date/time

endDateTime
string
valid
boolean

Responses

Request samples

Content type
{
  • "endDateTime": "string",
  • "valid": true
}

Response samples

Content type
{
  • "status": "string",
  • "user": "string",
  • "task": {
    },
  • "pause": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "paused": true,
  • "running": true,
  • "stopped": true
}

Start a new timer

Starts a new timing session for the authenticated user on the specified project. Creates a new task for the timer and sets the timer to running state. Returns the updated timer information.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Timer start parameters including project ID and start date/time

projectId
string
startDateTime
string
valid
boolean

Responses

Request samples

Content type
{
  • "projectId": "string",
  • "startDateTime": "string",
  • "valid": true
}

Response samples

Content type
{
  • "status": "string",
  • "user": "string",
  • "task": {
    },
  • "pause": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "paused": true,
  • "running": true,
  • "stopped": true
}

Stop the current timer

Ends an active timing session. Finalizes the associated task with the specified end time and ends any active pause. Sets the timer to stopped state and returns the updated timer information.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Timer stop parameters including end date/time

endDateTime
string
valid
boolean

Responses

Request samples

Content type
{
  • "endDateTime": "string",
  • "valid": true
}

Response samples

Content type
{
  • "status": "string",
  • "user": "string",
  • "task": {
    },
  • "pause": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "paused": true,
  • "running": true,
  • "stopped": true
}

Update the current timer

Updates an active timing session with new information. Can modify the task details of the currently running or paused timer. Returns the updated timer information.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Timer update parameters including task information and optional project changes

startDateTime
string
description
string
location
string
locationEnd
string
feeling
integer <int32>
typeId
integer <int32>
paid
boolean
billed
boolean
billable
boolean
phoneNumber
string
distance
number <double>

Responses

Request samples

Content type
{
  • "startDateTime": "string",
  • "description": "string",
  • "location": "string",
  • "locationEnd": "string",
  • "feeling": 0,
  • "typeId": 0,
  • "paid": true,
  • "billed": true,
  • "billable": true,
  • "phoneNumber": "string",
  • "distance": 0.1
}

Response samples

Content type
{
  • "status": "string",
  • "user": "string",
  • "task": {
    },
  • "pause": {
    },
  • "lastUpdate": 0,
  • "created": 0,
  • "paused": true,
  • "running": true,
  • "stopped": true
}

Task

Time Entry Management

The Task API provides endpoints to manage time entries, which represent specific periods of work on projects.

Task Components

Each task includes:

  • Project association
  • Start and end times
  • Description of work performed
  • Optional location information
  • Billing status (billable, paid, billed)
  • Optional classification tags

Associated Data

Tasks can have related:

  • Pauses (breaks during work)
  • Expenses (costs incurred)
  • Notes (comments or documentation)

Workflow States

Tasks track workflow state through flags:

  • billable - Whether the task can be billed
  • billed - Whether the task has been included in an invoice
  • paid - Whether payment has been received

List tasks

Retrieves a paginated list of tasks with optional sorting. The response includes task details, statistics, and performance metrics if requested.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
sort
string
Default: "dateTime"
Enum: "dateTime" "time" "created"

Field to sort by

order
string
Default: "desc"
Enum: "asc" "desc"

Sort direction

page
integer <int64> >= 1
Default: 1

Page number (1-based)

limit
integer <int64> [ 1 .. 100 ]
Default: 20

Number of items per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    },
  • "taskStatistic": {
    },
  • "currentPerformance": {
    },
  • "lastPerformance": {
    }
}

Create task

Creates a new task with the provided details. Required fields include project ID, start date/time, and description. Returns the created task with its assigned ID and metadata.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Task details for creation

projectId
string
description
string
location
string
locationEnd
string
startDateTime
string
endDateTime
string
feeling
integer <int32>
typeId
integer <int32>
paid
boolean
billed
boolean
billable
boolean
phoneNumber
string
distance
number <double>
rateId
string
todoId
string
signature
string
userId
string
tagIds
Array of strings

Responses

Request samples

Content type
{
  • "projectId": "string",
  • "description": "string",
  • "location": "string",
  • "locationEnd": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "feeling": 0,
  • "typeId": 0,
  • "paid": true,
  • "billed": true,
  • "billable": true,
  • "phoneNumber": "string",
  • "distance": 0.1,
  • "rateId": "string",
  • "todoId": "string",
  • "signature": "string",
  • "userId": "string",
  • "tagIds": [
    ]
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "running": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "location": "string",
  • "locationEnd": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "feeling": 0,
  • "typeId": 0,
  • "paid": true,
  • "billed": true,
  • "billable": true,
  • "phoneNumber": "string",
  • "distance": 0.1,
  • "signature": "string",
  • "project": {
    },
  • "todo": {
    },
  • "rate": {
    },
  • "member": {
    },
  • "invoiceId": "string",
  • "tags": [
    ],
  • "pauses": [
    ],
  • "expenses": [
    ],
  • "notes": [
    ],
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expensesTotal": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1,
  • "notesTotal": 0,
  • "salaryVisible": true
}

Get task

Retrieves detailed information about a specific task by its ID. The response includes all task properties, associated project details, tags, expenses, notes, and other related information.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Task identifier

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "running": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "location": "string",
  • "locationEnd": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "feeling": 0,
  • "typeId": 0,
  • "paid": true,
  • "billed": true,
  • "billable": true,
  • "phoneNumber": "string",
  • "distance": 0.1,
  • "signature": "string",
  • "project": {
    },
  • "todo": {
    },
  • "rate": {
    },
  • "member": {
    },
  • "invoiceId": "string",
  • "tags": [
    ],
  • "pauses": [
    ],
  • "expenses": [
    ],
  • "notes": [
    ],
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expensesTotal": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1,
  • "notesTotal": 0,
  • "salaryVisible": true
}

Update task

Updates an existing task with the provided details. All fields in the request body will overwrite existing values. Returns the updated task with all its properties.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Task identifier

Request Body schema:
required

Updated task details

projectId
string
description
string
location
string
locationEnd
string
startDateTime
string
endDateTime
string
feeling
integer <int32>
typeId
integer <int32>
paid
boolean
billed
boolean
billable
boolean
phoneNumber
string
distance
number <double>
rateId
string
todoId
string
signature
string
deleted
boolean
tagIds
Array of strings

Responses

Request samples

Content type
{
  • "projectId": "string",
  • "description": "string",
  • "location": "string",
  • "locationEnd": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "feeling": 0,
  • "typeId": 0,
  • "paid": true,
  • "billed": true,
  • "billable": true,
  • "phoneNumber": "string",
  • "distance": 0.1,
  • "rateId": "string",
  • "todoId": "string",
  • "signature": "string",
  • "deleted": true,
  • "tagIds": [
    ]
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "running": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "location": "string",
  • "locationEnd": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "feeling": 0,
  • "typeId": 0,
  • "paid": true,
  • "billed": true,
  • "billable": true,
  • "phoneNumber": "string",
  • "distance": 0.1,
  • "signature": "string",
  • "project": {
    },
  • "todo": {
    },
  • "rate": {
    },
  • "member": {
    },
  • "invoiceId": "string",
  • "tags": [
    ],
  • "pauses": [
    ],
  • "expenses": [
    ],
  • "notes": [
    ],
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expensesTotal": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1,
  • "notesTotal": 0,
  • "salaryVisible": true
}

Remove task

Permanently deletes a task and all its associated records (expenses, notes, pauses, tags). This operation cannot be undone.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Task identifier

Responses

Generate printable work record

Generates a PDF document containing a formatted work record for the specified task, including all details, times, expenses, and notes.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Task identifier

Responses

Search tasks

Searches for tasks based on the provided criteria. Allows filtering by date range, project, team, status, tags, and more. Returns paginated results with statistics.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters including filters, sorting, and pagination options

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
startDate
string
endDate
string
organizationId
string
teamId
string
projectId
string
todoId
string
rateId
string
documentId
string
type
string
filter
string
teamIds
Array of strings
projectIds
Array of strings
tagIds
Array of strings
taskIds
Array of strings
userIds
Array of strings
feelings
Array of integers <int32> [ items <int32 > ]
populatePauses
boolean
populateExpenses
boolean
populateNotes
boolean
populateTags
boolean
performance
boolean
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "startDate": "string",
  • "endDate": "string",
  • "organizationId": "string",
  • "teamId": "string",
  • "projectId": "string",
  • "todoId": "string",
  • "rateId": "string",
  • "documentId": "string",
  • "type": "string",
  • "filter": "string",
  • "teamIds": [
    ],
  • "projectIds": [
    ],
  • "tagIds": [
    ],
  • "taskIds": [
    ],
  • "userIds": [
    ],
  • "feelings": [
    ],
  • "populatePauses": true,
  • "populateExpenses": true,
  • "populateNotes": true,
  • "populateTags": true,
  • "performance": true,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    },
  • "taskStatistic": {
    },
  • "currentPerformance": {
    },
  • "lastPerformance": {
    }
}

Update task status

Updates the billing status of a task (billable, paid, billed). This focused update allows changing payment-related flags without modifying other task properties.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Task ID and status flags to update

id
string
status
integer <int32>
paid
boolean
notBillable
boolean
unpaid
boolean
notBilled
boolean
billed
boolean

Responses

Request samples

Content type
{
  • "id": "string",
  • "status": 0,
  • "paid": true,
  • "notBillable": true,
  • "unpaid": true,
  • "notBilled": true,
  • "billed": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "running": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "location": "string",
  • "locationEnd": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "feeling": 0,
  • "typeId": 0,
  • "paid": true,
  • "billed": true,
  • "billable": true,
  • "phoneNumber": "string",
  • "distance": 0.1,
  • "signature": "string",
  • "project": {
    },
  • "todo": {
    },
  • "rate": {
    },
  • "member": {
    },
  • "invoiceId": "string",
  • "tags": [
    ],
  • "pauses": [
    ],
  • "expenses": [
    ],
  • "notes": [
    ],
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expensesTotal": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1,
  • "notesTotal": 0,
  • "salaryVisible": true
}

Update task times

Updates the start and end times of a specific task. This is a focused update that only affects the time fields without changing other task properties.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Task ID and updated time values

id
string
start
string
end
string

Responses

Request samples

Content type
{
  • "id": "string",
  • "start": "string",
  • "end": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "running": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "location": "string",
  • "locationEnd": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "feeling": 0,
  • "typeId": 0,
  • "paid": true,
  • "billed": true,
  • "billable": true,
  • "phoneNumber": "string",
  • "distance": 0.1,
  • "signature": "string",
  • "project": {
    },
  • "todo": {
    },
  • "rate": {
    },
  • "member": {
    },
  • "invoiceId": "string",
  • "tags": [
    ],
  • "pauses": [
    ],
  • "expenses": [
    ],
  • "notes": [
    ],
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expensesTotal": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1,
  • "notesTotal": 0,
  • "salaryVisible": true
}

Pause

Break Tracking

The Pause API manages breaks during task execution. Pauses represent periods within a task where work was temporarily stopped.

Pause Structure

Each pause includes:

  • Association with a specific task
  • Start time
  • End time (or null if still ongoing)
  • Optional description

Pause Management

Pauses can be:

  • Created when a break begins
  • Updated to modify times or description
  • Ended when work resumes
  • Deleted if recorded incorrectly

Time Calculation

The system automatically calculates the duration of pauses and subtracts them from the total task time to determine actual working time.

List pauses

Retrieves a paginated list of pauses with sorting options. Filtered by task ID if provided. Results are paginated and can be sorted by various fields.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
taskId
string

Filter pauses by task ID. If not provided, all accessible pauses will be returned.

sort
string
Default: "date"
Enum: "date" "created"

Field to sort results by.

order
string
Default: "asc"
Enum: "asc" "desc"

Sort order direction.

page
integer <int64> >= 1
Default: 1

Page number for pagination. Pagination is 1-based (starts at 1).

limit
integer <int64> [ 1 .. 100 ]
Default: 20

Maximum number of items per page. Value must be between 1 and 100.

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create pause

Creates a new pause record with start and end times. A pause must be associated with a task and contains the time period when work was paused.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Pause data for creating a new pause. Must include taskId, startDateTime, and endDateTime.

description
string
startDateTime
string
endDateTime
string
taskId
string

Responses

Request samples

Content type
{
  • "description": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "taskId": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "running": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "task": {
    },
  • "member": {
    }
}

Get pause

Retrieves a specific pause by its unique identifier. Returns detailed information about the pause including associated task.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Unique identifier of the pause to retrieve.

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "running": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "task": {
    },
  • "member": {
    }
}

Update pause

Updates an existing pause with new information. Can modify pause times, description, or other properties.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Unique identifier of the pause to update.

Request Body schema:
required

New pause data for updating. Only provided fields will be updated.

description
string
startDateTime
string
endDateTime
string
deleted
boolean

Responses

Request samples

Content type
{
  • "description": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "deleted": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "running": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "startDateTime": "string",
  • "endDateTime": "string",
  • "task": {
    },
  • "member": {
    }
}

Remove pause

Deletes a pause record. This is typically a soft delete that marks the pause as deleted rather than removing it from the database.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Unique identifier of the pause to delete.

Responses

Search pauses

Advanced search for pauses with various filtering options. Provides more sophisticated search capabilities than the list endpoint.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters for filtering pauses. Can include task ID, date ranges, sorting options, and pagination.

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
taskId
string
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "taskId": "string",
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Expense

Expense Tracking

The Expense API manages costs incurred during work that need to be reimbursed or passed through to clients.

Expense Structure

Each expense includes:

  • Association with a specific task
  • Amount
  • Date/time
  • Description
  • Optional file attachment (receipt)
  • Refund status

File Attachments

Expenses can include file attachments such as receipts or invoices. The API provides endpoints to upload, download, and manage these files.

Refund Tracking

The refund status tracks whether expenses have been reimbursed to the user. This can be updated through dedicated status endpoints.

List expenses

Retrieves a paginated list of expenses. The list can be filtered by taskId and sorted by various criteria. Pagination is 1-based.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
taskId
string
Example: taskId=task-123

Task ID to filter expenses by

filter
string
Example: filter=unpaid

Filter expenses by status: 'all', 'paid', 'unpaid'

sort
string
Example: sort=date

Sort field: 'date' for sort by date, 'created' for sort by creation time. Default is date.

order
string
Example: order=desc

Sort order: 'asc' for ascending, 'desc' for descending. Default is asc.

page
integer <int32>
Example: page=1

Page number (1-based). Default is 1.

limit
integer <int32>
Example: limit=20

Number of items per page (1-100). Default is 20.

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create expense

Creates a new expense with the provided details. The expense will be associated with the task specified in the DTO.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Expense data for creation

description
string
dateTime
string
amount
number <double>
refunded
boolean
fileUri
string
fileName
string
taskId
string

Responses

Request samples

Content type
{
  • "description": "string",
  • "dateTime": "string",
  • "amount": 0.1,
  • "refunded": true,
  • "fileUri": "string",
  • "fileName": "string",
  • "taskId": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "dateTime": "string",
  • "amount": 0.1,
  • "refunded": true,
  • "fileUri": "string",
  • "fileName": "string",
  • "task": {
    },
  • "member": {
    },
  • "invoiceId": "string"
}

Get expense

Retrieves detailed information about a specific expense by its ID.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: exp-123

Expense ID

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "dateTime": "string",
  • "amount": 0.1,
  • "refunded": true,
  • "fileUri": "string",
  • "fileName": "string",
  • "task": {
    },
  • "member": {
    },
  • "invoiceId": "string"
}

Update expense

Updates an existing expense with the provided details. Only the fields included in the DTO will be updated.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: exp-123

Expense ID

Request Body schema:
required

Updated expense data

description
string
dateTime
string
amount
number <double>
refunded
boolean
deleted
boolean
fileUri
string
fileName
string

Responses

Request samples

Content type
{
  • "description": "string",
  • "dateTime": "string",
  • "amount": 0.1,
  • "refunded": true,
  • "deleted": true,
  • "fileUri": "string",
  • "fileName": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "dateTime": "string",
  • "amount": 0.1,
  • "refunded": true,
  • "fileUri": "string",
  • "fileName": "string",
  • "task": {
    },
  • "member": {
    },
  • "invoiceId": "string"
}

Remove expense

Deletes an expense by marking it as deleted (soft delete). Associated data like file attachments are preserved but no longer accessible.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: exp-123

Expense ID

Responses

Get expense file URL

Retrieves a signed URL for downloading the file attachment associated with the expense. The URL is time-limited and secure.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: exp-123

Expense ID

Responses

Response samples

Content type
{
  • "url": "string"
}

Search expenses

Performs an advanced search for expenses based on the provided search parameters. Supports filtering by multiple criteria, date ranges, and full-text search.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters for expenses

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
startDate
string
endDate
string
taskId
string
documentId
string
filter
string
projectIds
Array of strings
taskIds
Array of strings
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "startDate": "string",
  • "endDate": "string",
  • "taskId": "string",
  • "documentId": "string",
  • "filter": "string",
  • "projectIds": [
    ],
  • "taskIds": [
    ],
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Update expense refund status

Updates the refund status of an expense. This is typically used to mark expenses as refunded after payment has been processed.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Expense status update data containing ID and refund status

id
string
refunded
boolean

Responses

Request samples

Content type
{
  • "id": "string",
  • "refunded": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "description": "string",
  • "dateTime": "string",
  • "amount": 0.1,
  • "refunded": true,
  • "fileUri": "string",
  • "fileName": "string",
  • "task": {
    },
  • "member": {
    },
  • "invoiceId": "string"
}

Note

Work Documentation

The Note API manages text annotations and file attachments related to tasks. Notes provide a way to document work details, decisions, or observations.

Note Structure

Each note includes:

  • Association with a specific task
  • Text content
  • Date/time
  • Optional file attachment

File Management

Notes can include file attachments. The API provides endpoints to upload, download, and manage these files.

Printing and Export

Notes can be exported as PDF documents for reporting or sharing with clients or team members.

List notes with pagination and sorting

Retrieves a paginated list of notes with optional filtering by task ID and customizable sorting. Supports both ascending and descending order. Notes are filtered based on the authenticated user's permissions and can be limited to notes for a specific task.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
taskId
string

ID of the task to filter notes by. If provided, only notes for this task will be returned.

sort
string
Default: "date"
Enum: "date" "created"
Example: sort=date

Field to sort the notes by

order
string
Default: "asc"
Enum: "asc" "desc"

Sort order direction

page
integer <int64> >= 1
Default: 1
Example: page=1

Page number for pagination

limit
integer <int64> [ 1 .. 100 ]
Default: 20
Example: limit=20

Maximum number of notes to return per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create a new note

Creates a new note entry in the system. The note can be associated with a task and include text content and optional file attachments. Users can only create notes for tasks they have permission to access. The created note will inherit permissions from its associated task.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Note data for creation

text
string
dateTime
string
uri
string
driveId
string
taskId
string

Responses

Request samples

Content type
{
  • "text": "string",
  • "dateTime": "string",
  • "uri": "string",
  • "driveId": "string",
  • "taskId": "string"
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "text": "string",
  • "dateTime": "string",
  • "uri": "string",
  • "driveId": "string",
  • "task": {
    },
  • "member": {
    }
}

Get note by ID

Retrieves detailed information about a specific note using its unique identifier. Returns the complete note object including metadata, content, and file information if available. Users can only access notes they have permission to view based on project membership and role.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Unique identifier of the note to retrieve

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "text": "string",
  • "dateTime": "string",
  • "uri": "string",
  • "driveId": "string",
  • "task": {
    },
  • "member": {
    }
}

Update an existing note

Modifies an existing note's content, metadata, or attachments. Partial updates are supported through the NoteUpdateDto object. Only the note owner or users with project manager/owner roles can update notes. The note's last update timestamp will be automatically updated.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Unique identifier of the note to update

Request Body schema:
required

Note data for update

text
string
dateTime
string
uri
string
driveId
string
deleted
boolean

Responses

Request samples

Content type
{
  • "text": "string",
  • "dateTime": "string",
  • "uri": "string",
  • "driveId": "string",
  • "deleted": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "text": "string",
  • "dateTime": "string",
  • "uri": "string",
  • "driveId": "string",
  • "task": {
    },
  • "member": {
    }
}

Delete a note

Permanently removes a note and its associated data (including attachments) from the system. This action cannot be undone. Only the note owner or users with project manager/owner roles can delete notes. The deletion is a soft delete that marks the note as deleted rather than physically removing it.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Unique identifier of the note to delete

Responses

Get URL for note attachment

Generates and returns a signed URL to access the file attachment associated with a specific note. The URL may be temporary and require authentication. If the note has no file attachment or the user doesn't have permission to access it, an empty URL will be returned. The system handles file permissions and may create copies for shared access.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Unique identifier of the note whose file URL should be retrieved

Responses

Response samples

Content type
{
  • "url": "string"
}

Generate printable version of note

Creates a printer-friendly PDF version of the note, formatting its content and metadata appropriately for physical or PDF output. The generated PDF includes note content, creation date, associated task information, and user details. The PDF is returned as binary data with the appropriate content type.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string

Unique identifier of the note to print

Responses

Advanced note search

Performs an advanced search across notes using multiple criteria defined in NoteListParams. Supports filtering by task IDs, date range, document ID, and text search. Results can be sorted and paginated. This endpoint is more flexible than the basic list endpoint and allows for complex queries.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters for filtering notes

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
startDate
string
endDate
string
taskId
string
documentId
string
taskIds
Array of strings
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "startDate": "string",
  • "endDate": "string",
  • "taskId": "string",
  • "documentId": "string",
  • "taskIds": [
    ],
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Document

Document Management

The Document API handles the creation and management of formal documents like invoices, timesheets, and work records. These documents can incorporate tasks, expenses, and notes to create consolidated records for clients and internal use.

Document Types

The API supports three primary document types:

  • Invoices: For billing clients based on recorded time and expenses
  • Timesheets: For reporting work hours in a structured format
  • Work Records: For documenting completed work with details and attachments

Document Features

Documents include comprehensive information:

  • Company and customer details
  • Line items from tasks and expenses
  • Tax and discount calculations
  • Payment terms and status tracking
  • Customizable templates

Document Operations

The API supports the full document lifecycle:

  • Creating new documents from scratch or templates
  • Updating document content and status
  • Printing to PDF format with customized layouts
  • Marking documents as paid or approved

Template System

Documents can be saved as templates for reuse, maintaining consistent formatting and content structure across multiple documents.

List documents

Retrieves a paginated list of documents based on filter criteria. Documents can be filtered by organization, type, status, and template flag. Results can be sorted and ordered according to specified parameters.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
organizationId
string
Example: organizationId=org-123456

Organization ID to filter documents by

type
integer <int32>
Default: 0
Enum: 0 1 2

Document type to filter by: 0 = Invoice, 1 = Timesheet, 2 = Work Record

status
string
Enum: "paid" "unpaid" "approved" "notApproved"
Example: status=unpaid

Document status to filter by: paid, unpaid, approved, notApproved

template
boolean
Default: false

Filter by template flag. If true, returns only document templates

sort
string
Enum: "date" "created" "name" "customer"
Example: sort=date

Field to sort results by

order
string
Default: "desc"
Enum: "asc" "desc"
Example: order=desc

Sort order: asc or desc

page
integer <int32> >= 1
Default: 1
Example: page=1

Page number for pagination

limit
integer <int32> [ 1 .. 100 ]
Default: 20
Example: limit=20

Maximum number of results per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Create document

Creates a new document based on the provided data. Can create invoices, timesheets, or work records. Document can include associated tasks, expenses, and notes. A document can also be saved as a template for future use.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Document data for creation

organizationId
string
image
string
company
string
companyDescription
string
companyAddressLine1
string
companyAddressLine2
string
companyAddressLine3
string
companyAddressLine4
string
customer
string
customerId
string
customerAddressLine1
string
customerAddressLine2
string
customerAddressLine3
string
customerAddressLine4
string
name
string
date
string
invoiceId
string
category
integer <int32>
headline
string
description
string
terms
string
signature
string
payment
number <double>
paymentDate
string
paymentMethod
string
taskSubtotal
number <double>
expenseSubtotal
number <double>
subtotal
number <double>
tax
number <double>
taxValue
number <double>
taxSecond
number <double>
taxSecondValue
number <double>
discount
number <double>
discountValue
number <double>
total
number <double>
duration
integer <int64>
templateId
string
templateName
string
template
boolean
paid
boolean
approved
boolean
includeExpenses
boolean
includeNotes
boolean
useRelatives
boolean
hideTaxes
boolean
hideSummation
boolean
showSecondTax
boolean
showDiscount
boolean
showMemberName
boolean
showProjectTitle
boolean
showTags
boolean
hideTaskTime
boolean
hideRate
boolean
hideExpenseDateTime
boolean
discountSecondValue
number <double>
showDiscountSecond
boolean
fieldDiscountSecond
string
fieldTitle
string
fieldItem
string
fieldDescription
string
fieldRate
string
fieldQuantity
string
fieldTotal
string
fieldTotalSum
string
fieldSubTotal
string
fieldTax
string
fieldSecondTax
string
fieldDiscount
string
fieldExpenseTitle
string
fieldExpenseTotal
string
taskIds
Array of strings
expenseIds
Array of strings
noteIds
Array of strings
saveAsTemplate
boolean
refreshTemplate
boolean

Responses

Request samples

Content type
{
  • "organizationId": "string",
  • "image": "string",
  • "company": "string",
  • "companyDescription": "string",
  • "companyAddressLine1": "string",
  • "companyAddressLine2": "string",
  • "companyAddressLine3": "string",
  • "companyAddressLine4": "string",
  • "customer": "string",
  • "customerId": "string",
  • "customerAddressLine1": "string",
  • "customerAddressLine2": "string",
  • "customerAddressLine3": "string",
  • "customerAddressLine4": "string",
  • "name": "string",
  • "date": "string",
  • "invoiceId": "string",
  • "category": 0,
  • "headline": "string",
  • "description": "string",
  • "terms": "string",
  • "signature": "string",
  • "payment": 0.1,
  • "paymentDate": "string",
  • "paymentMethod": "string",
  • "taskSubtotal": 0.1,
  • "expenseSubtotal": 0.1,
  • "subtotal": 0.1,
  • "tax": 0.1,
  • "taxValue": 0.1,
  • "taxSecond": 0.1,
  • "taxSecondValue": 0.1,
  • "discount": 0.1,
  • "discountValue": 0.1,
  • "total": 0.1,
  • "duration": 0,
  • "templateId": "string",
  • "templateName": "string",
  • "template": true,
  • "paid": true,
  • "approved": true,
  • "includeExpenses": true,
  • "includeNotes": true,
  • "useRelatives": true,
  • "hideTaxes": true,
  • "hideSummation": true,
  • "showSecondTax": true,
  • "showDiscount": true,
  • "showMemberName": true,
  • "showProjectTitle": true,
  • "showTags": true,
  • "hideTaskTime": true,
  • "hideRate": true,
  • "hideExpenseDateTime": true,
  • "discountSecondValue": 0.1,
  • "showDiscountSecond": true,
  • "fieldDiscountSecond": "string",
  • "fieldTitle": "string",
  • "fieldItem": "string",
  • "fieldDescription": "string",
  • "fieldRate": "string",
  • "fieldQuantity": "string",
  • "fieldTotal": "string",
  • "fieldTotalSum": "string",
  • "fieldSubTotal": "string",
  • "fieldTax": "string",
  • "fieldSecondTax": "string",
  • "fieldDiscount": "string",
  • "fieldExpenseTitle": "string",
  • "fieldExpenseTotal": "string",
  • "taskIds": [
    ],
  • "expenseIds": [
    ],
  • "noteIds": [
    ],
  • "saveAsTemplate": true,
  • "refreshTemplate": true
}

Response samples

Content type
{
  • "id": "string",
  • "organizationId": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "image": "string",
  • "company": "string",
  • "companyDescription": "string",
  • "companyAddressLine1": "string",
  • "companyAddressLine2": "string",
  • "companyAddressLine3": "string",
  • "companyAddressLine4": "string",
  • "customer": "string",
  • "customerId": "string",
  • "customerAddressLine1": "string",
  • "customerAddressLine2": "string",
  • "customerAddressLine3": "string",
  • "customerAddressLine4": "string",
  • "name": "string",
  • "date": "string",
  • "invoiceId": "string",
  • "category": 0,
  • "headline": "string",
  • "description": "string",
  • "terms": "string",
  • "signature": "string",
  • "payment": 0.1,
  • "paymentDate": "string",
  • "paymentMethod": "string",
  • "taskSubtotal": 0.1,
  • "expenseSubtotal": 0.1,
  • "subtotal": 0.1,
  • "tax": 0.1,
  • "taxValue": 0.1,
  • "taxSecond": 0.1,
  • "taxSecondValue": 0.1,
  • "discount": 0.1,
  • "discountValue": 0.1,
  • "total": 0.1,
  • "duration": 0,
  • "templateId": "string",
  • "templateName": "string",
  • "template": true,
  • "paid": true,
  • "approved": true,
  • "includeExpenses": true,
  • "includeNotes": true,
  • "useRelatives": true,
  • "hideTaxes": true,
  • "hideSummation": true,
  • "showSecondTax": true,
  • "showDiscount": true,
  • "showMemberName": true,
  • "showProjectTitle": true,
  • "showTags": true,
  • "hideTaskTime": true,
  • "hideRate": true,
  • "hideExpenseDateTime": true,
  • "discountSecondValue": 0.1,
  • "showDiscountSecond": true,
  • "fieldDiscountSecond": "string",
  • "fieldTitle": "string",
  • "fieldItem": "string",
  • "fieldDescription": "string",
  • "fieldRate": "string",
  • "fieldQuantity": "string",
  • "fieldTotal": "string",
  • "fieldTotalSum": "string",
  • "fieldSubTotal": "string",
  • "fieldTax": "string",
  • "fieldSecondTax": "string",
  • "fieldDiscount": "string",
  • "fieldExpenseTitle": "string",
  • "fieldExpenseTotal": "string",
  • "tasks": [
    ],
  • "expenses": [
    ],
  • "notes": [
    ],
  • "saveAsTemplate": true,
  • "refreshTemplate": true,
  • "status": 0,
  • "fullyPaid": true,
  • "partiallyPaid": true,
  • "invoice": true,
  • "timesheet": true,
  • "workRecord": true
}

Get document

Retrieves a specific document by its unique identifier. The response includes all document details along with associated tasks, expenses, and notes.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: doc-123456

Document ID to retrieve

Responses

Response samples

Content type
{
  • "id": "string",
  • "organizationId": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "image": "string",
  • "company": "string",
  • "companyDescription": "string",
  • "companyAddressLine1": "string",
  • "companyAddressLine2": "string",
  • "companyAddressLine3": "string",
  • "companyAddressLine4": "string",
  • "customer": "string",
  • "customerId": "string",
  • "customerAddressLine1": "string",
  • "customerAddressLine2": "string",
  • "customerAddressLine3": "string",
  • "customerAddressLine4": "string",
  • "name": "string",
  • "date": "string",
  • "invoiceId": "string",
  • "category": 0,
  • "headline": "string",
  • "description": "string",
  • "terms": "string",
  • "signature": "string",
  • "payment": 0.1,
  • "paymentDate": "string",
  • "paymentMethod": "string",
  • "taskSubtotal": 0.1,
  • "expenseSubtotal": 0.1,
  • "subtotal": 0.1,
  • "tax": 0.1,
  • "taxValue": 0.1,
  • "taxSecond": 0.1,
  • "taxSecondValue": 0.1,
  • "discount": 0.1,
  • "discountValue": 0.1,
  • "total": 0.1,
  • "duration": 0,
  • "templateId": "string",
  • "templateName": "string",
  • "template": true,
  • "paid": true,
  • "approved": true,
  • "includeExpenses": true,
  • "includeNotes": true,
  • "useRelatives": true,
  • "hideTaxes": true,
  • "hideSummation": true,
  • "showSecondTax": true,
  • "showDiscount": true,
  • "showMemberName": true,
  • "showProjectTitle": true,
  • "showTags": true,
  • "hideTaskTime": true,
  • "hideRate": true,
  • "hideExpenseDateTime": true,
  • "discountSecondValue": 0.1,
  • "showDiscountSecond": true,
  • "fieldDiscountSecond": "string",
  • "fieldTitle": "string",
  • "fieldItem": "string",
  • "fieldDescription": "string",
  • "fieldRate": "string",
  • "fieldQuantity": "string",
  • "fieldTotal": "string",
  • "fieldTotalSum": "string",
  • "fieldSubTotal": "string",
  • "fieldTax": "string",
  • "fieldSecondTax": "string",
  • "fieldDiscount": "string",
  • "fieldExpenseTitle": "string",
  • "fieldExpenseTotal": "string",
  • "tasks": [
    ],
  • "expenses": [
    ],
  • "notes": [
    ],
  • "saveAsTemplate": true,
  • "refreshTemplate": true,
  • "status": 0,
  • "fullyPaid": true,
  • "partiallyPaid": true,
  • "invoice": true,
  • "timesheet": true,
  • "workRecord": true
}

Update document

Updates an existing document with the provided data. Can update all document properties, including status flags (paid, approved), content, and associated tasks, expenses, and notes.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: doc-123456

Document ID to update

Request Body schema:
required

Updated document data

deleted
boolean
image
string
company
string
companyDescription
string
companyAddressLine1
string
companyAddressLine2
string
companyAddressLine3
string
companyAddressLine4
string
customer
string
customerId
string
customerAddressLine1
string
customerAddressLine2
string
customerAddressLine3
string
customerAddressLine4
string
name
string
date
string
invoiceId
string
category
integer <int32>
headline
string
description
string
terms
string
signature
string
payment
number <double>
paymentDate
string
paymentMethod
string
taskSubtotal
number <double>
expenseSubtotal
number <double>
subtotal
number <double>
tax
number <double>
taxValue
number <double>
taxSecond
number <double>
taxSecondValue
number <double>
discount
number <double>
discountValue
number <double>
hideTaskTime
boolean
hideRate
boolean
hideExpenseDateTime
boolean
discountSecondValue
number <double>
showDiscountSecond
boolean
fieldDiscountSecond
string
total
number <double>
duration
integer <int64>
templateId
string
templateName
string
template
boolean
paid
boolean
approved
boolean
includeExpenses
boolean
includeNotes
boolean
useRelatives
boolean
hideTaxes
boolean
hideSummation
boolean
showSecondTax
boolean
showDiscount
boolean
showMemberName
boolean
showProjectTitle
boolean
showTags
boolean
fieldTitle
string
fieldItem
string
fieldDescription
string
fieldRate
string
fieldQuantity
string
fieldTotal
string
fieldTotalSum
string
fieldSubTotal
string
fieldTax
string
fieldSecondTax
string
fieldDiscount
string
fieldExpenseTitle
string
fieldExpenseTotal
string
taskIds
Array of strings
expenseIds
Array of strings
noteIds
Array of strings
saveAsTemplate
boolean
refreshTemplate
boolean

Responses

Request samples

Content type
{
  • "deleted": true,
  • "image": "string",
  • "company": "string",
  • "companyDescription": "string",
  • "companyAddressLine1": "string",
  • "companyAddressLine2": "string",
  • "companyAddressLine3": "string",
  • "companyAddressLine4": "string",
  • "customer": "string",
  • "customerId": "string",
  • "customerAddressLine1": "string",
  • "customerAddressLine2": "string",
  • "customerAddressLine3": "string",
  • "customerAddressLine4": "string",
  • "name": "string",
  • "date": "string",
  • "invoiceId": "string",
  • "category": 0,
  • "headline": "string",
  • "description": "string",
  • "terms": "string",
  • "signature": "string",
  • "payment": 0.1,
  • "paymentDate": "string",
  • "paymentMethod": "string",
  • "taskSubtotal": 0.1,
  • "expenseSubtotal": 0.1,
  • "subtotal": 0.1,
  • "tax": 0.1,
  • "taxValue": 0.1,
  • "taxSecond": 0.1,
  • "taxSecondValue": 0.1,
  • "discount": 0.1,
  • "discountValue": 0.1,
  • "hideTaskTime": true,
  • "hideRate": true,
  • "hideExpenseDateTime": true,
  • "discountSecondValue": 0.1,
  • "showDiscountSecond": true,
  • "fieldDiscountSecond": "string",
  • "total": 0.1,
  • "duration": 0,
  • "templateId": "string",
  • "templateName": "string",
  • "template": true,
  • "paid": true,
  • "approved": true,
  • "includeExpenses": true,
  • "includeNotes": true,
  • "useRelatives": true,
  • "hideTaxes": true,
  • "hideSummation": true,
  • "showSecondTax": true,
  • "showDiscount": true,
  • "showMemberName": true,
  • "showProjectTitle": true,
  • "showTags": true,
  • "fieldTitle": "string",
  • "fieldItem": "string",
  • "fieldDescription": "string",
  • "fieldRate": "string",
  • "fieldQuantity": "string",
  • "fieldTotal": "string",
  • "fieldTotalSum": "string",
  • "fieldSubTotal": "string",
  • "fieldTax": "string",
  • "fieldSecondTax": "string",
  • "fieldDiscount": "string",
  • "fieldExpenseTitle": "string",
  • "fieldExpenseTotal": "string",
  • "taskIds": [
    ],
  • "expenseIds": [
    ],
  • "noteIds": [
    ],
  • "saveAsTemplate": true,
  • "refreshTemplate": true
}

Response samples

Content type
{
  • "id": "string",
  • "organizationId": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "image": "string",
  • "company": "string",
  • "companyDescription": "string",
  • "companyAddressLine1": "string",
  • "companyAddressLine2": "string",
  • "companyAddressLine3": "string",
  • "companyAddressLine4": "string",
  • "customer": "string",
  • "customerId": "string",
  • "customerAddressLine1": "string",
  • "customerAddressLine2": "string",
  • "customerAddressLine3": "string",
  • "customerAddressLine4": "string",
  • "name": "string",
  • "date": "string",
  • "invoiceId": "string",
  • "category": 0,
  • "headline": "string",
  • "description": "string",
  • "terms": "string",
  • "signature": "string",
  • "payment": 0.1,
  • "paymentDate": "string",
  • "paymentMethod": "string",
  • "taskSubtotal": 0.1,
  • "expenseSubtotal": 0.1,
  • "subtotal": 0.1,
  • "tax": 0.1,
  • "taxValue": 0.1,
  • "taxSecond": 0.1,
  • "taxSecondValue": 0.1,
  • "discount": 0.1,
  • "discountValue": 0.1,
  • "total": 0.1,
  • "duration": 0,
  • "templateId": "string",
  • "templateName": "string",
  • "template": true,
  • "paid": true,
  • "approved": true,
  • "includeExpenses": true,
  • "includeNotes": true,
  • "useRelatives": true,
  • "hideTaxes": true,
  • "hideSummation": true,
  • "showSecondTax": true,
  • "showDiscount": true,
  • "showMemberName": true,
  • "showProjectTitle": true,
  • "showTags": true,
  • "hideTaskTime": true,
  • "hideRate": true,
  • "hideExpenseDateTime": true,
  • "discountSecondValue": 0.1,
  • "showDiscountSecond": true,
  • "fieldDiscountSecond": "string",
  • "fieldTitle": "string",
  • "fieldItem": "string",
  • "fieldDescription": "string",
  • "fieldRate": "string",
  • "fieldQuantity": "string",
  • "fieldTotal": "string",
  • "fieldTotalSum": "string",
  • "fieldSubTotal": "string",
  • "fieldTax": "string",
  • "fieldSecondTax": "string",
  • "fieldDiscount": "string",
  • "fieldExpenseTitle": "string",
  • "fieldExpenseTotal": "string",
  • "tasks": [
    ],
  • "expenses": [
    ],
  • "notes": [
    ],
  • "saveAsTemplate": true,
  • "refreshTemplate": true,
  • "status": 0,
  • "fullyPaid": true,
  • "partiallyPaid": true,
  • "invoice": true,
  • "timesheet": true,
  • "workRecord": true
}

Remove document

Permanently deletes a document by its unique identifier. This operation also removes all associated document-task, document-expense, and document-note relationships.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: doc-123456

Document ID to delete

Responses

Print document

Generates a PDF printable version of a document based on the provided print settings. The document can be formatted according to template settings and can optionally include ZUGFeRD-compliant XML data for electronic invoice processing. Returns the document as a PDF binary stream.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Document print settings

id
string
zugferd
boolean

Responses

Request samples

Content type
{
  • "id": "string",
  • "zugferd": true
}

Search documents

Performs an advanced search for documents based on provided criteria. Supports full-text search across document fields (name, customer, description, invoiceId, customerId) and allows filtering by organization, type, status, and template flag. Results can be sorted, ordered, and paginated.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search and filter parameters

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
organizationId
string
category
integer <int32>
status
string
template
boolean
empty
boolean
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "organizationId": "string",
  • "category": 0,
  • "status": "string",
  • "template": true,
  • "empty": true,
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    }
}

Export

Data Export

The Export API facilitates generating and delivering comprehensive reports in various formats for analysis, reporting, and integration purposes.

Export Formats

The API supports multiple export formats:

  • Excel: Detailed workbooks with multiple sheets
  • CSV: Simple tabular data for import into other systems
  • PDF: Formatted reports for presentation and printing

Export Content

Exports can include various data types:

  • Time entries with detailed breakdowns
  • Project summaries and statistics
  • Team member work reports
  • Expense reports
  • Custom filtered data sets

Delivery Methods

Reports can be:

  • Downloaded directly through the API
  • Sent via email to specified recipients
  • Generated in the background for later retrieval

Customization

Exports are highly customizable through parameters:

  • Date ranges for time filtering
  • Project, team, and user selections
  • Field selection for included data
  • Grouping and sorting options

Generate and download a timesheet export

Creates an export file based on the provided parameters and returns a signed URL to download it. Supports various formats (Excel, CSV, PDF), report types, date ranges, and filtering options. The export can include task data, project summaries, team member summaries, and more based on the report type selection.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Configuration parameters for the export, including format, report type, date range, filtering options, etc.

report
integer <int32>
email
string
filename
string
teamIds
Array of strings
projectIds
Array of strings
userIds
Array of strings
tagIds
Array of strings
type
string
startDate
string
endDate
string
format
string
filter
string
splitTask
boolean
summarize
boolean
Array of objects (ExportedField)
pdf
boolean
xls
boolean
csv
boolean
xls1904
boolean
dateRange
string
mimeType
string
fileType
string
fileExtension
string

Responses

Request samples

Content type
{
  • "report": 0,
  • "email": "string",
  • "filename": "string",
  • "teamIds": [
    ],
  • "projectIds": [
    ],
  • "userIds": [
    ],
  • "tagIds": [
    ],
  • "type": "string",
  • "startDate": "string",
  • "endDate": "string",
  • "format": "string",
  • "filter": "string",
  • "splitTask": true,
  • "summarize": true,
  • "exportedFields": [
    ],
  • "pdf": true,
  • "xls": true,
  • "csv": true,
  • "xls1904": true,
  • "dateRange": "string",
  • "mimeType": "string",
  • "fileType": "string",
  • "fileExtension": "string"
}

Response samples

Content type
{
  • "url": "string"
}

Generate and email a timesheet export

Creates an export file based on the provided parameters and sends it via email to the specified address. This endpoint uses the same export generation logic as the /data endpoint but delivers the result via email instead of returning a download URL. The email field in exportParams must be provided.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Configuration parameters for the export to be sent via email. Must include a valid email address in the 'email' field along with format, report type, date range, and other filtering options.

report
integer <int32>
email
string
filename
string
teamIds
Array of strings
projectIds
Array of strings
userIds
Array of strings
tagIds
Array of strings
type
string
startDate
string
endDate
string
format
string
filter
string
splitTask
boolean
summarize
boolean
Array of objects (ExportedField)
pdf
boolean
xls
boolean
csv
boolean
xls1904
boolean
dateRange
string
mimeType
string
fileType
string
fileExtension
string

Responses

Request samples

Content type
{
  • "report": 0,
  • "email": "string",
  • "filename": "string",
  • "teamIds": [
    ],
  • "projectIds": [
    ],
  • "userIds": [
    ],
  • "tagIds": [
    ],
  • "type": "string",
  • "startDate": "string",
  • "endDate": "string",
  • "format": "string",
  • "filter": "string",
  • "splitTask": true,
  • "summarize": true,
  • "exportedFields": [
    ],
  • "pdf": true,
  • "xls": true,
  • "csv": true,
  • "xls1904": true,
  • "dateRange": "string",
  • "mimeType": "string",
  • "fileType": "string",
  • "fileExtension": "string"
}

Automation

Time Tracking Automation

The Automation API manages automated time tracking triggers based on location, network connections, or beacon detection. These automations help users start and stop time tracking without manual intervention.

Automation Types

Three automation triggers are supported:

  • Geofence: Location-based triggers using GPS coordinates and radius
  • WLAN: Network-based triggers using SSID identification
  • Beacon: Proximity-based triggers using Bluetooth beacons

Actions

Automations can trigger different actions:

  • Starting time tracking for a project
  • Stopping active time tracking
  • Pausing active time tracking

Configuration

Each automation includes:

  • Project association
  • Trigger conditions (location, network, or beacon details)
  • Action to perform
  • Activation status (enabled/disabled)
  • Sharing settings for team use

Management

The API provides endpoints to:

  • Create new automations
  • Update existing automations
  • Enable or disable automations
  • Delete automations when no longer needed

List automations

Retrieves a paginated list of automations filtered by optional parameters. Automations can be filtered by project and status. Users will only see automations they have access to based on their permissions.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
projectId
string
Example: projectId=proj123

Filter automations by project ID

status
string
Enum: "enabled" "disabled"
Example: status=enabled

Filter automations by status

sort
string
Default: "created"
Enum: "project" "created"
Example: sort=created

Field to sort by

order
string
Default: "desc"
Enum: "asc" "desc"
Example: order=desc

Sort order (ascending or descending)

page
integer <int32>
Default: 1
Example: page=1

Page number for pagination

limit
integer <int32>
Default: 20
Example: limit=20

Maximum number of items per page

Responses

Response samples

Content type
{
  • "items": [
    ],
  • "count": 1,
  • "sort": "created",
  • "order": "desc",
  • "page": 1,
  • "limit": 20
}

Create automation

Creates a new automation for automatic time tracking based on location (geofence), WLAN detection, or beacon detection. The type of automation is determined by the typeId field. Based on the typeId, different fields are required. For geofence (typeId=0): address, latitude, longitude, and radius are required. For WLAN detection (typeId=1): ssid is required. For beacon detection (typeId=2): beaconUUID is required.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Automation object to be created

projectId
string
typeId
integer <int32>
action
integer <int32>
enabled
boolean
shared
boolean
ssid
string
address
string
latitude
number <double>
longitude
number <double>
radius
number <double>
beaconUUID
string

Responses

Request samples

Content type
{
  • "projectId": "string",
  • "typeId": 0,
  • "action": 0,
  • "enabled": true,
  • "shared": true,
  • "ssid": "string",
  • "address": "string",
  • "latitude": 0.1,
  • "longitude": 0.1,
  • "radius": 0.1,
  • "beaconUUID": "string"
}

Response samples

Content type
{
  • "id": "auto123",
  • "project": {
    },
  • "typeId": 0,
  • "action": 0,
  • "enabled": true,
  • "shared": false,
  • "address": "123 Main St",
  • "latitude": 47.6062,
  • "longitude": -122.3321,
  • "radius": 200,
  • "member": {
    },
  • "name": "Office (200m)"
}

Get automation

Retrieves a specific automation by its unique identifier. Users can only retrieve automations they have access to based on their permissions.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: auto123

Unique identifier of the automation

Responses

Response samples

Content type
{
  • "id": "auto123",
  • "project": {
    },
  • "typeId": 0,
  • "action": 0,
  • "enabled": true,
  • "shared": false,
  • "address": "123 Main St",
  • "latitude": 47.6062,
  • "longitude": -122.3321,
  • "radius": 200,
  • "member": {
    },
  • "name": "Office (200m)"
}

Update automation

Updates an existing automation identified by its unique ID. Only specific fields can be updated, and the appropriate fields must be provided based on the automation type (geofence, WLAN, or beacon).

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: auto123

Unique identifier of the automation to update

Request Body schema:
required

Updated automation object

projectId
string
typeId
integer <int32>
action
integer <int32>
enabled
boolean
shared
boolean
ssid
string
address
string
latitude
number <double>
longitude
number <double>
radius
number <double>
beaconUUID
string
deleted
boolean

Responses

Request samples

Content type
{
  • "projectId": "string",
  • "typeId": 0,
  • "action": 0,
  • "enabled": true,
  • "shared": true,
  • "ssid": "string",
  • "address": "string",
  • "latitude": 0.1,
  • "longitude": 0.1,
  • "radius": 0.1,
  • "beaconUUID": "string",
  • "deleted": true
}

Response samples

Content type
{
  • "id": "auto123",
  • "project": {
    },
  • "typeId": 0,
  • "action": 0,
  • "enabled": true,
  • "shared": true,
  • "address": "123 Main St",
  • "latitude": 47.6062,
  • "longitude": -122.3321,
  • "radius": 300,
  • "member": {
    },
  • "name": "Office (300m)"
}

Remove automation

Deletes an automation by marking it as deleted (soft delete). Users can only delete automations they have created or have permission to manage.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: auto123

Unique identifier of the automation to delete

Responses

Search automations

Advanced search for automations with multiple filter criteria. Provides a more comprehensive search capability than the list endpoint, allowing filtering by project IDs, type, status, and pagination parameters.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters for automations

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
projectId
string
status
string
type
integer <int32>
projectIds
Array of strings
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "projectId": "string",
  • "status": "string",
  • "type": 0,
  • "projectIds": [
    ],
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "count": 1,
  • "projectIds": [
    ],
  • "type": 0,
  • "status": "enabled",
  • "sort": "created",
  • "order": "desc",
  • "page": 1,
  • "limit": 20
}

Todos

Task Management

The Todos API provides a lightweight task management system for planning and tracking work to be done. Todos serve as organizational units that can be associated with time tracking tasks when work is performed.

Todo Structure

Each todo includes:

  • Name and description of the work to be done
  • Project association
  • Status tracking (open/closed)
  • Due date for scheduling
  • User assignments for responsibility
  • Estimated time for completion

Todo Lifecycle

Todos follow a simple workflow:

  • Creation with initial details
  • Assignment to team members
  • Status updates as work progresses
  • Closure when work is complete

Time Tracking Integration

Todos integrate with time tracking:

  • Time entries can be associated with specific todos
  • Time spent is automatically tracked against estimates
  • Todos display progress based on recorded time

Task Planning

The API supports project planning:

  • Assigning todos to multiple team members
  • Setting due dates to manage deadlines
  • Tracking estimated vs. actual time
  • Filtering and searching for specific todos

List todos

Retrieves a paginated list of todos with optional filtering by project and status. Results can be sorted and ordered according to specified parameters.

Authorizations:
bearerAuthapiKeyAuth
query Parameters
projectId
string
Example: projectId=proj123

Filter todos by project identifier

status
string
Default: "open"
Enum: "all" "open" "closed"

Filter todos by status

sort
string
Default: "alpha"
Enum: "alpha" "dueDate" "created" "status"

Field to sort by

order
string
Default: "asc"
Enum: "asc" "desc"

Sort direction

page
integer <int64> >= 1
Default: 1

Page number (1-based pagination)

limit
integer <int64> [ 1 .. 100 ]
Default: 20

Number of items per page

Responses

Response samples

Content type
[
  • {
    }
]

Create todo

Creates a new todo item with the provided details. Required fields include name and projectId. Optional fields include description, status, dueDate, assignedUsers, and estimated time.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Todo item details to create

projectId
string
name
string
description
string
status
integer <int32>
dueDate
string
assignedUsers
string
estimatedHours
integer <int32>
estimatedMinutes
integer <int32>

Responses

Request samples

Content type
{
  • "projectId": "string",
  • "name": "string",
  • "description": "string",
  • "status": 0,
  • "dueDate": "string",
  • "assignedUsers": "string",
  • "estimatedHours": 0,
  • "estimatedMinutes": 0
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "project": {
    },
  • "name": "string",
  • "description": "string",
  • "status": 0,
  • "dueDate": "string",
  • "assignedUsers": "string",
  • "estimatedHours": 0,
  • "estimatedMinutes": 0,
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expenses": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1
}

Get todo

Retrieves detailed information about a specific todo item by its unique identifier. The response includes all todo properties as well as related statistics like time spent.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: todo123

Unique identifier of the todo

Responses

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "project": {
    },
  • "name": "string",
  • "description": "string",
  • "status": 0,
  • "dueDate": "string",
  • "assignedUsers": "string",
  • "estimatedHours": 0,
  • "estimatedMinutes": 0,
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expenses": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1
}

Update todo

Updates an existing todo item with the provided details. All fields in the request body will overwrite the existing values. Fields not included in the request will remain unchanged.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: todo123

Unique identifier of the todo to update

Request Body schema:
required

Updated todo details

name
string
description
string
status
integer <int32>
dueDate
string
assignedUsers
string
estimatedHours
integer <int32>
estimatedMinutes
integer <int32>
deleted
boolean

Responses

Request samples

Content type
{
  • "name": "string",
  • "description": "string",
  • "status": 0,
  • "dueDate": "string",
  • "assignedUsers": "string",
  • "estimatedHours": 0,
  • "estimatedMinutes": 0,
  • "deleted": true
}

Response samples

Content type
{
  • "id": "string",
  • "user": "string",
  • "deleted": true,
  • "lastUpdate": 0,
  • "created": 0,
  • "project": {
    },
  • "name": "string",
  • "description": "string",
  • "status": 0,
  • "dueDate": "string",
  • "assignedUsers": "string",
  • "estimatedHours": 0,
  • "estimatedMinutes": 0,
  • "duration": 0,
  • "durationBreak": 0,
  • "salaryTotal": 0.1,
  • "salaryBreak": 0.1,
  • "expenses": 0.1,
  • "expensesPaid": 0.1,
  • "mileage": 0.1
}

Remove todo

Soft-deletes a todo item by its identifier. This operation marks the todo as deleted in the database but does not physically remove it. Associated tasks will have their todo reference cleared.

Authorizations:
bearerAuthapiKeyAuth
path Parameters
id
required
string
Example: todo123

Unique identifier of the todo to delete

Responses

Search todos

Performs an advanced search for todos based on multiple criteria specified in the request body. This endpoint supports more complex filtering than the standard list endpoint, including filtering by multiple projects and assigned users.

Authorizations:
bearerAuthapiKeyAuth
Request Body schema:
required

Search parameters including filters, sorting options, and pagination

search
string
sort
string
order
string
count
integer <int32>
page
integer <int32>
limit
integer <int32>
projectId
string
status
string
assignedUsers
string
projectIds
Array of strings
offset
integer <int32>

Responses

Request samples

Content type
{
  • "search": "string",
  • "sort": "string",
  • "order": "string",
  • "count": 0,
  • "page": 0,
  • "limit": 0,
  • "projectId": "string",
  • "status": "string",
  • "assignedUsers": "string",
  • "projectIds": [
    ],
  • "offset": 0
}

Response samples

Content type
{
  • "items": [
    ],
  • "params": {
    },
  • "todoStatistic": {
    }
}