Welcome to Time Progress Support

Everything you need to get the most out of Time Progress — from your first login to advanced API integrations.

Quick Start Guide

Get your workspace, team, and agent running in a few minutes.

5 min read · Beginner

API Documentation

Complete reference for the Agent Ingestion API and Public API v1.

15 min read · Advanced

Managing Categories

Organize apps and websites into productive, neutral, and unproductive buckets.

8 min read · Intermediate

Frequently Asked Questions

Find answers to the most common questions.

3 min read · All levels

Popular Articles

🔌 Agent Ingestion API

How the desktop agent enrolls, syncs activity, and uploads screenshots.

🔑 Public API v1

Read workspace users, devices, activity, and daily aggregates with Bearer tokens.

📸 Screenshot Privacy & Settings

Understand blur, visibility delay, retention, and storage options.

💰 Payroll Runs

Compute pay from attendance data, handle adjustments, and send payslips.

Quick Start Guide

Set up Time Progress for your team in five steps.

1 Create your account

Go to https://www.timeprogress.com/register, enter your email and password, and verify your email. The first user becomes the workspace owner.

2 Complete the onboarding wizard

Name your workspace, pick your timezone/country, choose automatic or manual monitoring, and set screenshot preferences.

3 Install the desktop agent

Download the Windows installer or portable ZIP from Agent → Downloads (or from the onboarding finish step). Run the installer, accept the monitoring disclosure, and sign in with your email and password. The agent starts tracking automatically.

4 Invite your team

Open Team, click Invite Member, enter an email, and choose a role. The invitee accepts via a secure link and is added to your workspace.

5 Configure categories and view the dashboard

Use Settings → Categories to rate apps and websites. Then open the Dashboard to see live activity, productivity scores, top apps, and meeting analytics.

Workspace Setup

How to configure your Time Progress workspace.

Onboarding wizard

New users see a 4-step wizard: create workspace, configure monitoring, invite team members, and finish / download the agent.

Timezone & week start

Set the workspace timezone in Settings. This affects attendance boundaries, shift limits, and the day used for daily aggregates. Choose the first day of the week for weekly reports.

Monitoring mode

  • Automatic: the agent tracks whenever the user is within their configured shift window.
  • Manual: the user starts and stops tracking from the tray or floating panel.

Workspace tokens

Generate workspace tokens in Settings → Tokens for legacy device enrollment via the /api/v1/agent/register endpoint. Tokens can be revoked at any time.

Web Authentication

How users sign in and prove their identity.

Email & password

The default sign-in method. Passwords are hashed with bcrypt. Sessions use secure, HTTP-only cookies.

Multi-factor authentication (MFA)

Users can set up TOTP-based MFA from Settings. After entering the correct password, a 6-digit code from an authenticator app is required. MFA is also enforced when enrolling the desktop agent via email/password.

Invitation-based access

Admins invite users by email. The recipient clicks a secure tokenized link, creates a password, and joins the workspace automatically.

Role-based access

Roles include Owner, Admin, Manager, Team Lead, HR, Contributor, Time Reporter, Viewer, and Auditor. Permissions are enforced by the role-permission matrix and can be overridden per tenant.

Team Management

Invite, manage, and secure your workspace members.

Team directory

View active members and pending invitations. Each row shows name, email, role, status, last-seen info, and a quick-info modal.

Invitations

  • Go to Team and click Invite Member.
  • Enter the email and choose a role.
  • Pending invitations can be cancelled.
  • The invitation email is branded and contains a secure acceptance link.

Roles

Built-in roles: Owner, Admin, Manager, Team Lead, HR, Contributor, Time Reporter, Viewer, Auditor. You can also customize the role-permission matrix in Settings → Roles.

Member actions

  • Change role or status (active / disabled).
  • Reset password.
  • Edit profile: name, email, employee ID, timezone, payroll currency/rate, schedule flags.
  • Set remote log level for agent debugging.
  • Delete member (owner cannot be deleted).

Dashboard

Your real-time command center for team productivity.

Date ranges

Filter by today, yesterday, this week, last week, this month, last month, or a custom range.

KPI cards

  • Active time & idle time
  • Productivity score
  • Uncategorized percentage
  • Total users & active devices
  • Screenshot count

Visualisations

Top apps, top window titles, top domains, top categories, category tree chart, sunburst chart, team timeline, and per-app timeline.

Live status & meetings

See who is online/offline, their last seen time, and today's tracked seconds. Meeting analytics include total meeting time, count, average duration, idle overlap, hourly/weekly breakdown, and app usage during calls.

Activity Tracking

What the agent records and how it is classified.

Captured data

The agent records the foreground application name, window title, browser URL (with the browser extension), active/idle state, and aggregate input counters (keystrokes, mouse clicks, moves). It does not capture keystroke content, passwords, clipboard, files, webcam, microphone, or location.

Classification

Each activity is classified as Productive, Unproductive, or Neutral based on the workspace category rules. Uncategorized time is shown separately so admins can fine-tune rules.

Meeting detection

Meetings are detected from window titles for Microsoft Teams, Zoom, Google Meet, Webex, Skype, GoTo, BlueJeans, and Slack huddles.

Idle time

Idle time is calculated from OS input events and merged into continuous idle intervals. A configurable threshold (default 300s) determines when tracking pauses.

Attendance & Schedules

Track presence, shifts, and manual time.

Attendance grid

View attendance by day, week, month, or custom range. Status can be present, absent, late, or partial.

Scheduled shifts

Create recurring (weekly) or one-off schedules with start/end times and working-hours limits. Schedules are timezone-aware.

Manual / offline time

Users can submit offline time requests with a reason and duration. Managers approve or reject them from the attendance page.

Export

Export the attendance grid to CSV for payroll or external reporting.

Reports

Generate detailed reports for every layer of your workforce data.

Available reports

ReportDescription
Hours WorkedPer-user daily hours
ProductivityProductive / unproductive / neutral percentages and score
AttendanceExpected start, actual start, last seen, total hours, status
App UsageTime spent per application
Website UsageTime rolled up by host/domain
Project & TasksTime per project and task by assigned users

Export & print

All reports support CSV export. Project & Tasks also supports PDF export. A dedicated print layout is available for clean hard copies.

Screenshots

Visual proof-of-work with privacy controls.

Gallery

Browse screenshots by user and date with pagination. Each screenshot shows the app, title, URL, activity percentage, keyboard/mouse percentage, and productivity percentage.

Privacy controls

  • Blur: screenshots can be blurred at capture time.
  • Visibility delay: a configurable delay (default 15 minutes) before screenshots appear in the gallery.
  • Retention: automatic deletion after the configured number of days.

Project/task assignment

Assign a screenshot's duration to a project and task for accurate client or project billing.

Storage

Screenshots can be stored locally or in Wasabi / any S3-compatible object store with presigned URLs.

Projects & Tasks

Attribute time to client work and internal initiatives.

Projects

  • Create, edit, archive, and delete projects.
  • Set time limits per week, month, etc.
  • Assign all members or specific users.
  • Auto-detect projects from activities where configured.
  • Export projects to CSV.

Tasks

Each project can have tasks. Users select the current project/task from the agent's floating panel so activity and screenshots are tagged automatically.

Payroll

Compute pay directly from attendance data.

Payroll runs

Create a run for a date range. Time Progress computes pay from each user's rate, rate period (hourly, daily, monthly, yearly), and scheduled hours.

Overtime & adjustments

Apply overtime and short-hour rules per user. Add manual adjustments to any line item. Lock previous pay runs when a new run is created.

Payslips

Send payslip emails to every user in a run with one click.

AI Insights

Understand team wellbeing and focus trends.

Daily AI reports

Generate per-user daily reports that include productivity score, focus score, burnout risk, top distraction, and a written narrative.

AI providers

If Azure OpenAI is configured, narratives are generated by GPT. Otherwise a heuristic fallback generates the narrative locally from the day's data.

Billing

Manage plans, trials, and payments.

Plans

Choose from Free, Starter, Business, or Enterprise plans. Each plan has different feature limits.

PayPal checkout

Upgrades use PayPal orders and capture. A webhook endpoint verifies payment status server-side.

Trial lifecycle

New workspaces start with a 14-day free trial. Reminder emails are sent 3, 2, and 1 days before expiry. Expired free-trial workspaces are automatically suspended.

Privacy / GDPR

Respect user data rights.

Data export

Users can export their own data as JSON: devices, activity logs, screenshots, AI reports, and audit logs.

Data deletion

Submit a deletion request from Privacy. Admins see pending requests and can action them.

Settings & Admin

Configure the workspace and monitor health.

Branding

Set the workspace display name, logo URL, and primary color for a white-label experience.

SSO

Configure SAML, Azure AD, or Okta fields for single sign-on.

Monitoring settings

Toggle screenshots, set the screenshot interval, blur, retention days, and monitoring mode.

API keys & tokens

Create workspace tokens for agent enrollment and public API keys (tpk_...) with read/write scopes.

Category builder

Manually map apps to categories, bulk assign, use regex rules, or let the AI-assisted builder suggest categories.

Logs

View debug logs with level/search filters and audit logs with action filters. Prune logs older than 30 days.

Email Automation

One daily cron job powers all transactional emails.

Cron endpoint

A single endpoint, /cron/daily?token=..., runs once per day and handles every automated email.

Email types

  • Weekly timesheet: sent on the last day of each tenant's configured week with tracked hours, productive time, productivity score, project hours, and a category pie chart.
  • Trial expiry reminders: 3, 2, and 1 days before a free trial ends.
  • Welcome email: sent when a new tenant/workspace is created.
  • Plan-paid confirmation: sent after a successful upgrade.
  • Invitation email: sent when a team member is invited.
  • Payslip email: sent per payroll run.

Mail drivers

The built-in mailer supports a log driver for development and raw SMTP for production. All sends are recorded in the email_logs table.

Browser Extensions

Capture the websites your team is working on.

Supported browsers

Chrome and Edge use Manifest V3. Firefox uses Manifest V2. Standalone ZIP files are available for Chrome, Edge, and Firefox.

What it tracks

The content script reports the active tab URL and title every 5 seconds. Internal browser URLs (chrome://, edge://, about:, extension pages) are ignored.

How it connects

The extension polls the agent's local control endpoint (127.0.0.1:17681/status) and only sends heartbeats to the local ActivityWatch server while the agent reports it is running. Tab/window/focus changes trigger an immediate heartbeat.

Desktop Agent

The local app that powers Time Progress tracking.

Core tracking

Tracks foreground app, window title, active/idle state, and aggregate input counters. Captures periodic full-screen screenshots (if enabled). The browser extension supplies tab URLs/titles.

ActivityWatch integration

Bundles aw-server-rust, aw-watcher-window, and aw-watcher-afk. Events are bucketed as window, idle, browser, input, and meeting.

Sync & offline support

SQLite buffers events and screenshots offline. Data drains when the network returns. Exponential backoff protects the server on failure.

Tray & floating panel

The tray shows today's time, sync status, and controls. The floating panel provides play/pause, project/task selection, and a live timer.

Security & compliance

Device tokens are stored in the OS credential manager (Windows Credential Manager / keyring) with a file fallback. The installer shows a consent page and the first run requires disclosure acknowledgement.

API Overview

Time Progress exposes two APIs: the Agent Ingestion API for the desktop agent, and the Public API v1 for your own integrations.

Base URL

https://www.timeprogress.com/api/v1

All endpoints return JSON. Date parameters use YYYY-MM-DD unless stated otherwise.

Agent Ingestion API

Used by the desktop agent to enroll, sync activity, upload screenshots, and fetch configuration. Authentication is via a device token (dvc_...) returned at enrollment.

Public API v1

Read-only tenant API for integrations. Authentication is via a public API key (tpk_...) created in Settings → API keys.

Agent Ingestion API

Endpoints used by the Time Progress desktop agent. Base path: /api/v1/agent.

Authentication model

  1. Enrollment: call POST /api/v1/agent/login (email/password) or legacy POST /api/v1/agent/register (workspace token + email).
  2. The response includes a long-lived device_token (prefix dvc_).
  3. Send that token on every subsequent request as Authorization: Bearer dvc_....

POST Enroll via credentials

/api/v1/agent/login

Preferred enrollment path. The user must have accepted monitoring consent.

Request Body
FieldTypeDescription
email *stringUser's workspace email
password *stringUser's password
totp_codestringRequired if MFA is enabled
consent *booleanMust be true
osstringOperating system
hostnamestringDevice hostname
agent_versionstringAgent version
curl -X POST "https://www.timeprogress.com/api/v1/agent/login" \ -H "Content-Type: application/json" \ -d '{ "email": "alice@example.com", "password": "secret", "consent": true, "os": "windows", "hostname": "ALICE-PC", "agent_version": "0.5.9" }'
Example response (201 Created)
{ "device_id": 42, "device_uuid": "550e8400-e29b-41d4-a716-446655440000", "device_token": "dvc_xxxxxxxxxxxxxxxx", "user_name": "Alice", "user_email": "alice@example.com", "workspace": { "id": 1, "name": "Acme", "timezone": "UTC", "monitoring_type": "automatic", "screenshots_enabled": 1, "screenshot_interval_minutes": 10, "screenshot_blur": 0, "screenshot_retention_days": 90 }, "sync": { "activity_batch_max": 500, "heartbeat_seconds": 60, "interval_seconds": 300, "idle_threshold_seconds": 300, "log_level": "error" } }

POST Enroll via workspace token

/api/v1/agent/register

Legacy enrollment path for IT-admin rollouts.

Headers
HeaderDescription
X-Workspace-Token *Workspace token (wsk_...)
Request Body
FieldTypeDescription
email *stringUser's workspace email
consent *booleanMust be true
osstringOperating system
hostnamestringDevice hostname
agent_versionstringAgent version

POST Heartbeat

/api/v1/agent/heartbeat

Keep the device marked as online.

curl -X POST "https://www.timeprogress.com/api/v1/agent/heartbeat" \ -H "Authorization: Bearer dvc_xxxxxxxx"
Example response
{ "ok": true, "now": "2026-06-22T10:00:00+00:00", "device": { "id": 42, "last_seen_at": "2026-06-22 10:00:00" } }

GET Today's tracked seconds

/api/v1/agent/today

Returns authoritative active/idle seconds for the current device today in the workspace timezone.

curl -H "Authorization: Bearer dvc_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/agent/today"
Example response
{ "ok": true, "today_seconds": 14400, "idle_seconds": 1800, "total_seconds": 16200, "tenant_timezone": "UTC", "day": "2026-06-22", "monitoring_type": "automatic", "shift": { "start_utc": "2026-06-22 09:00:00", "end_utc": "2026-06-22 17:00:00" } }

POST Upload activity batch

/api/v1/agent/activity

Send up to 500 activity events per batch. Idempotent event IDs avoid duplicates.

Item fields
FieldTypeDescription
event_id *stringUnique event id (deduplicated server-side)
kind *stringwindow, idle, browser, input, meeting
app_namestringApplication name
window_titlestringWindow title
urlstringBrowser URL (when kind=browser)
started_at *stringUTC datetime
ended_at *stringUTC datetime
duration_secondsintegerEvent length
categorystringproductive, unproductive, neutral
curl -X POST "https://www.timeprogress.com/api/v1/agent/activity" \ -H "Authorization: Bearer dvc_xxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "items": [ { "event_id": "evt_001", "kind": "window", "app_name": "windowsterminal", "window_title": "bash", "started_at": "2026-06-22T09:00:00Z", "ended_at": "2026-06-22T09:05:00Z", "duration_seconds": 300, "category": "productive" } ] }'
Example response
{ "ok": true, "inserted": 1, "accepted_event_ids": ["evt_001"], "remaining": 119 }

POST Upload screenshot

/api/v1/agent/screenshots

Accepts multipart/form-data with a file field, or JSON with a base64 image field.

Fields
FieldTypeDescription
filebinaryJPEG/PNG/WebP image (multipart)
imagestringBase64-encoded image (JSON)
taken_atstringUTC datetime (defaults to now)
project_idintegerOptional project to assign
task_idintegerOptional task to assign
curl -X POST "https://www.timeprogress.com/api/v1/agent/screenshots" \ -H "Authorization: Bearer dvc_xxxxxxxx" \ -F "file=@screenshot.jpg" \ -F "taken_at=2026-06-22T10:00:00Z"
Example response
{ "ok": true, "screenshot_id": 123, "visible_after": "2026-06-22 10:15:00" }

GET List projects & tasks

/api/v1/agent/projects

Returns projects assigned to the authenticated device user, including nested tasks.

curl -H "Authorization: Bearer dvc_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/agent/projects"
Example response
{ "ok": true, "projects": [ { "id": 1, "name": "Internal", "is_default": true, "tasks": [] }, { "id": 7, "name": "Acme Website", "is_default": false, "tasks": [ {"id": 12, "name": "Homepage"}, {"id": 13, "name": "Contact form"} ] } ] }

GET Log configuration

/api/v1/agent/log-config

Fetches the log level set by admins for this user.

curl -H "Authorization: Bearer dvc_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/agent/log-config"
Example response
{ "ok": true, "log_level": "debug", "levels": ["debug", "info", "warning", "error"] }

Public API v1

Read-only, tenant-scoped REST API for custom integrations. Create and revoke keys in Settings → API keys.

Authentication

Send your public API key as a Bearer token in the Authorization header. Keys start with tpk_ and are scoped to one workspace.

Authorization: Bearer tpk_xxxxxxxxxxxxxxxx

Security tip: Store keys in environment variables. Never commit them to source control or expose them in client-side code.

Base URL

https://www.timeprogress.com/api/v1

GET Whoami

/api/v1/whoami

Returns the authenticated workspace and token metadata.

curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/whoami"
Example response
{ "tenant_id": 1, "scopes": ["read"], "key": { "id": 5, "label": "Zapier", "prefix": "tpk_abc", "created_at": "2026-06-01 08:00:00" } }

GET List users

/api/v1/users
Query Parameters
ParameterTypeDescription
pageintegerPage number (default: 1)
perintegerPage size (default: 50, max: 200)
curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/users?page=1&per=10"
Example response
{ "data": [ { "id": 1, "name": "Alice", "email": "alice@example.com", "role": "Admin", "status": "active", "created_at": "2026-06-01 08:00:00" } ], "page": 1, "per": 10, "total": 5 }

GET List devices

/api/v1/devices
Query Parameters
ParameterTypeDescription
pageintegerPage number (default: 1)
perintegerPage size (default: 50, max: 200)
curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/devices"
Example response
{ "data": [ { "id": 42, "user_id": 1, "uuid": "550e8400-e29b-41d4-a716-446655440000", "os": "windows", "hostname": "ALICE-PC", "agent_version": "0.5.9", "last_seen_at": "2026-06-22 10:00:00", "created_at": "2026-06-01 09:00:00" } ], "page": 1, "per": 50, "total": 3 }

GET Query activity logs

/api/v1/activity
Query Parameters
ParameterTypeDescription
fromstringStart date (YYYY-MM-DD, default 7 days ago)
tostringEnd date (YYYY-MM-DD, default today)
pageintegerPage number
perintegerPage size (max 200)
curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/activity?from=2026-06-15&to=2026-06-22"
Example response
{ "data": [ { "id": 9876, "user_id": 1, "device_id": 42, "kind": "window", "app_name": "windowsterminal", "window_title": "bash", "url": null, "category": "productive", "started_at": "2026-06-22 09:00:00", "ended_at": "2026-06-22 09:05:00", "duration_seconds": 300 } ], "page": 1, "per": 50, "filters": { "from": "2026-06-15", "to": "2026-06-22" } }

GET Daily aggregates

/api/v1/daily-aggregates

Pre-computed productivity roll-ups per user per day. Fastest way to build dashboards.

Query Parameters
ParameterTypeDescription
fromstringStart date (default 7 days ago)
tostringEnd date (default today)
curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/daily-aggregates?from=2026-06-15&to=2026-06-22"
Example response
{ "data": [ { "day": "2026-06-22", "user_id": 1, "total_seconds": 28800, "productive_seconds": 18000, "unproductive_seconds": 3600, "neutral_seconds": 4200, "idle_seconds": 3000, "event_count": 145, "screenshot_count": 48, "first_activity_at": "2026-06-22 09:00:00", "last_activity_at": "2026-06-22 17:00:00" } ], "filters": { "from": "2026-06-15", "to": "2026-06-22" } }

GET Get user

/api/v1/users/{id}

Returns a single user record, including employee_id.

curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/users/1"
Example response
{ "data": { "id": 1, "name": "Alice", "email": "alice@example.com", "employee_id": "EMP-001", "role": "Contributor", "status": "active", "timezone": "UTC", "standard_shift_hours": 8, "created_at": "2026-06-01 08:00:00" } }

GET Attendance

/api/v1/attendance

Per-user, per-day attendance status and shift information. Useful for building attendance dashboards.

Query Parameters
ParameterTypeDescription
fromstringStart date (default 7 days ago)
tostringEnd date (default today)
user_idintegerOptional user filter
curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/attendance?from=2026-06-15&to=2026-06-22"
Example response
{ "data": [ { "day": "2026-06-22", "user_id": 1, "user_name": "Alice", "user_email": "alice@example.com", "status": "present", "shift_start": "09:00", "expected_start": "09:00", "actual_start": "08:58", "first_activity_at": "2026-06-22 08:58:00", "last_seen": "17:05", "last_activity_at": "2026-06-22 17:05:00", "shift_length": "8h 0m", "expected_hours": 8.0, "tracked_hours": 7.75, "offline_hours": 0.0, "actual_hours": 7.75, "progress": 97, "offline_seconds": 0, "active_seconds": 27900, "idle_seconds": 900, "total_seconds": 28800 } ], "filters": { "from": "2026-06-15", "to": "2026-06-22", "user_id": null } }

GET Attendance summary

/api/v1/attendance/summary

Roll-up attendance counts and productivity totals per user over a date range.

Query Parameters
ParameterTypeDescription
fromstringStart date (default 7 days ago)
tostringEnd date (default today)
user_idintegerOptional user filter
curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/attendance/summary?from=2026-06-15&to=2026-06-22"
Example response
{ "data": [ { "user_id": 1, "user_name": "Alice", "user_email": "alice@example.com", "days": 5, "present": 4, "partial": 1, "late": 0, "absent": 0, "active_seconds": 140400, "idle_seconds": 3600, "total_seconds": 144000, "expected_hours": 40.0, "actual_hours": 39.0 } ], "filters": { "from": "2026-06-15", "to": "2026-06-22", "user_id": null } }

GET Shifts

/api/v1/shifts

Returns expanded shift occurrences for each user across a date range. Recurring rules are materialised into individual days.

Query Parameters
ParameterTypeDescription
fromstringStart date (default 7 days ago)
tostringEnd date (default today)
user_idintegerOptional user filter
curl -H "Authorization: Bearer tpk_xxxxxxxx" \ "https://www.timeprogress.com/api/v1/shifts?from=2026-06-22&to=2026-06-22"
Example response
{ "data": [ { "id": 12, "user_id": 1, "date": "2026-06-22", "type": "shift", "start_time": "09:00", "end_time": "17:00", "duration_minutes": 480, "recurrence": "weekly", "day_of_week": 0, "effective_from": "2026-01-01", "effective_until": null } ], "filters": { "from": "2026-06-22", "to": "2026-06-22", "user_id": null } }

Error Codes

Common HTTP status codes and error response format.

CodeStatusMeaning
200OKRequest successful
201CreatedResource created (enrollment, screenshot upload)
400Bad RequestMissing or invalid parameters
401UnauthorizedInvalid or missing token/API key
403ForbiddenAction not allowed (e.g. screenshots disabled)
404Not FoundResource does not exist
413Payload Too LargeBatch >500 items or image >8 MB
422UnprocessableBusiness rule violation (e.g. consent required)
429Too Many RequestsRate limit exceeded
500Server ErrorSomething went wrong on our end

Error response format

{ "error": "invalid_credentials", "message": "Email or password is incorrect." }

Rate Limiting

Current limits for agent and public API endpoints.

Agent endpoints

EndpointLimit
POST /login10 attempts / 10 min / IP
POST /register20 attempts / 10 min / IP
POST /activity120 batches / min / device
POST /screenshots60 uploads / min / device

Public API

Public API keys currently share a workspace-level rate limit. If you hit limits, reduce request frequency, cache responses, and implement exponential backoff.

Best practices

  • Cache aggregate data where possible.
  • Use the largest per value you need (up to 200).
  • Retry 429 responses with exponential backoff.
  • Don't poll endpoints more often than once per minute.

Managing Categories

Organize activities so reports and productivity scores are meaningful.

What are categories?

Categories group applications and websites into Productive, Unproductive, or Neutral buckets. You can also create custom category names.

Using the Category Builder

  1. Go to Settings → Categories.
  2. Search or pick activities from the discovered list.
  3. Choose a rating: Productive, Neutral, or Unproductive.
  4. Set the scope: Global (all users) or user-specific.
  5. Save. Existing activity will be reclassified on the next aggregation pass.

Regex rules

For advanced cases, create manual rules that match window titles or URLs with a regular expression. Rules are validated before saving.

AI-assisted categories

If Azure OpenAI is configured, click Build with AI to get category suggestions. A heuristic fallback is used when AI is unavailable.

Generating Reports

Turn raw activity into actionable insights.

Date and user filters

Pick a date range and choose between all users or a single user. Managers and admins can view tenant-wide data; members see only their own.

Exporting

Every report page has a CSV export button. Project & Tasks also has PDF. Use the print layout for clean paper copies.

Automated reporting

The weekly timesheet email is sent automatically on the last day of your configured week. It includes tracked hours, productive time, a productivity score, project hours, and a category pie chart.

User Management

Add, configure, and secure workspace members.

Adding members

  1. Open Team and click Invite Member.
  2. Enter the user's email address.
  3. Select a role. Owner and Admin have full access; Viewer is read-only.
  4. Send the invitation.

User roles

RoleTypical access
Owner / AdminFull workspace access
Manager / Team LeadTeam reports, projects, schedules
HRAttendance and payroll
Contributor / MemberOwn activity and time tracking
Viewer / Time Reporter / AuditorRead-only or limited reports

Disabling or deleting users

Disabled users cannot sign in or track time. Deletion removes the user from the workspace. The owner account cannot be deleted to prevent lockouts.

Projects & Tasks Guide

Track time against client work and internal goals.

Creating a project

  1. Go to Projects & Tasks and click Add Project.
  2. Enter the project name.
  3. Assign all members or specific users.
  4. Set a time limit if needed (per week/month/etc.).
  5. Save.

Adding tasks

Open a project, click the task count or actions menu, and add tasks. Users can then pick a project/task from the agent's floating panel.

Archiving

Archive completed projects to keep the active list clean. Archived projects remain available in reports.

Frequently Asked Questions

Quick answers to common questions.

How do I track time automatically?

Install the Time Progress agent and sign in. It runs in the background and tracks your active applications, window titles, and browser URLs.

What data does the agent capture?

App name, window title, active/idle state, aggregate input counters, and periodic screenshots if enabled. We never capture keystroke content, passwords, clipboard, files, webcam, microphone, or location.

How are meetings detected?

Meetings are detected from foreground window titles for Teams, Zoom, Google Meet, Webex, Skype, GoTo, BlueJeans, and Slack huddles.

Can I export my data?

Yes. Reports can be exported to CSV and PDF. You can also use the Public API or request a full JSON export from Privacy.

How do I create a public API key?

Go to Settings → API keys, click Generate New Key, give it a label, and copy the token. You need API-management permission to create keys.

What happens when the trial ends?

You will receive reminder emails at 3, 2, and 1 days before expiry. If no paid plan is active, the workspace is suspended until you upgrade.

Can users see their own screenshots?

Visibility depends on role permissions and the configured screenshot visibility delay. Admins can view screenshots after the delay.

Does Time Progress work offline?

Yes. The agent stores events and screenshots locally and syncs automatically when connectivity returns.

Troubleshooting

Common issues and how to fix them.

Agent is not tracking activities

  • Check that the agent is running in the system tray.
  • Confirm you are signed in (tray menu shows your email).
  • Restart the agent from the tray menu.
  • Check your internet connection.
  • Reinstall the agent if files are corrupted.

API returns 401 Unauthorized

  • Verify the token has not been revoked.
  • Ensure the header is exactly Authorization: Bearer <token>.
  • For agent endpoints, use the device token (dvc_...); for public API, use an API key (tpk_...).

API returns 429 Too Many Requests

  • Reduce polling frequency.
  • Batch activity uploads (max 500 per call).
  • Implement exponential backoff.

Categories are not applying

  • Save your category changes.
  • Check that the app name or regex matches exactly.
  • Verify the scope (Global vs user-specific).
  • Wait for the next aggregation or new activity to appear.

Screenshots are not uploading

  • Confirm screenshots are enabled in workspace settings.
  • Check the agent logs at %LOCALAPPDATA%\TimeProgress\logs\timeprogress.log.
  • Ensure the image is under 8 MB.

Contact Support

We're here to help.

Email

support@timeprogress.com

Support Ticket

Open a ticket

Documentation

You're looking at it. Use the search bar or sidebar to find answers.