# Get Daily Timeline Report Retrieve daily timeline report data for a specific date, paginated by user IDs. Returns time entries with details for each user including start/end times, project, task, activity description, tracking method, and activity metrics.\n\nKey Features:\n- Single date only: This endpoint accepts only one date (not a date range). Date must be within the last year and not more than a year in the future.\n- Pagination: Results are paginated by user_ids. Default is 30 users per page, maximum 100.\n- Rate visibility: total_amount and currency fields are only included if the workspace has rate_status = 1 (rate visibility enabled).\n- Activity metrics: Both user-level and time entry-level activity_level are calculated using the TimelineService::activity() method based on mouse, keyboard, and scroll actions.\n- Timezone handling: Times are returned in ISO 8601 format with timezone offset based on the workspace owner's system_timezone.\n- Security: Only workspace owners and executive managers can access this endpoint. Endpoint: GET /reports/daily-timeline Version: 2.0.0 Security: oauth2, apiKey ## Query parameters: - `workspace_id` (integer, required) ID of the workspace (team_id from owner_user_rel table) Example: 1 - `date` (string, required) Date for the timeline report (Y-m-d format, e.g., 2024-01-15). Only single date is supported, not a date range. Date must be within the last year and not more than a year in the future. Example: "2024-01-15" - `user_ids` (array) Filter by specific user IDs. Can be provided as comma-separated values (e.g., "100,101,102") or as an array. If not provided, returns all users with timeline entries for the specified date. Example: [100,101,102] - `page` (integer) Page number for pagination. Results are paginated by user_ids, so each page contains up to per_page users with all their time entries. Example: 1 - `per_page` (integer) Number of users per page. Each user includes all their time entries for the date. Minimum: 1, Maximum: 100, Default: 30. Example: 30 ## Response 200 fields (application/json): - `success` (boolean) Example: true - `data` (object) - `data.date` (string, required) Date for the timeline report Example: "2024-01-15" - `data.total_users` (integer, required) Total number of users with timeline entries for this date Example: 5 - `data.per_page` (integer, required) Number of users per page Example: 30 - `data.current_page` (integer, required) Current page number Example: 1 - `data.total_pages` (integer, required) Total number of pages Example: 1 - `data.users` (array, required) Array of users with their timeline entries for this date - `data.users.user_id` (integer, required) User ID Example: 100 - `data.users.member` (string,null) Full name of the user Example: "John Doe" - `data.users.total_minutes` (integer, required) Total tracked minutes for this user on this date Example: 480 - `data.users.inactive_minutes` (integer) Total inactive minutes for this user on this date Example: 45 - `data.users.total_amount` (number,null) Total amount for this user across all time entries. Conditional field: Only included if workspace has rate_status = 1 (rate visibility enabled). Sum of all time entry amount values from the timeline entries. Will be 0 if no amounts are set, but still included if rate visibility is enabled. Example: 240.5 - `data.users.currency` (string,null) Currency code for the total amount. Conditional field: Only included if workspace has rate_status = 1 (rate visibility enabled). Retrieved from team (owner_user_rel table) or falls back to workspace owner's currency. Will be null if not set, but still included if rate visibility is enabled. Example: "USD" - `data.users.activity_level` (integer,null) Overall activity level percentage (0-100) for the user across all time entries for this date. Calculated using TimelineService::activity() method based on aggregated mouse_actions, keyboard_actions, scroll_actions from all time entries, divided by total_minutes. Formula: (avg_actions_per_minute / normative_actions_per_minute) * 100, capped at 100. Always included (not conditional). Example: 75 - `data.users.time_entries` (array, required) Array of time entries (timeline intervals) for this user - `data.users.time_entries.start_time` (string,null) Start time of the time entry in ISO 8601 format with timezone offset. Time is displayed in the workspace owner's system_timezone (e.g., 2024-01-15T09:00:00+04:00 for Asia/Yerevan timezone). Format: YYYY-MM-DDTHH:mm:ss±HH:mm. Example: "2024-01-15T09:00:00+04:00" - `data.users.time_entries.end_time` (string,null) End time of the time entry in ISO 8601 format with timezone offset. Time is displayed in the workspace owner's system_timezone (e.g., 2024-01-15T12:30:00+04:00 for Asia/Yerevan timezone). Format: YYYY-MM-DDTHH:mm:ss±HH:mm. Example: "2024-01-15T12:30:00+04:00" - `data.users.time_entries.total_minutes` (integer) Total minutes for this time entry Example: 210 - `data.users.time_entries.inactive_minutes` (integer) Inactive minutes for this time entry Example: 15 - `data.users.time_entries.project_id` (integer,null) Project ID (null if no project assigned) Example: 10 - `data.users.time_entries.contract_id` (integer,null) Contract ID (null if no contract assigned) Example: 20 - `data.users.time_entries.task_id` (integer,null) Task ID (null if no task assigned) Example: 5 - `data.users.time_entries.task_title` (string,null) Task title (if assigned) Example: "Implement feature" - `data.users.time_entries.project_name` (string,null) Project name Example: "Project Alpha" - `data.users.time_entries.timezone` (string) Timezone identifier for this time entry. Retrieved from workspace owner's system_timezone field in the users table, defaults to "UTC" if not set. This is the timezone used for start_time and end_time formatting. Example: "Asia/Yerevan" - `data.users.time_entries.total_amount` (number,null) Amount for this time entry. Conditional field: Only included if workspace has rate_status = 1 (rate visibility enabled). Taken directly from the amount field in the user_timeline table. Will be 0 if no amount is set, but still included if rate visibility is enabled. Example: 105.25 - `data.users.time_entries.track_type` (string,null) Type of tracking method used for this time entry. Possible values: "Desktop tracker", "Extension tracker", "Web tracker", "Mobile tracker", "Manually added time", "Idle time", "Paid leave", "Paid break", "Paid holiday". Retrieved directly from the track_type field in the timeline entry. Example: "Desktop tracker" - `data.users.time_entries.activity_description` (string,null) Activity description or memo for this time entry. Retrieved directly from the memo field in the timeline entry. Can be null if no memo was recorded. Example: "Working on API integration" - `data.users.time_entries.mouse_actions` (integer,null) Total number of mouse actions recorded for this time entry. This is the cumulative count for the entire time entry duration, not per minute. Retrieved from the mouse_actions field in the timeline entry. Example: 945 - `data.users.time_entries.keyboard_actions` (integer,null) Total number of keyboard actions recorded for this time entry. This is the cumulative count for the entire time entry duration, not per minute. Retrieved from the keyboard_actions field in the timeline entry. Example: 2520 - `data.users.time_entries.scroll_actions` (integer,null) Total number of scroll actions recorded for this time entry. This is the cumulative count for the entire time entry duration, not per minute. Retrieved from the scroll field in the timeline entry. Example: 168 - `data.users.time_entries.activity_level` (integer) Activity level percentage (0-100) for this specific time entry. Always included. Calculated using TimelineService::activity() method based on mouse_actions, keyboard_actions, scroll_actions, and total_minutes. Formula: ((mouse_actions + keyboard_actions + scroll_actions) / total_minutes) / normative_actions_per_minute * 100, capped at 100. Returns 0 if total_minutes is 0. Example: 85 - `message` (string) Example: "Daily timeline report retrieved successfully" - `meta` (object) - `meta.api_version` (string) Example: "2.0.0" - `meta.timestamp` (string) ## Response 400 fields (application/json): - `success` (boolean, required) - `message` (string, required) Error message describing what went wrong Example: "An error occurred" - `error` (string,null) Optional additional error details Example: "Internal Server Error" - `meta` (object, required) - `meta.api_version` (string) Example: "2.0.0" - `meta.timestamp` (string) ## Response 401 fields (application/json): - `success` (boolean, required) - `message` (string, required) Error message describing what went wrong Example: "An error occurred" - `error` (string,null) Optional additional error details Example: "Internal Server Error" - `meta` (object, required) - `meta.api_version` (string) Example: "2.0.0" - `meta.timestamp` (string) ## Response 403 fields (application/json): - `success` (boolean, required) - `message` (string, required) Error message describing what went wrong Example: "An error occurred" - `error` (string,null) Optional additional error details Example: "Internal Server Error" - `meta` (object, required) - `meta.api_version` (string) Example: "2.0.0" - `meta.timestamp` (string) ## Response 500 fields (application/json): - `success` (boolean, required) - `message` (string, required) Error message describing what went wrong Example: "An error occurred" - `error` (string,null) Optional additional error details Example: "Internal Server Error" - `meta` (object, required) - `meta.api_version` (string) Example: "2.0.0" - `meta.timestamp` (string)