# Create Time Entry Create a new time entry manually. This is useful for adding historical time entries or entries that weren't tracked in real-time. Requires workspace owner or executive manager permissions. Important Notes: - Time entries are validated against member and contract limits - Overlapping time entries may result in partial time being saved - The response will indicate if only partial time was added due to limits or overlaps Endpoint: POST /time-entries Version: 2.0.0 Security: oauth2, apiKey ## Request fields (application/json): - `workspace_id` (integer, required) ID of the workspace Example: 1 - `user_id` (integer, required) ID of the user Example: 100 - `contract_id` (integer,null) Contract ID (project-member assignment) Example: 20 - `task_id` (integer,null) Optional task ID Example: 5 - `notes` (string,null) Activity notes or description Example: "Working on feature implementation" - `date` (string, required) Date of the time entry (format: Y-m-d) Example: "2026-01-29" - `start_time` (string, required) Start time in HH:mm format Example: "09:00" - `end_time` (string, required) End time in HH:mm format (must be after start_time) Example: "17:00" ## Response 201 fields (application/json): - `success` (boolean) Example: true - `message` (string) Human-readable message indicating the result. May include warnings about partial saves. Example: "8 hr successfully added for John Doe." - `saved_minutes` (integer) Number of minutes actually saved. May be less than requested if limits were reached. Example: 480 - `data` (object) - `data.user_id` (integer) Example: 100 - `data.contract_id` (integer,null) Example: 20 - `data.project_id` (integer,null) Example: 10 - `data.project_name` (string,null) Example: "Website Redesign" - `data.task_id` (integer,null) Example: 5 - `data.task_title` (string,null) Example: "Update homepage design" - `data.activity_description` (string,null) Example: "Working on feature implementation" - `data.method` (string) Tracking method description (e.g., 'Desktop tracker', 'Mobile tracker', 'Manually added time', 'Extension tracker', 'Web tracker', 'Idle time', 'Paid leave', 'Break', 'Paid holiday') Example: "Manually added time" - `data.date` (string) Example: "2026-01-29" - `data.start_time` (string) Example: "2026-01-29T09:00:00Z" - `data.end_time` (string) Example: "2026-01-29T17:00:00Z" - `data.duration_minutes` (integer) Example: 480 - `meta` (object) - `meta.api_version` (string) Example: "2.0.0" - `meta.timestamp` (string) Example: "2026-01-29T12:00:00.000000Z" ## 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 404 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 422 fields (application/json): - `success` (boolean) - `message` (string) Example: "Time cannot be added for John Doe — member limit reached." - `saved_minutes` (integer) - `meta` (object) - `meta.api_version` (string) Example: "2.0.0" - `meta.timestamp` (string) Example: "2026-01-29T12:00:00.000000Z" ## 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)