{ "openapi": "3.0.1", "info": { "description": "## Introduction\nBy using this REST API, you can easily integrate Clockify with your own add-ons, push and pull data\nbetween Clockify and other tools, and create custom add-ons on [CAKE.com Marketplace](https://marketplace.cake.com).\nWhether you’re looking to automate time tracking, generate custom reports, or build other custom\nintegrations, our API provides the flexibility and power you need to get the job done. If you\nhave any questions or run into any issues while using our API, don’t hesitate to reach out to us for help.\nYou can also post questions on Stack Overflow with the Clockify tag to get help from the community.\n## Authentication\nTo authenticate your requests to your API, make sure to include either the ‘X-Api-Key’ or the\n‘X-Addon-Token’ in the request header, containing your API or Addon key. If your workspace is\non a subdomain (e.g. subdomain.clockify.me), you’ll need to generate a new API key in your\nProfile Settings that will work specifically for that workspace. This ensures that you’re\naccessing data from the correct workspace and helps maintain the security of your data.\n## Webhooks\nWebhooks can enhance your workflow by keeping your add-on up-to-date with the latest changes in\nClockify. With Clockify’s webhooks you can receive real-time notifications when certain events such as\nstarting a timer or deleting a time entry occur in Clockify.\nDepending on the workspace plan, workspace owners and admins can create:\n\n* Up to 3 webhooks on **FREE** plan\n* Up to 10 webhooks per user, with a total of 100 webhooks per entire workspace\non **BASIC**, **STANDARD** and **PRO** plans\n* Up to 100 webhooks per user, with a total of 300 webhooks per entire workspace on **ENTERPRISE** plan\n\n## Rate limiting\nOur REST API has a specific rate limit of 50 requests per second (by addon on one workspace) when\naccessed using X-Addon-Token. Exceeding this limit will result in an error message with the description\n\"Too many requests\".\n## Pagination\nOur REST API supports pagination for all synchronous GET endpoints that retrieve lists of entities.\nWhen an endpoint accepts the `page` and `pageSize` query parameters, it will return a paginated response.\n\nTo control the data returned in a paginated request, you can use the following optional query parameters.\n\n- **page** (integer): The page number you wish to retrieve. This is 1-indexed. If this parameter is omitted,\nthe API will default to the first page (page=1).\n- **pageSize** (integer): The number of items to include on each page. If this parameter is omitted,\na default page size will be used.\n\nEvery response from an endpoint that supports these parameters will include a custom `Last-Page` header.\nThis header provides a simple way to determine if you have reached the end of the data set.\n\n- **true:** The current page is the final page; no more data is available.\n- **false:** Additional pages can be fetched.\n## API URLs\nRefer to the list on what URL to use base on the subdomain and data region settings of your workspace.\n* Global - can be used by workspaces with or without subdomain.\n * Regular: https://api.clockify.me/api/v1/file/image\n * Reports: https://reports.api.clockify.me/v1/workspaces/{workspaceId}/reports/detailed\n* Regional\n * Non-subdomain\n * Regular: https://euc1.clockify.me/api/v1/file/image\n * Reports: https://use2.clockify.me/report/v1/workspaces/{workspaceId}/reports/detailed\n * Subdomain\n * Regular: https://euc1.clockify.me/api/v1/file/image\n * Reports: https://yoursubdomainname.clockify.me/report/v1/workspaces/{workspaceId}/reports/detailed\n* Developer\n * Regular: https://developer.clockify.me/api/v1/file/image\n * Reports: https://developer.clockify.me/report/v1/workspaces/{workspaceId}/reports/detailed\n## Regional Server Prefixes\nIf your workspace is in a specific region, you need to change your URL prefix to access v1 API endpoints.\nFor example, this is how **backend** api [v1/file/image](#tag/User/operation/uploadImage) endpoint\nwould look in EU region:\n[https://euc1.clockify.me/api/v1/file/image](https://euc1.clockify.me)\n\nBelow are the available regional server prefixes:\n* **EU (Germany)**: euc1\n* **USA**: use2\n* **UK**: euw2\n* **AU**: apse2\n\n\n## Breaking changes\nBreaking changes in APIs are modifications that disrupt existing integrations,\nrequiring users to update their applications to maintain functionality.\nThese changes can lead to failures or unexpected results if not addressed.\nSee the list of [breaking changes](breaking-changes/).\n\n## Experimental APIs\nThe experimental API has been thoroughly tested and is ready for use in production. However, please note that user feedback may lead to changes in the API’s structure or functionality. If you choose to use the experimental API, be prepared to modify your application code accordingly to accommodate any updates.", "title": "Clockify API", "version": "v1", "x-logo": { "altText": "Clockify logo", "url": "https://clockify.me/downloads/clockify_logo_primary_black_margin.png" } }, "tags": [ { "name": "User", "x-displayName": "User" }, { "name": "backend-app", "x-displayName": "backend-app" }, { "name": "Workspace", "x-displayName": "Workspace" }, { "name": "Webhooks", "x-displayName": "Webhooks" }, { "name": "Approval", "x-displayName": "Approval" }, { "name": "Client", "x-displayName": "Client" }, { "name": "Custom fields", "x-displayName": "Custom fields" }, { "name": "Entity changes (Experimental)", "x-displayName": "Entity changes (Experimental)", "description": "For use case see [Entity Changes Use Cases](#tag/Entity-Changes:-Use-cases)" }, { "name": "Expense", "x-displayName": "Expense" }, { "name": "Holiday", "x-displayName": "Holiday" }, { "name": "Invoice", "x-displayName": "Invoice" }, { "name": "Project", "x-displayName": "Project" }, { "name": "Task", "x-displayName": "Task" }, { "name": "Scheduling", "x-displayName": "Scheduling" }, { "name": "Tag", "x-displayName": "Tag" }, { "name": "Template (Deprecated)", "x-displayName": "Template (Deprecated)", "description": "This endpoint group is deprecated and should not be used." }, { "name": "Time entry", "x-displayName": "Time entry" }, { "name": "Balance", "x-displayName": "Balance" }, { "name": "Policy", "x-displayName": "Policy" }, { "name": "Time Off", "x-displayName": "Time Off" }, { "name": "Group", "x-displayName": "Group" }, { "name": "Shared Report", "x-displayName": "Shared Report" }, { "name": "reports-app", "x-displayName": "reports-app" }, { "name": "Team Report", "x-displayName": "Team Report" }, { "name": "Time Entry Report", "x-displayName": "Time Entry Report" }, { "name": "Expense Report", "x-displayName": "Expense Report" }, { "name": "Audit Log Report", "x-displayName": "Audit Log Report" }, { "name": "auditlog-api-app", "x-displayName": "auditlog-api-app" }, { "name": "Entity Changes: Use cases", "description": "This section provides a step-by-step guide that shows you how to use the Entity Changes API to keep your system up to date with time entry data, including custom field values, without re-downloading everything each time.\n\n> ### 💡 Note\n> Currently, this guide covers only one use case (custom field changes), but we plan to add more in the future. \n\n# Use Case: Keep Custom Field Values in Sync - Entity Changes Based on Detailed Report\n\nThis use case describes how to retrieve a full set of data (via the Detailed Report), then use incremental updates of custom fields or [other supported types](#tag/Entity-Changes:-Use-cases/Use-Case:-Keep-Custom-Field-Values-in-Sync-Entity-Changes-Based-on-Detailed-Report/Supported-types) to stay in sync, including new, updated or deleted records. \n\n## Step 1: Get Initial Data Using the Detailed Report\n\nStart by fetching time entries for a specified date range using the Detailed Report API. This is your baseline data (base dataset). \n\nBelow is an example that fetches data from `May 1 to May 20, 2025`.\n\nExample: Get data from May 1 to May 20, 2025.\n\n * **Use the `curl` command below:**\n```\ncurl --location 'https://{API_BASE_URL}/report/workspaces/{WORKSPACE_ID}/reports/detailed' \\\n--header 'Accept: application/json' \\\n--data '{\n \"dateRangeStart\": \"2025-05-01T00:00:00.000Z\",\n \"dateRangeEnd\": \"2025-05-20T23:59:59.999Z\"\n}'\n```\n\n * **Sample response:**\n```json\n {\n \"timeentries\": [\n {\n \"_id\": \"1\",\n \"description\": \"Time entry 1\",\n \"timeInterval\": {\n \"start\": \"2025-05-18T01:00:00Z\",\n \"end\": \"2025-05-18T09:00:00.000Z\"\n },\n \"customFields\": [\n {\n \"customFieldId\": \"6808e9a6b77db953ea0d3f73\",\n \"value\": \"custom field value 1\"\n }\n ]\n },\n {\n \"_id\": \"2\",\n \"description\": \"Time entry 2\",\n \"timeInterval\": {\n \"start\": \"2025-05-19T01:00:00Z\",\n \"end\": \"2025-05-19T09:00:00.000Z\"\n },\n \"customFields\": [\n {\n \"customFieldId\": \"6808e9a6b77db953ea0d3f73\",\n \"value\": \"Custom field value 2\"\n }\n ]\n }\n ]\n }\n```\n\nThe response contains a list of time entries with all current custom field values. \nSave this in your database. You’ll use it to apply future changes\n\n> ### 💡 Note\n> After this, you don’t need to fetch the full report again. Simply use the following steps to apply the changes. \n\n## Step 2: Retrieve Created Custom Field Values\n\nFetch any new custom field values added after the date range you fetched in Step 1.\n\nExample: Get newly created values after May 20, 2025.\n\n> ### 💡 Note\n> For the API specification see [Created entities - Custom field values ](#tag/Entity-changes-(Experimental)/operation/getCreatedEntityInfo)\n\n\n* **Use the `curl` command below:**\n\n```bash\ncurl -X GET \"https://{API_BASE_URL}/v1/workspaces/{WORKSPACE_ID}/entities/created?type=TIME_ENTRY_CUSTOM_FIELD_VALUE&start=2025-05-21T00:00:00Z&end=2025-05-22T00:00:00Z&limit=30&page=1\"\n```\n* **Sample response:**\n```json\n [\n {\n \"auditMetadata\": {\n \"updatedAt\": \"2025-05-21T04:00:00Z\",\n \"createdAt\": \"2025-05-21T03:00:00Z\"\n },\n \"documentType\": \"TIME_ENTRY_CUSTOM_FIELD_VALUE\",\n \"id\": \"...\",\n \"customFieldId\": \"6808e9a6b77db953ea0d3f85\",\n \"timeEntryId\": \"3\",\n \"value\": \"Custom field value 3\"\n \"sourceType\": \"TIMEENTRY\"\n }\n ]\n```\n\nThe response shows only newly created custom field values. \n\nEach record has a timeEntryId, so you know which entry to update.\n\nAdd these new values to your stored data.\n\n> ### 💡 Note\n> Run this daily, weekly, or as often as your app needs updates.\n\n\n## Step 3: Retrieve Updated Custom Field Values\n**Next**, fetch custom field values that were updated after your original data.\n\nExample: Get updates after May 20, 2025.\n\n> ### 💡 Note\n> For API specification see [Updated entities - Custom field values ](#tag/Entity-changes-(Experimental)/operation/getUpdatedEntityInfo) \n\n * **Use the `curl` command below:**\n\n\n```bash\ncurl -X GET \"https://{API_BASE_URL}/v1/workspaces/{WORKSPACE_ID}/entities/updated?type=TIME_ENTRY_CUSTOM_FIELD_VALUE&start=2025-05-21T00:00:00Z&end=2025-05-22T00:00:00Z&limit=30&page=1\"\n```\n* **Sample response:**\n```json\n [\n {\n \"auditMetadata\": {\n \"updatedAt\": \"2025-05-21T04:51:20Z\",\n \"createdAt\": \"2025-05-19T04:51:10Z\"\n },\n \"documentType\": \"TIME_ENTRY_CUSTOM_FIELD_VALUE\",\n \"id\": \"...\",\n \"customFieldId\": \"6808e9a6b77db953ea0d3f73\",\n \"timeEntryId\": \"2\",\n \"value\": \"Custom field value 2 - Updated\"\n \"sourceType\": \"TIMEENTRY\"\n }\n ]\n```\nThe response shows only updated values within the specified date range. \n\nUpdates are linked to their timeEntryId.\n\nUpdate the matching records in your database.\n\n> ### 💡 Note\n> If a record was both created and updated in the same date range, it will only appear in the /created response, not /updated.\n\n## Step 4: Retrieve or Identify Deleted Custom Field Values\nFinally, handle deletions. Use this step to retrieve any custom field values that were deleted after your initial date range and remove them from your own database. \n\nExample: Get deletions after May 20, 2025.\n\n> ### 💡 Note\n> For more information about this API, see [Deleted entities - Custom field values ](#tag/Entity-changes-(Experimental)/operation/getDeletedEntityInfo)\n\n* **Use the `curl` command below:**\n```\ncurl -X GET \"https://{API_BASE_URL}/v1/workspaces/{WORKSPACE_ID}/entities/deleted?type=TIME_ENTRY_CUSTOM_FIELD_VALUE&start=2025-05-21T00:00:00Z&end=2025-05-22T00:00:00Z&limit=30&page=1\"\n```\n\n* **Sample response:**\n```json\n [\n {\n \"id\": \"...\",\n \"deletionBinId\": \"....\",\n \"deletedAt\": \"2025-05-21T23:15:54.790Z\",\n \"documentType\": \"TIME_ENTRY_CUSTOM_FIELD_VALUE\",\n \"document\": {\n \"customFieldId\": \"6808e9a6b77db953ea0d3f73\",\n \"timeEntryId\": \"1\",\n \"value\": \"custom field value 1\",\n \"sourceType\": \"TIMEENTRY\"\n }\n }\n ]\n```\n\nThe response contains references to the deleted values (e.g. timeEntryId and field ID). \n\nRemove or archive these records in your system.\n\n> ### 💡 Note \n> If a value was created and deleted in the same date range, it will not show up in the deleted results.\n\n## Supported types\n\n This guide focuses on tracking custom field values `(type=TIME_ENTRY_CUSTOM_FIELD_VALUE)`.\n\n The same approach can be applied to other data types. Simply change the type parameter in your requests and you can use the same steps for all supported types:\n\n * `TIME_ENTRY`\n * `TIME_ENTRY_RATE`\n * `TIME_ENTRY_CUSTOM_FIELD_VALUE`\n\n We may support more types in the future as the system evolves.\n", "x-displayName": "Entity Changes: Use cases" }, { "name": "Scheduling (Deprecated)", "x-displayName": "Scheduling (Deprecated)", "description": "This endpoint group contains deprecated endpoints from the [Scheduling](#tag/Scheduling) endpoint group." }, { "name": "Workspace (Deprecated)", "x-displayName": "Workspace (Deprecated)", "description": "This endpoint group contains deprecated endpoints from the [Workspace](#tag/Workspace) endpoint group." } ], "paths": { "/v1/file/image": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "uploadImage", "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "description": "Image to be uploaded", "format": "binary" } }, "required": [ "file" ] } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadFileResponseV1" } } }, "description": "OK" } }, "summary": "Add a photo", "tags": [ "User" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/user": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getLoggedUser", "parameters": [ { "description": "If set to true, memberships will be included.", "example": true, "in": "query", "name": "include-memberships", "required": false, "schema": { "type": "boolean", "description": "If set to true, memberships will be included.", "example": true, "default": false } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserDtoV1" } } }, "description": "OK" } }, "security": [ { "MarketplaceKeyAuth": [] }, { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ], "summary": "Get currently logged-in user's info", "tags": [ "User" ] } }, "/v1/workspaces": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getWorkspacesOfUser", "parameters": [ { "description": "If provided, you'll get a filtered list of workspaces where you have any of the specified roles. Owners are not counted as admins when filtering.", "example": [ "WORKSPACE_ADMIN", "OWNER" ], "in": "query", "name": "roles", "required": false, "schema": { "type": "string", "enum": [ "WORKSPACE_ADMIN", "OWNER", "TEAM_MANAGER", "PROJECT_MANAGER" ] } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } } }, "description": "OK" } }, "security": [ { "MarketplaceKeyAuth": [] }, { "ApiKeyAuth": [] } ], "summary": "Get all my workspaces", "tags": [ "Workspace" ] }, "post": { "operationId": "createWorkspace", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWorkspaceRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "Created" } }, "security": [ { "ApiKeyAuth": [] } ], "summary": "Add a workspace", "tags": [ "Workspace" ] } }, "/v1/workspaces/{workspaceId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getWorkspaceOfUser", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "OK" } }, "summary": "Get workspace info", "tags": [ "Workspace" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/addons/{addonId}/webhooks": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getAddonWebhooks", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an addon identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "path", "name": "addonId", "required": true, "schema": { "type": "string", "description": "Represents an addon identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhooksDtoV1" } } }, "description": "OK" } }, "summary": "Get all webhooks for addon on a workspace", "tags": [ "Webhooks" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/approval-requests": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getApprovalRequests", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Filters results based on the provided approval state.", "example": "PENDING", "in": "query", "name": "status", "required": false, "schema": { "type": "string", "enum": [ "PENDING", "APPROVED", "WITHDRAWN_APPROVAL" ] } }, { "description": "Represents the column name to be used as sorting criteria.", "example": "START", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "ID", "USER_ID", "START", "UPDATED_AT" ] } }, { "description": "Represents the sorting order.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ApprovalDetailsDtoV1" } } } }, "description": "OK" } }, "summary": "Get approval requests", "tags": [ "Approval" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createApprrovalRequest", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateApprovalRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApprovalRequestDtoV1" } } }, "description": "Created" } }, "summary": "Submit approval request", "tags": [ "Approval" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/approval-requests/resubmit-entries-for-approval": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "resubmitApprovalRequest", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateApprovalRequest" } } }, "required": true }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApprovalRequestDtoV1" } } }, "description": "OK" } }, "summary": "Submit non pending/approved entries/expenses for approval to an existing approval request", "tags": [ "Approval" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/approval-requests/users/{userId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "createApprovalForOther", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateApprovalRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApprovalRequestDtoV1" } } }, "description": "Created" } }, "summary": "Submit an approval request for a user", "tags": [ "Approval" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/approval-requests/users/{userId}/resubmit-entries-for-approval": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "resubmitApprovalRequestForOther", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateApprovalRequest" } } }, "required": true }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ApprovalRequestDtoV1" } } }, "description": "OK" } }, "summary": "Re-submit rejected/withdrawn entries/expenses for an approval of a user", "tags": [ "Approval" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/approval-requests/{approvalRequestId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "patch": { "operationId": "updateApprovalStatus", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an approval request identifier across the system.", "example": "940ab5acb07987125438b65y", "in": "path", "name": "approvalRequestId", "required": true, "schema": { "type": "string", "description": "Represents an approval request identifier across the system.", "example": "940ab5acb07987125438b65y" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateApprovalRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApprovalRequestDtoV1" } } }, "description": "OK" } }, "summary": "Update an approval request", "tags": [ "Approval" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/clients": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getClients", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Filters client results that matches with the string provided in their client name.", "example": "Client X", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "Filters client results that matches with the string provided in their client name.", "example": "Client X" } }, { "description": "Column name that will be used as criteria for sorting results.", "example": "NAME", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "description": "Column name that will be used as criteria for sorting results.", "example": "NAME", "default": "NAME" } }, { "description": "Sorting mode", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string" } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "Filter whether to include archived clients or not.", "example": false, "in": "query", "name": "archived", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ClientWithCurrencyDtoV1" } } } }, "description": "OK" } }, "summary": "Find clients on a workspace", "tags": [ "Client" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createClient", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateClientRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientWithCurrencyDtoV1" } } }, "description": "Created" } }, "summary": "Add a new client", "tags": [ "Client" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/clients/{id}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteClient", "parameters": [ { "description": "Represents a client identifier across the system.", "example": "44a687e29ae1f428e7ebe305", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a client identifier across the system.", "example": "44a687e29ae1f428e7ebe305" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientDtoV1" } } }, "description": "OK" } }, "summary": "Delete a client", "tags": [ "Client" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getClient", "parameters": [ { "description": "Represents a client identifier across the system.", "example": "44a687e29ae1f428e7ebe305", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a client identifier across the system.", "example": "44a687e29ae1f428e7ebe305" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientWithCurrencyDtoV1" } } }, "description": "OK" } }, "summary": "Get a client by ID", "tags": [ "Client" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateClient", "parameters": [ { "description": "Represents a client identifier across the system.", "example": "44a687e29ae1f428e7ebe305", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a client identifier across the system.", "example": "44a687e29ae1f428e7ebe305" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "in": "query", "name": "archive-projects", "required": false, "schema": { "type": "boolean" } }, { "in": "query", "name": "mark-tasks-as-done", "required": false, "schema": { "type": "boolean" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateClientRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientDtoV1" } } }, "description": "OK" } }, "summary": "Update a client", "tags": [ "Client" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/cost-rate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "setWorkspaceCostRate", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CostRateRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "OK" } }, "summary": "Update workspace cost rate", "tags": [ "Workspace" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/custom-fields": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "ofWorkspace", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "If provided, you'll get a filtered list of custom fields that contain the provided string in their name.", "example": "location", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of custom fields that contain the provided string in their name.", "example": "location" } }, { "description": "If provided, you'll get a filtered list of custom fields that matches the provided string with the custom field status.", "example": "VISIBLE", "in": "query", "name": "status", "required": false, "schema": { "type": "string", "enum": [ "INACTIVE", "VISIBLE", "INVISIBLE" ] } }, { "description": "If provided, you'll get a filtered list of custom fields that matches the provided string with the custom field entity type.", "example": [ "TIMEENTRY", "USER" ], "in": "query", "name": "entity-type", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomFieldDtoV1" } } } }, "description": "OK" } }, "summary": "Get custom fields on a workspace", "tags": [ "Custom fields" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "create", "parameters": [ { "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/CustomFieldDtoV1" } } }, "description": "Created" } }, "summary": "Create custom fields on a workspace", "tags": [ "Custom fields" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/custom-fields/{customFieldId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "delete", "parameters": [ { "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents custom field identifier across the system.", "example": "26a687e29ae1f428e7ebe101", "in": "path", "name": "customFieldId", "required": true, "schema": { "type": "string", "description": "Represents custom field identifier across the system.", "example": "26a687e29ae1f428e7ebe101" } } ], "responses": { "204": { "description": "No Content" } }, "summary": "Delete a custom field", "tags": [ "Custom fields" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "editCustomField", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a custom field identifier across the system.", "example": "26a687e29ae1f428e7ebe101", "in": "path", "name": "customFieldId", "required": true, "schema": { "type": "string", "description": "Represents a custom field identifier across the system.", "example": "26a687e29ae1f428e7ebe101" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateCustomFieldRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldDtoV1" } } }, "description": "OK" } }, "summary": "Update custom field on workspace", "tags": [ "Custom fields" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/entities/created": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "description": "Retrieves records from the database collection that were created within a specified date range. \nThe date range is determined by two parameters: start and end. ", "operationId": "getCreatedEntityInfo", "parameters": [ { "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Specifies the type of document to be retrieved. Expected values are CLIENTS, PROJECTS, TAGS, TASKS, SCHEDULED_ASSIGNMENT, TIME_ENTRY, TIME_ENTRY_RATE, TIME_ENTRY_CUSTOM_FIELD_VALUE.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY", "in": "query", "name": "type", "required": true, "schema": { "type": "array", "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY", "items": { "type": "string", "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY" } } }, { "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date.", "example": "2024-10-29T10:00:00Z", "in": "query", "name": "start", "required": false, "schema": { "type": "string", "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date.", "example": "2024-10-29T10:00:00Z" } }, { "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days.", "example": "2024-11-28T10:00:00Z", "in": "query", "name": "end", "required": false, "schema": { "type": "string", "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days.", "example": "2024-11-28T10:00:00Z" } }, { "in": "query", "name": "page", "required": false, "schema": { "type": "string", "default": "0" } }, { "in": "query", "name": "limit", "required": false, "schema": { "type": "string", "default": "50" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "string", "additionalProperties": {} } } }, "description": "OK" } }, "summary": "Created entities (Experimental)", "tags": [ "Entity changes (Experimental)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/entities/deleted": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "description": "Retrieves a list of record(s) that were deleted within a specified date range. \nThe date range is determined by the two parameters start and end. \n\n> ### 💡 Note\n> Deleted entities will be updated and reflected in this endpoint approximately one minute after the deletion occurs. Also, entities that are created and deleted within the request date range will not appear in the /deleted endpoint. ", "operationId": "getDeletedEntityInfo", "parameters": [ { "description": "Represents workspace identifier across the system (Experimental) ", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents workspace identifier across the system (Experimental) ", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Specifies the type of document to be retrieved. Expected values are CLIENTS, PROJECTS, TAGS, TASKS, SCHEDULED_ASSIGNMENT, TIME_ENTRY, TIME_ENTRY_RATE, TIME_ENTRY_CUSTOM_FIELD_VALUE.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY", "in": "query", "name": "type", "required": true, "schema": { "type": "array", "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY", "items": { "type": "string", "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY" } } }, { "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date.", "example": "2024-10-29T10:00:00Z", "in": "query", "name": "start", "required": false, "schema": { "type": "string", "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date.", "example": "2024-10-29T10:00:00Z" } }, { "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days.", "example": "2024-11-28T10:00:00Z", "in": "query", "name": "end", "required": false, "schema": { "type": "string", "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days.", "example": "2024-11-28T10:00:00Z" } }, { "in": "query", "name": "page", "required": false, "schema": { "type": "string", "default": "0" } }, { "in": "query", "name": "limit", "required": false, "schema": { "type": "string", "default": "50" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PageableCollectionLogBinDocumentDto" } } }, "description": "OK" } }, "summary": "Deleted entities (Experimental)", "tags": [ "Entity changes (Experimental)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/entities/updated": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "description": "Retrieves records that were updated within the specified date range. \nThe date range is determined by the two parameters: start and end. \n\n> ### 💡 Note\n> If an entity is both created and updated within the requested date range, it will be excluded from the /updated endpoint results. ", "operationId": "getUpdatedEntityInfo", "parameters": [ { "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Specifies the type of document to be retrieved. Expected values are CLIENTS, PROJECTS, TAGS, TASKS, SCHEDULED_ASSIGNMENT, TIME_ENTRY, TIME_ENTRY_RATE, TIME_ENTRY_CUSTOM_FIELD_VALUE.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY", "in": "query", "name": "type", "required": true, "schema": { "type": "array", "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY", "items": { "type": "string", "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types.", "example": "TIME_ENTRY" } } }, { "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date.", "example": "2024-10-29T10:00:00Z", "in": "query", "name": "start", "required": false, "schema": { "type": "string", "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date.", "example": "2024-10-29T10:00:00Z" } }, { "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days.", "example": "2024-11-28T10:00:00Z", "in": "query", "name": "end", "required": false, "schema": { "type": "string", "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days.", "example": "2024-11-28T10:00:00Z" } }, { "in": "query", "name": "page", "required": false, "schema": { "type": "string", "default": "0" } }, { "in": "query", "name": "limit", "required": false, "schema": { "type": "string", "default": "50" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "string", "additionalProperties": {} } } }, "description": "OK" } }, "summary": "Updated entities (Experimental)", "tags": [ "Entity changes (Experimental)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/expenses": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getExpenses", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "If provided, you'll get a filtered list of expenses which match the provided string in the user ID linked to the expense.", "example": "5a0ab5acb07987125438b60f", "in": "query", "name": "user-id", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpensesAndTotalsDtoV1" } } }, "description": "OK" } }, "summary": "Get all expenses on a workspace", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createExpense", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/CreateExpenseV1Request" } } } }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseDtoV1" } } }, "description": "Created" } }, "summary": "Create an expense", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/expenses/categories": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getCategories", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents the column name to be used as sorting criteria.", "example": "NAME", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "NAME" ] } }, { "description": "Represents the sorting order.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "Flag to filter results based on whether category is archived or not.", "example": true, "in": "query", "name": "archived", "required": false, "schema": { "type": "boolean", "description": "Flag to filter results based on whether category is archived or not.", "example": true, "default": false } }, { "description": "If provided, you'll get a filtered list of expense categories that matches the provided string in their name.", "example": "procurement", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of expense categories that matches the provided string in their name.", "example": "procurement" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseCategoriesWithCountDtoV1" } } }, "description": "OK" } }, "summary": "Get all expense categories", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createExpenseCategory", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseCategoryV1Request" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseCategoryDtoV1" } } }, "description": "Created" } }, "summary": "Add an expense category", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/expenses/categories/{categoryId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteCategory", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a category identifier across the system.", "example": "89a687e29ae1f428e7ebe567", "in": "path", "name": "categoryId", "required": true, "schema": { "type": "string", "description": "Represents a category identifier across the system.", "example": "89a687e29ae1f428e7ebe567" } } ], "responses": { "204": { "description": "No Content" } }, "summary": "Delete an expense category", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateCategory", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a category identifier across the system.", "example": "89a687e29ae1f428e7ebe567", "in": "path", "name": "categoryId", "required": true, "schema": { "type": "string", "description": "Represents a category identifier across the system.", "example": "89a687e29ae1f428e7ebe567" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseCategoryV1Request" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseCategoryDtoV1" } } }, "description": "OK" } }, "summary": "Update an expense category", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/expenses/categories/{categoryId}/status": { "servers": [ { "url": "https://api.clockify.me/api" } ], "patch": { "operationId": "updateExpenseCategoryStatus", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a category identifier across the system.", "example": "89a687e29ae1f428e7ebe567", "in": "path", "name": "categoryId", "required": true, "schema": { "type": "string", "description": "Represents a category identifier across the system.", "example": "89a687e29ae1f428e7ebe567" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseCategoryArchiveV1Request" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseCategoryDtoV1" } } }, "description": "OK" } }, "summary": "Archive an expense category", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/expenses/{expenseId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteExpense", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an expense identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "path", "name": "expenseId", "required": true, "schema": { "type": "string", "description": "Represents an expense identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } } ], "responses": { "200": { "description": "OK" } }, "summary": "Delete an expense", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getExpense", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an expense identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "path", "name": "expenseId", "required": true, "schema": { "type": "string", "description": "Represents an expense identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseDtoV1" } } }, "description": "OK" } }, "summary": "Get an expense by ID", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateExpense", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an expense identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "path", "name": "expenseId", "required": true, "schema": { "type": "string", "description": "Represents an expense identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/UpdateExpenseV1Request" } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseDtoV1" } } }, "description": "OK" } }, "summary": "Update an expense", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/expenses/{expenseId}/files/{fileId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "downloadFile", "parameters": [ { "description": "Represents a file identifier across the system.", "example": "745687e29ae1f428e7ebe890", "in": "path", "name": "fileId", "required": true, "schema": { "type": "string", "description": "Represents a file identifier across the system.", "example": "745687e29ae1f428e7ebe890" } }, { "description": "Represents an expense identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "path", "name": "expenseId", "required": true, "schema": { "type": "string", "description": "Represents an expense identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "content": { "*/*": { "schema": { "type": "string", "format": "byte" } } }, "description": "OK" } }, "summary": "Download a receipt", "tags": [ "Expense" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/holidays": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getHolidays", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "If provided, you'll get a filtered list of holidays assigned to user.", "example": "60f924bafdaf031696ec6218", "in": "query", "name": "assigned-to", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of holidays assigned to user.", "example": "60f924bafdaf031696ec6218" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/HolidayDtoV1" } } } }, "description": "OK" } }, "summary": "Get holidays on a workspace", "tags": [ "Holiday" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createHoliday", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateHolidayRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HolidayDtoV1" } } }, "description": "OK" } }, "summary": "Create a holiday", "tags": [ "Holiday" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/holidays/in-period": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getHolidaysInPeriod", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Filter list of holidays assigned to user.", "example": "60f924bafdaf031696ec6218", "in": "query", "name": "assigned-to", "required": true, "schema": { "type": "string", "description": "Filter list of holidays assigned to user.", "example": "60f924bafdaf031696ec6218" } }, { "description": "Filter list of holidays starting from start date. Expected date format yyyy-MM-ddThh:mm:ssZ", "example": "2022-12-03T10:59:59.999Z", "in": "query", "name": "start", "required": true, "schema": { "type": "string", "description": "Filter list of holidays starting from start date. Expected date format yyyy-MM-ddThh:mm:ssZ", "example": "2022-12-03T10:59:59.999Z" } }, { "description": "Filter list of holidays ending by end date. Expected date format yyyy-MM-ddThh:mm:ssZ", "example": "2022-12-05T23:59:59.999Z", "in": "query", "name": "end", "required": true, "schema": { "type": "string", "description": "Filter list of holidays ending by end date. Expected date format yyyy-MM-ddThh:mm:ssZ", "example": "2022-12-05T23:59:59.999Z" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/HolidayDtoV1" } } } }, "description": "OK" } }, "summary": "Get holidays in a specific period", "tags": [ "Holiday" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/holidays/{holidayId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteHoliday", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a holiday identifier across the system.", "example": "60f927920658241e3cf35e02", "in": "path", "name": "holidayId", "required": true, "schema": { "type": "string", "description": "Represents a holiday identifier across the system.", "example": "60f927920658241e3cf35e02" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HolidayDto" } } }, "description": "OK" } }, "summary": "Delete a holiday", "tags": [ "Holiday" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateHoliday", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a holiday identifier across the system.", "example": "60f927920658241e3cf35e02", "in": "path", "name": "holidayId", "required": true, "schema": { "type": "string", "description": "Represents a holiday identifier across the system.", "example": "60f927920658241e3cf35e02" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateHolidayRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HolidayDtoV1" } } }, "description": "OK" } }, "summary": "Update a holiday", "tags": [ "Holiday" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/hourly-rate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "setWorkspaceHourlyRate", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RateWithCurrencyRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "OK" } }, "summary": "Update workspace billable rate", "tags": [ "Workspace" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getInvoices", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "If provided, you'll get a filtered result of invoices that matches the provided string in the user ID linked to the expense.", "example": [ "UNSENT", "PAID" ], "in": "query", "name": "statuses", "required": false, "schema": { "type": "string", "enum": [ "UNSENT", "SENT", "PAID", "PARTIALLY_PAID", "VOID", "OVERDUE" ] } }, { "description": "Valid column name as sorting criteria. Default: ID", "example": "CLIENT", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "ID", "CLIENT", "DUE_ON", "ISSUE_DATE", "AMOUNT", "BALANCE" ] } }, { "description": "Sort order. Default: ASCENDING", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoicesListDtoV1" } } }, "description": "OK" } }, "summary": "Get all invoices on a workspace", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createInvoice", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateInvoiceRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateInvoiceDtoV1" } } }, "description": "Created" } }, "summary": "Add an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/info": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "getInvoicesInfo", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceFilterRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceInfoResponseDtoV1" } } }, "description": "OK" } }, "summary": "Filter out invoices", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/settings": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getInvoiceSettings", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceSettingsDtoV1" } } }, "description": "OK" } }, "summary": "Get an invoice in another language", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateInvoiceSettings", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateInvoiceSettingsRequestV1" } } }, "required": true }, "responses": { "200": { "description": "OK" } }, "summary": "Change an invoice language", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteInvoice", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "description": "OK" } }, "summary": "Delete an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getInvoice", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "83q687e29ae1f428e7ebe195", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "83q687e29ae1f428e7ebe195" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceOverviewDtoV1" } } }, "description": "OK" } }, "summary": "Get an invoice by ID", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateInvoice", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateInvoiceRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceOverviewDtoV1" } } }, "description": "OK" } }, "summary": "Update an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}/duplicate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "duplicateInvoice", "parameters": [ { "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceOverviewDtoV1" } } }, "description": "Created" } }, "summary": "Duplicate an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}/export": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "exportInvoice", "parameters": [ { "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a locale.", "example": "en", "in": "query", "name": "userLocale", "required": true, "schema": { "type": "string", "description": "Represents a locale.", "example": "en" } } ], "responses": { "200": { "content": { "*/*": { "schema": { "type": "string", "format": "byte" } } }, "description": "OK" } }, "summary": "Export an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}/items": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "addInvoiceItem", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "83q687e29ae1f428e7ebe195", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "83q687e29ae1f428e7ebe195" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateInvoiceItemRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceOverviewDtoV1" } } }, "description": "OK" } }, "summary": "Add item to an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}/items/import": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "importTimeEntriesAndExpenses", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "83q687e29ae1f428e7ebe195", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "83q687e29ae1f428e7ebe195" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ImportTimeEntriesAndExpensesRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceOverviewDtoV1" } } }, "description": "OK" } }, "summary": "Import time entries and expenses to an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}/items/{order}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "removeInvoiceItem", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "83q687e29ae1f428e7ebe195", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "83q687e29ae1f428e7ebe195" } }, { "description": "Represents an invoice item order.", "example": 3, "in": "path", "name": "order", "required": true, "schema": { "minimum": 1, "type": "integer", "description": "Represents an invoice item order.", "format": "int32", "example": 3 } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceOverviewDtoV1" } } }, "description": "OK" } }, "summary": "Delete item from an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}/payments": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getPaymentsForInvoice", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/InvoicePaymentDtoV1" } } } }, "description": "OK" } }, "summary": "Get payments for an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createInvoicePayment", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateInvoicePaymentRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceOverviewDtoV1" } } }, "description": "Created" } }, "summary": "Add payment to an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}/payments/{paymentId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deletePaymentById", "parameters": [ { "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a payment identifier across the system.", "example": "56p687e29ae1f428e7ebe456", "in": "path", "name": "paymentId", "required": true, "schema": { "type": "string", "description": "Represents a payment identifier across the system.", "example": "56p687e29ae1f428e7ebe456" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceOverviewDtoV1" } } }, "description": "OK" } }, "summary": "Delete payment from an invoice", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/invoices/{invoiceId}/status": { "servers": [ { "url": "https://api.clockify.me/api" } ], "patch": { "operationId": "changeInvoiceStatus", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303", "in": "path", "name": "invoiceId", "required": true, "schema": { "type": "string", "description": "Represents an invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChangeInvoiceStatusRequestV1" } } }, "required": true }, "responses": { "200": { "description": "OK" } }, "summary": "Change an invoice status", "tags": [ "Invoice" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/member-profile/{userId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getMemberProfile", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemberProfileDtoV1" } } }, "description": "OK" } }, "summary": "Get a member's profile", "tags": [ "User" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "patch": { "operationId": "updateMemberProfileWithAdditionalData", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemberProfileFullRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemberProfileDtoV1" } } }, "description": "OK" } }, "summary": "Update a member's profile", "tags": [ "User" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getProjects", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "If provided, you'll get a filtered list of projects that contains the provided string in the project name.", "example": "Software Development", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of projects that contains the provided string in the project name.", "example": "Software Development" } }, { "description": "Flag to toggle on/off strict search mode. When set to true, search by name will only return projects whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include projects whose name contain the string value, but could be longer than the string value itself. For example, if there is a project with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that project in the results, whereas setting it to false will.", "in": "query", "name": "strict-name-search", "required": false, "schema": { "type": "boolean", "description": "Flag to toggle on/off strict search mode. When set to true, search by name will only return projects whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include projects whose name contain the string value, but could be longer than the string value itself. For example, if there is a project with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that project in the results, whereas setting it to false will.", "default": false } }, { "description": "If provided and set to true, you'll only get archived projects. If omitted, you'll get both archived and non-archived projects.", "in": "query", "name": "archived", "required": false, "schema": { "type": "boolean", "description": "If provided and set to true, you'll only get archived projects. If omitted, you'll get both archived and non-archived projects.", "default": false } }, { "description": "If provided and set to true, you'll only get billable projects. If omitted, you'll get both billable and non-billable projects.", "in": "query", "name": "billable", "required": false, "schema": { "type": "boolean", "description": "If provided and set to true, you'll only get billable projects. If omitted, you'll get both billable and non-billable projects.", "default": false } }, { "description": "If provided, you'll get a filtered list of projects that contain clients which match any of the provided ids.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "in": "query", "name": "clients", "required": false, "schema": { "uniqueItems": true, "type": "array", "description": "If provided, you'll get a filtered list of projects that contain clients which match any of the provided ids.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "If provided, you'll get a filtered list of projects that contain clients which match any of the provided ids.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } } }, { "description": "If set to true, you'll get a filtered list of projects that contain clients which match the provided id(s) in 'clients' field. If set to false, you'll get a filtered list of projects which do NOT contain clients that match the provided id(s) in 'clients' field.", "in": "query", "name": "contains-client", "required": false, "schema": { "type": "boolean", "description": "If set to true, you'll get a filtered list of projects that contain clients which match the provided id(s) in 'clients' field. If set to false, you'll get a filtered list of projects which do NOT contain clients that match the provided id(s) in 'clients' field.", "default": true } }, { "description": "Filters projects based on client status provided.", "example": "ACTIVE", "in": "query", "name": "client-status", "required": false, "schema": { "type": "string", "enum": [ "ACTIVE", "ARCHIVED", "ALL" ] } }, { "description": "If provided, you'll get a filtered list of projects that contain users which match any of the provided ids.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "in": "query", "name": "users", "required": false, "schema": { "uniqueItems": true, "type": "array", "description": "If provided, you'll get a filtered list of projects that contain users which match any of the provided ids.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "If provided, you'll get a filtered list of projects that contain users which match any of the provided ids.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } } }, { "description": "If set to true, you'll get a filtered list of projects that contain users which match the provided id(s) in 'users' field. If set to false, you'll get a filtered list of projects which do NOT contain users which match the provided id(s) in 'users' field.", "in": "query", "name": "contains-user", "required": false, "schema": { "type": "boolean", "description": "If set to true, you'll get a filtered list of projects that contain users which match the provided id(s) in 'users' field. If set to false, you'll get a filtered list of projects which do NOT contain users which match the provided id(s) in 'users' field.", "default": true } }, { "description": "Filters projects based on user status provided.", "example": "ALL", "in": "query", "name": "user-status", "required": false, "schema": { "type": "string", "enum": [ "PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL" ] } }, { "description": "Filters projects based on whether they are used as a template or not.", "in": "query", "name": "is-template", "required": false, "schema": { "type": "boolean", "description": "Filters projects based on whether they are used as a template or not.", "default": false } }, { "description": "Sorts the results by the given column/field.", "example": "NAME", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "ID", "NAME", "CLIENT_NAME", "DURATION", "BUDGET", "PROGRESS" ] } }, { "description": "Sorting mode.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } }, { "description": "If set to true, results will contain additional information about the project.", "in": "query", "name": "hydrated", "required": false, "schema": { "type": "boolean", "description": "If set to true, results will contain additional information about the project.", "default": false } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "Valid set of string(s). If provided, you'll get a filtered list of projects that matches the provided access.", "example": "PUBLIC", "in": "query", "name": "access", "required": false, "schema": { "type": "string", "enum": [ "PUBLIC", "PRIVATE" ] } }, { "description": "Represents the maximum number of expenses to fetch.", "example": 10, "in": "query", "name": "expense-limit", "required": false, "schema": { "type": "integer", "description": "Represents the maximum number of expenses to fetch.", "format": "int32", "example": 10, "default": 20 } }, { "description": "If provided, you will get expenses dated before the provided value in yyyy-MM-dd format.", "example": "2024-12-31", "in": "query", "name": "expense-date", "required": false, "schema": { "type": "string", "description": "If provided, you will get expenses dated before the provided value in yyyy-MM-dd format.", "example": "2024-12-31" } }, { "description": "If provided, you'll get a filtered list of projects that contain groups which match any of the provided ids.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "in": "query", "name": "userGroups", "required": false, "schema": { "uniqueItems": true, "type": "array", "description": "If provided, you'll get a filtered list of projects that contain groups which match any of the provided ids.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "If provided, you'll get a filtered list of projects that contain groups which match any of the provided ids.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } } }, { "description": "If set to true, you'll get a filtered list of projects that contain groups which match the provided id(s) in 'userGroups' field. If set to false, you'll get a filtered list of projects which do NOT contain groups which match the provided id(s) in 'userGroups' field.", "in": "query", "name": "contains-group", "required": false, "schema": { "type": "boolean", "description": "If set to true, you'll get a filtered list of projects that contain groups which match the provided id(s) in 'userGroups' field. If set to false, you'll get a filtered list of projects which do NOT contain groups which match the provided id(s) in 'userGroups' field.", "default": true } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ProjectDtoV1" } } } }, "description": "OK" } }, "summary": "Get all projects on a workspace", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createNewProject", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "Created" } }, "summary": "Add a new project", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/from-template": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "createProjectFromTemplate", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateProjectFromTemplateV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Create project from a template", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteProject", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Delete a project from a workspace", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getProject", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } }, { "description": "If set to true, results will contain additional information about the project", "in": "query", "name": "hydrated", "required": false, "schema": { "type": "boolean", "description": "If set to true, results will contain additional information about the project", "default": false } }, { "description": "If provided, you'll get a filtered list of custom fields that matches the provided string with the custom field entity type.", "example": "TIMEENTRY", "in": "query", "name": "custom-field-entity-type", "required": false, "schema": { "type": "string", "default": "TIMEENTRY" } }, { "description": "Represents the maximum number of expenses to fetch.", "example": 10, "in": "query", "name": "expense-limit", "required": false, "schema": { "type": "integer", "description": "Represents the maximum number of expenses to fetch.", "format": "int32", "example": 10, "default": 20 } }, { "description": "If provided, you will get expenses dated before the provided value in yyyy-MM-dd format.", "example": "2024-12-31", "in": "query", "name": "expense-date", "required": false, "schema": { "type": "string", "description": "If provided, you will get expenses dated before the provided value in yyyy-MM-dd format.", "example": "2024-12-31" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoV1" } } }, "description": "OK" } }, "summary": "Find a project by ID", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateProject", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateProjectRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Update a project on a workspace", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/custom-fields": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getCustomFieldsOfProject", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } }, { "description": "If provided, you'll get a filtered list of custom fields that matches the provided string with the custom field status.", "example": "INACTIVE", "in": "query", "name": "status", "required": false, "schema": { "type": "string", "enum": [ "INACTIVE", "VISIBLE", "INVISIBLE" ] } }, { "description": "If provided, you'll get a filtered list of custom fields that matches the provided string with the custom field entity type.", "example": "TIMEENTRY", "in": "query", "name": "entity-type", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomFieldDtoV1" } } } }, "description": "OK" } }, "summary": "Get custom fields on a project", "tags": [ "Custom fields" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/custom-fields/{customFieldId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "removeDefaultValueOfProject", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a custom field identifier across the system.", "example": "26a687e29ae1f428e7ebe101", "in": "path", "name": "customFieldId", "required": true, "schema": { "type": "string", "description": "Represents a custom field identifier across the system.", "example": "26a687e29ae1f428e7ebe101" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldDtoV1" } } }, "description": "OK" } }, "summary": "Remove custom field from a project", "tags": [ "Custom fields" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "patch": { "operationId": "editProjectCustomFieldDefaultValue", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a custom field identifier across the system.", "example": "26a687e29ae1f428e7ebe101", "in": "path", "name": "customFieldId", "required": true, "schema": { "type": "string", "description": "Represents a custom field identifier across the system.", "example": "26a687e29ae1f428e7ebe101" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldProjectDefaultValuesRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldDtoV1" } } }, "description": "OK" } }, "summary": "Update custom field on a project", "tags": [ "Custom fields" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/estimate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "patch": { "operationId": "updateEstimate", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectEstimateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Update project estimate", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/memberships": { "servers": [ { "url": "https://api.clockify.me/api" } ], "patch": { "operationId": "updateMemberships", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateProjectMembershipsRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Update project memberships", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "addUsersToProject", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddUsersToProjectRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Assign/remove users to/from the project", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/tasks": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getTasks", "parameters": [ { "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "If provided, you'll get a filtered list of tasks that matches the provided string in their name.", "example": "Bugfixing", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of tasks that matches the provided string in their name.", "example": "Bugfixing" } }, { "description": "Flag to toggle on/off strict search mode. When set to true, search by name only will return tasks whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include tasks whose name contain the string value, but could be longer than the string value itself. For example, if there is a task with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that task in the results, whereas setting it to false will.", "in": "query", "name": "strict-name-search", "required": false, "schema": { "type": "boolean", "description": "Flag to toggle on/off strict search mode. When set to true, search by name only will return tasks whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include tasks whose name contain the string value, but could be longer than the string value itself. For example, if there is a task with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that task in the results, whereas setting it to false will.", "default": false } }, { "description": "Filters search results whether task is active or not.", "in": "query", "name": "is-active", "required": false, "schema": { "type": "boolean", "description": "Filters search results whether task is active or not.", "default": false } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "Represents the column as criteria for sorting tasks.", "example": "ID", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "ID", "NAME" ] } }, { "description": "Sorting mode.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TaskDtoV1" } } } }, "description": "OK" } }, "summary": "Find tasks on a project", "tags": [ "Task" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createTask", "parameters": [ { "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" } }, { "description": "Flag to set whether task will have assignee or none.", "in": "query", "name": "contains-assignee", "required": false, "schema": { "type": "boolean", "description": "Flag to set whether task will have assignee or none.", "default": true } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskDtoV1" } } }, "description": "Created" } }, "summary": "Add a new task on a project", "tags": [ "Task" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/tasks/{id}/cost-rate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "setTaskCostRate", "parameters": [ { "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CostRateRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskDtoV1" } } }, "description": "OK" } }, "summary": "Update a task's cost rate", "tags": [ "Task" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/tasks/{id}/hourly-rate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "setTaskHourlyRate", "parameters": [ { "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HourlyRateRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskDtoV1" } } }, "description": "OK" } }, "summary": "Update a task's billable rate", "tags": [ "Task" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/tasks/{taskId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteTask", "parameters": [ { "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107", "in": "path", "name": "taskId", "required": true, "schema": { "type": "string", "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskDtoV1" } } }, "description": "OK" } }, "summary": "Delete a task from a project", "tags": [ "Task" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getTask", "parameters": [ { "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107", "in": "path", "name": "taskId", "required": true, "schema": { "type": "string", "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107" } }, { "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskDtoV1" } } }, "description": "OK" } }, "summary": "Get a task by id", "tags": [ "Task" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateTask", "parameters": [ { "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107", "in": "path", "name": "taskId", "required": true, "schema": { "type": "string", "description": "Represents a task identifier across the system.", "example": "57a687e29ae1f428e7ebe107" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" } }, { "description": "Flag to set whether task will have assignee or none.", "in": "query", "name": "contains-assignee", "required": false, "schema": { "type": "boolean", "description": "Flag to set whether task will have assignee or none.", "default": true } }, { "description": "Represents a membership status.", "example": "ACTIVE", "in": "query", "name": "membership-status", "required": false, "schema": { "type": "string", "enum": [ "PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL" ] } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTaskRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskDtoV1" } } }, "description": "OK" } }, "summary": "Update a task on a project", "tags": [ "Task" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/template": { "servers": [ { "url": "https://api.clockify.me/api" } ], "patch": { "operationId": "updateIsProjectTemplate", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PatchProjectTemplateRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Update a project template", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/users/{userId}/cost-rate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "addUsersCostRate", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } }, { "description": "Represents a user identifier across the system.", "example": "4a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "4a0ab5acb07987125438b60f" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CostRateRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Update project user's cost rate", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/projects/{projectId}/users/{userId}/hourly-rate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "addUsersHourlyRate", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } }, { "description": "Represents a user identifier across the system.", "example": "4a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "4a0ab5acb07987125438b60f" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CostRateRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectDtoImplV1" } } }, "description": "OK" } }, "summary": "Update a project user's billable rate", "tags": [ "Project" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/all": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getAllAssignments", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "If provided, assignments will be filtered by name", "example": "Bugfixing", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, assignments will be filtered by name", "example": "Bugfixing", "default": "" } }, { "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z", "in": "query", "name": "start", "required": true, "schema": { "type": "string", "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" } }, { "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z", "in": "query", "name": "end", "required": true, "schema": { "type": "string", "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z" } }, { "description": "Represents the column as the sorting criteria.", "example": "USER", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "PROJECT", "USER", "ID" ] } }, { "description": "Represents the sorting mode.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AssignmentHydratedDtoV1" } } } }, "description": "OK" } }, "summary": "Get all assignments", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/projects/totals": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "deprecated": true, "operationId": "getProjectTotals", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a term for searching projects and clients by name.", "example": "Project name", "in": "query", "name": "search", "required": false, "schema": { "type": "string", "description": "Represents a term for searching projects and clients by name.", "example": "Project name", "default": "" } }, { "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z", "in": "query", "name": "start", "required": true, "schema": { "type": "string", "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" } }, { "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z", "in": "query", "name": "end", "required": true, "schema": { "type": "string", "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z" } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SchedulingProjectsTotalsDtoV1" } } } }, "description": "OK" } }, "summary": "Get all scheduled assignments per project", "tags": [ "Scheduling (Deprecated)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "getFilteredProjectTotals", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectTotalsRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SchedulingProjectsTotalsDtoV1" } } } }, "description": "OK" } }, "summary": "Get all scheduled assignments per project", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/projects/totals/{projectId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getProjectTotalsForSingleProject", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a project identifier across the system.", "example": "56b687e29ae1f428e7ebe504", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string", "description": "Represents a project identifier across the system.", "example": "56b687e29ae1f428e7ebe504" } }, { "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z", "in": "query", "name": "start", "required": true, "schema": { "type": "string", "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" } }, { "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z", "in": "query", "name": "end", "required": true, "schema": { "type": "string", "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SchedulingProjectsTotalsDtoV1" } } }, "description": "OK" } }, "summary": "Get all scheduled assignments on project", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/publish": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "publishAssignments", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublishAssignmentsRequestV1" } } }, "required": true }, "responses": { "200": { "description": "OK" } }, "summary": "Publish assignments", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/recurring": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "createRecurring", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AssignmentCreateRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AssignmentDtoV1" } } } }, "description": "Created" } }, "summary": "Create a recurring assignment", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/recurring/{assignmentId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteRRecurringAssignment", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an assignment identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "assignmentId", "required": true, "schema": { "type": "string", "description": "Represents an assignment identifier across the system.", "example": "5b641568b07987035750505e" } }, { "description": "Represents a series option.", "example": "ALL", "in": "query", "name": "seriesUpdateOption", "required": false, "schema": { "type": "string", "enum": [ "THIS_ONE", "THIS_AND_FOLLOWING", "ALL" ] } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AssignmentDtoV1" } } } }, "description": "OK" } }, "summary": "Delete a recurring assignment", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "patch": { "operationId": "editRecurring", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an assignment identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "assignmentId", "required": true, "schema": { "type": "string", "description": "Represents an assignment identifier across the system.", "example": "5b641568b07987035750505e" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AssignmentUpdateRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AssignmentDtoV1" } } } }, "description": "OK" } }, "summary": "Update a recurring assignment", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/series/{assignmentId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "editRecurringPeriod", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an assignment identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "assignmentId", "required": true, "schema": { "type": "string", "description": "Represents an assignment identifier across the system.", "example": "5b641568b07987035750505e" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RecurringAssignmentRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AssignmentDtoV1" } } } }, "description": "OK" } }, "summary": "Change the recurring period", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/user-filter/totals": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "getUserTotals", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUserTotalsRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SchedulingUsersTotalsDtoV1" } } } }, "description": "OK" } }, "summary": "Get total of users' capacity on workspace", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/users/{userId}/totals": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getUserTotalsForSingleUser", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z", "in": "query", "name": "start", "required": true, "schema": { "type": "string", "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" } }, { "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z", "in": "query", "name": "end", "required": true, "schema": { "type": "string", "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SchedulingUsersTotalsDtoV1" } } }, "description": "OK" } }, "summary": "Get total capacity of a user", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/scheduling/assignments/{assignmentId}/copy": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "copyAssignment", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents an assignment identifier across the system.", "example": "5b641568b07987035750505e", "in": "path", "name": "assignmentId", "required": true, "schema": { "type": "string", "description": "Represents an assignment identifier across the system.", "example": "5b641568b07987035750505e" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CopyAssignmentRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AssignmentDtoV1" } } } }, "description": "OK" } }, "summary": "Copy a scheduled assignment", "tags": [ "Scheduling" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/tags": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getTags", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "If provided, you'll get a filtered list of tags that matches the provided string in their name.", "example": "feature_X", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of tags that matches the provided string in their name.", "example": "feature_X" } }, { "description": "Flag to toggle on/off strict search mode. When set to true, search by name will only return tags whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include tags whose name contain the string value, but could be longer than the string value itself. For example, if there is a tag with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that tag in the results, whereas setting it to false will.", "in": "query", "name": "strict-name-search", "required": false, "schema": { "type": "boolean", "description": "Flag to toggle on/off strict search mode. When set to true, search by name will only return tags whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include tags whose name contain the string value, but could be longer than the string value itself. For example, if there is a tag with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that tag in the results, whereas setting it to false will.", "default": false } }, { "description": "Represents a list of excluded ids", "example": [ "90p687e29ae1f428e7ebe657", "3r8687e29ae1f428e7eg567y" ], "in": "query", "name": "excluded-ids", "required": false, "schema": { "type": "string" } }, { "description": "Represents a column to be used as sorting criteria.", "example": "NAME", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "ID", "NAME" ] } }, { "description": "Represents a sorting mode.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "Filters the result whether tags are archived or not.", "example": false, "in": "query", "name": "archived", "required": false, "schema": { "type": "boolean", "description": "Filters the result whether tags are archived or not.", "example": false, "default": false } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TagDtoV1" } } } }, "description": "OK" } }, "summary": "Find tags on a workspace", "tags": [ "Tag" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createNewTag", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TagRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TagDtoV1" } } }, "description": "Created" } }, "summary": "Add a new tag", "tags": [ "Tag" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/tags/{id}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteTag", "parameters": [ { "description": "Represents a tag identifier across the system.", "example": "21s687e29ae1f428e7ebe404", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a tag identifier across the system.", "example": "21s687e29ae1f428e7ebe404" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TagDtoV1" } } }, "description": "OK" } }, "summary": "Delete a tag", "tags": [ "Tag" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getTag", "parameters": [ { "description": "Represents a tag identifier across the system.", "example": "21s687e29ae1f428e7ebe404", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a tag identifier across the system.", "example": "21s687e29ae1f428e7ebe404" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TagDtoV1" } } }, "description": "OK" } }, "summary": "Get a tag by ID", "tags": [ "Tag" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateTag", "parameters": [ { "description": "Represents a tag identifier across the system.", "example": "21s687e29ae1f428e7ebe404", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a tag identifier across the system.", "example": "21s687e29ae1f428e7ebe404" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTagRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TagDtoV1" } } }, "description": "OK" } }, "summary": "Update a tag", "tags": [ "Tag" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/templates": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "deprecated": true, "operationId": "getTemplates", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "If provided, you'll get a filtered list of templates that contain the provided string in their name.", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of templates that contain the provided string in their name." } }, { "description": "If set to true will filter out inactive template projects and tasks.", "in": "query", "name": "cleansed", "required": false, "schema": { "type": "boolean", "description": "If set to true will filter out inactive template projects and tasks.", "default": false } }, { "description": "If set to true will return hydrated template projects and tasks.", "in": "query", "name": "hydrated", "required": false, "schema": { "type": "boolean", "description": "If set to true will return hydrated template projects and tasks.", "default": false } }, { "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "format": "int32", "default": 1 } }, { "in": "query", "name": "page-size", "required": false, "schema": { "type": "integer", "format": "int32", "default": 50 } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TemplateDto" } } } }, "description": "OK" } }, "summary": "Get all templates on a workspace", "tags": [ "Template (Deprecated)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "deprecated": true, "operationId": "createMany", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TemplateRequest" } } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TemplateDtoImpl" } } } }, "description": "OK" } }, "summary": "Create templates on a workspace", "tags": [ "Template (Deprecated)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/templates/{templateId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "deprecated": true, "operationId": "delete_1", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a template identifier across the system.", "example": "5b6d45c4b0798751107762b8", "in": "path", "name": "templateId", "required": true, "schema": { "type": "string", "description": "Represents a template identifier across the system.", "example": "5b6d45c4b0798751107762b8" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplateDtoImpl" } } }, "description": "OK" } }, "summary": "Delete a template", "tags": [ "Template (Deprecated)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "deprecated": true, "operationId": "getTemplate", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a template identifier across the system.", "example": "5b6d45c4b0798751107762b8", "in": "path", "name": "templateId", "required": true, "schema": { "type": "string", "description": "Represents a template identifier across the system.", "example": "5b6d45c4b0798751107762b8" } }, { "description": "If set to true will filter out inactive template projects and tasks.", "in": "query", "name": "cleansed", "required": false, "schema": { "type": "boolean", "description": "If set to true will filter out inactive template projects and tasks.", "default": false } }, { "description": "If set to true will return hydrated template projects and tasks.", "in": "query", "name": "hydrated", "required": false, "schema": { "type": "boolean", "description": "If set to true will return hydrated template projects and tasks.", "default": false } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplateDto" } } }, "description": "OK" } }, "summary": "Get template by ID on a workspace", "tags": [ "Template (Deprecated)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "patch": { "deprecated": true, "operationId": "update", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a template identifier across the system.", "example": "5b6d45c4b0798751107762b8", "in": "path", "name": "templateId", "required": true, "schema": { "type": "string", "description": "Represents a template identifier across the system.", "example": "5b6d45c4b0798751107762b8" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplatePatchRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplateDtoImpl" } } }, "description": "OK" } }, "summary": "Update a template", "tags": [ "Template (Deprecated)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-entries": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "createTimeEntry", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTimeEntryRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeEntryDtoImplV1" } } }, "description": "Created" } }, "summary": "Add a new time entry", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-entries/invoiced": { "servers": [ { "url": "https://api.clockify.me/api" } ], "patch": { "operationId": "updateInvoicedStatus", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateInvoicedStatusRequest" } } }, "required": true }, "responses": { "200": { "description": "OK" } }, "summary": "Mark time entries as invoiced", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-entries/status/in-progress": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getInProgressTimeEntries", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "in": "query", "name": "page", "required": false, "schema": { "minimum": 1, "type": "integer", "format": "int32", "default": 1 } }, { "in": "query", "name": "page-size", "required": false, "schema": { "maximum": 1000, "minimum": 1, "type": "integer", "format": "int32", "default": 10 } } ], "responses": { "200": { "content": { "*/*": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TimeEntryWithRatesDtoV1" } } } }, "description": "OK" } }, "summary": "Get all in progress time entries on a workspace", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-entries/{id}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteTimeEntry", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a time entry identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a time entry identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } } ], "responses": { "204": { "description": "No Content" } }, "summary": "Delete a time entry from a workspace", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getTimeEntry", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a time entry identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a time entry identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } }, { "description": "Flag to set whether to include additional information of a time entry or not.", "in": "query", "name": "hydrated", "required": false, "schema": { "type": "boolean", "description": "Flag to set whether to include additional information of a time entry or not.", "default": false } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeEntryWithRatesDtoV1" } } }, "description": "OK" } }, "summary": "Get a specific time entry on a workspace", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateTimeEntry", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a time entry identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a time entry identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTimeEntryRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeEntryDtoImplV1" } } }, "description": "OK" } }, "summary": "Update time entry on a workspace", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-off/balance/policy/{policyId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getBalancesForPolicy", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } }, { "example": 1, "in": "query", "name": "page", "required": false, "schema": { "maximum": 1000, "type": "integer", "format": "int32", "example": 1, "default": 1 } }, { "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "maximum": 200, "minimum": 1, "type": "integer", "format": "int32", "example": 50, "default": 50 } }, { "description": "If provided, you'll get result sorted by sort column.", "example": "USER", "in": "query", "name": "sort", "required": false, "schema": { "type": "string", "enum": [ "USER", "POLICY", "USED", "BALANCE", "TOTAL" ] } }, { "description": "Sort results in ascending or descending order.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } } ], "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/BalancesWithCountDtoV1" } } }, "description": "OK" } }, "summary": "Get balances for a policy", "tags": [ "Balance" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "patch": { "operationId": "updateBalance", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateBalanceRequestV1" } } }, "required": true }, "responses": { "204": { "description": "No Content" } }, "summary": "Update a balance", "tags": [ "Balance" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-off/balance/user/{userId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getBalancesForUser", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a user identifier across the system.", "example": "60f924bafdaf031696ec6218", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "60f924bafdaf031696ec6218" } }, { "description": "Page number.", "in": "query", "name": "page", "required": false, "schema": { "maximum": 1000, "type": "string" } }, { "description": "Page size.", "in": "query", "name": "page-size", "required": false, "schema": { "maximum": 200, "minimum": 1, "type": "string" } }, { "description": "Sort result based on given criteria", "example": "POLICY", "in": "query", "name": "sort", "required": false, "schema": { "type": "string", "enum": [ "USER", "POLICY", "USED", "BALANCE", "TOTAL" ] } }, { "description": "Sort result by providing sort order.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } } ], "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/BalancesWithCountDtoV1" } } }, "description": "OK" } }, "summary": "Get balance for a user", "tags": [ "Balance" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-off/policies": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "findPoliciesForWorkspace", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Page number.", "in": "query", "name": "page", "required": false, "schema": { "maximum": 1000, "type": "string" } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "maximum": 200, "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "If provided, you'll get a filtered list of policies that contain the provided string in their name.", "example": "Holidays", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of policies that contain the provided string in their name.", "example": "Holidays" } }, { "description": "If provided, you'll get a filtered list of policies with the corresponding status.", "example": "ACTIVE", "in": "query", "name": "status", "required": false, "schema": { "type": "string", "enum": [ "ACTIVE", "ARCHIVED", "ALL" ] } }, { "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "default": "DEFAULT_SORT" } }, { "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "default": "ASCENDING" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PolicyDtoV1" } } } }, "description": "OK" } }, "summary": "Get policies on a workspace", "tags": [ "Policy" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createPolicy", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatePolicyRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PolicyDtoV1" } } }, "description": "Created" } }, "summary": "Create a time off policy", "tags": [ "Policy" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-off/policies/{id}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deletePolicy", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } } ], "responses": { "200": { "description": "OK" } }, "summary": "Delete a policy", "tags": [ "Policy" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getPolicy", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PolicyDtoV1" } } }, "description": "OK" } }, "summary": "Get a time off policy", "tags": [ "Policy" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "patch": { "operationId": "updatePolicyStatus", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChangePolicyStatusRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PolicyDtoV1" } } }, "description": "OK" } }, "summary": "Change a policy status", "tags": [ "Policy" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updatePolicy", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdatePolicyRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PolicyDtoV1" } } }, "description": "OK" } }, "summary": "Update a policy", "tags": [ "Policy" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-off/policies/{policyId}/requests": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "createTimeOffRequest", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTimeOffRequestV1Request" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeOffRequestFullV1Dto" } } }, "description": "OK" } }, "summary": "Create a time off request", "tags": [ "Time Off" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-off/policies/{policyId}/requests/{requestId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteTimeOffRequest", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } }, { "description": "Represents a time off request identifier across the system.", "example": "6308850156b7d75ea8fd3fbd", "in": "path", "name": "requestId", "required": true, "schema": { "type": "string", "description": "Represents a time off request identifier across the system.", "example": "6308850156b7d75ea8fd3fbd" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeOffRequestV1Dto" } } }, "description": "OK" } }, "summary": "Delete a time off request", "tags": [ "Time Off" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "patch": { "operationId": "changeTimeOffRequestStatus", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } }, { "description": "Represents a time off request identifier across the system.", "example": "6308850156b7d75ea8fd3fbd", "in": "path", "name": "requestId", "required": true, "schema": { "type": "string", "description": "Represents a time off request identifier across the system.", "example": "6308850156b7d75ea8fd3fbd" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StatusTimeOffRequestV1Request" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeOffRequestV1Dto" } } }, "description": "OK" } }, "summary": "Change a time off request status", "tags": [ "Time Off" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-off/policies/{policyId}/users/{userId}/requests": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "createTimeOffRequestForOther", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } }, { "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string", "description": "Represents a policy identifier across the system.", "example": "63034cd0cb0fb876a57e93ad" } }, { "description": "Represents a user identifier across the system.", "example": "60f924bafdaf031696ec6218", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "60f924bafdaf031696ec6218" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTimeOffRequestV1Request" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeOffRequestFullV1Dto" } } }, "description": "OK" } }, "summary": "Create a time off request for a user", "tags": [ "Time Off" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/time-off/requests": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "getTimeOffRequest", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec61a8" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetTimeOffRequestsV1Request" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeOffRequestsWithCountV1Dto" } } }, "description": "OK" } }, "summary": "Get all time off requests on a workspace", "tags": [ "Time Off" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/user-groups": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getUserGroups", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "If provided, you'll get a filtered list of groups that matches the string provided in their project id.", "example": "5a0ab5acb07987125438b60f", "in": "query", "name": "project-id", "required": false, "schema": { "type": "string" } }, { "description": "If provided, you'll get a filtered list of groups that matches the string provided in their name.", "example": "development_team", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of groups that matches the string provided in their name.", "example": "development_team" } }, { "description": "Column to be used as the sorting criteria.", "example": "NAME", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "ID", "NAME" ] } }, { "description": "Sorting mode.", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "If provided, you'll get a list of team managers assigned to this user group.", "example": true, "in": "query", "name": "includeTeamManagers", "required": false, "schema": { "type": "boolean", "description": "If provided, you'll get a list of team managers assigned to this user group.", "example": true, "default": false } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/UserGroupDtoV1" } } } }, "description": "OK" } }, "summary": "Find all groups on a workspace", "tags": [ "Group" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createUserGroup", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGroupRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGroupDtoV1" } } }, "description": "Created" } }, "summary": "Add a new group", "tags": [ "Group" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/user-groups/{id}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteUserGroup", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user group identifier across the system.", "example": "76a687e29ae1f428e7ebe101", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a user group identifier across the system.", "example": "76a687e29ae1f428e7ebe101" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGroupDtoV1" } } }, "description": "OK" } }, "summary": "Delete a group", "tags": [ "Group" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateUserGroup", "parameters": [ { "description": "Represents a user group identifier across the system.", "example": "76a687e29ae1f428e7ebe101", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a user group identifier across the system.", "example": "76a687e29ae1f428e7ebe101" } }, { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserGroupRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGroupDtoV1" } } }, "description": "OK" } }, "summary": "Update a group", "tags": [ "Group" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/user-groups/{userGroupId}/users": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "addUser", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user group identifier across the system.", "example": "76a687e29ae1f428e7ebe101", "in": "path", "name": "userGroupId", "required": true, "schema": { "type": "string", "description": "Represents a user group identifier across the system.", "example": "76a687e29ae1f428e7ebe101" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGroupUserRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGroupDtoV1" } } }, "description": "OK" } }, "summary": "Add users to a group", "tags": [ "Group" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/user-groups/{userGroupId}/users/{userId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteUser", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user group identifier across the system.", "example": "76a687e29ae1f428e7ebe101", "in": "path", "name": "userGroupId", "required": true, "schema": { "type": "string", "description": "Represents a user group identifier across the system.", "example": "76a687e29ae1f428e7ebe101" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserGroupDtoV1" } } }, "description": "OK" } }, "summary": "Remove a user from a group", "tags": [ "Group" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/user/{userId}/time-entries": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteMany", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } }, { "description": "Represents a list of time entry ids to delete.", "example": "5a0ab5acb07987125438b60f", "in": "query", "name": "time-entry-ids", "required": true, "schema": { "type": "array", "description": "Represents a list of time entry ids to delete.", "example": "5a0ab5acb07987125438b60f", "items": { "type": "string", "description": "Represents a list of time entry ids to delete.", "example": "5a0ab5acb07987125438b60f" } } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TimeEntryDtoImplV1" } } } }, "description": "OK" } }, "summary": "Delete all time entries for a user on a workspace", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getTimeEntries", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } }, { "description": "Represents a term for searching time entries by description.", "example": "Description keywords", "in": "query", "name": "description", "required": false, "schema": { "type": "string", "description": "Represents a term for searching time entries by description.", "example": "Description keywords" } }, { "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z", "in": "query", "name": "start", "required": false, "schema": { "type": "string", "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" } }, { "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z", "in": "query", "name": "end", "required": false, "schema": { "type": "string", "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z" } }, { "description": "If provided, you'll get a filtered list of time entries that matches the provided string in their project id.", "example": "5b641568b07987035750505e", "in": "query", "name": "project", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of time entries that matches the provided string in their project id.", "example": "5b641568b07987035750505e" } }, { "description": "If provided, you'll get a filtered list of time entries that matches the provided string in their task id.", "example": "64c777ddd3fcab07cfbb210c", "in": "query", "name": "task", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of time entries that matches the provided string in their task id.", "example": "64c777ddd3fcab07cfbb210c" } }, { "description": "If provided, you'll get a filtered list of time entries that matches the provided string(s) in their tag id(s).", "example": [ "5e4117fe8c625f38930d57b7", "7e4117fe8c625f38930d57b8" ], "in": "query", "name": "tags", "required": false, "schema": { "uniqueItems": true, "type": "array", "description": "If provided, you'll get a filtered list of time entries that matches the provided string(s) in their tag id(s).", "example": [ "5e4117fe8c625f38930d57b7", "7e4117fe8c625f38930d57b8" ], "items": { "type": "string", "description": "If provided, you'll get a filtered list of time entries that matches the provided string(s) in their tag id(s).", "example": "[\"5e4117fe8c625f38930d57b7\",\"7e4117fe8c625f38930d57b8\"]" } } }, { "description": "Flag to set whether to only get time entries which have a project.", "in": "query", "name": "project-required", "required": false, "schema": { "type": "boolean", "description": "Flag to set whether to only get time entries which have a project.", "default": false } }, { "description": "Flag to set whether to only get time entries which have tasks.", "in": "query", "name": "task-required", "required": false, "schema": { "type": "boolean", "description": "Flag to set whether to only get time entries which have tasks.", "default": false } }, { "description": "Flag to set whether to include additional information on time entries or not.", "in": "query", "name": "hydrated", "required": false, "schema": { "type": "boolean", "description": "Flag to set whether to include additional information on time entries or not.", "default": false } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "Flag to set whether to filter only in progress time entries.", "in": "query", "name": "in-progress", "required": false, "schema": { "type": "string" } }, { "description": "Valid yyyy-MM-ddThh:mm:ssZ format date. If provided, filters results within the week before the datetime provided and only those entries with assigned project or task.", "example": "2020-01-01T00:00:00Z", "in": "query", "name": "get-week-before", "required": false, "schema": { "type": "string", "description": "Valid yyyy-MM-ddThh:mm:ssZ format date. If provided, filters results within the week before the datetime provided and only those entries with assigned project or task.", "example": "2020-01-01T00:00:00Z" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TimeEntryWithRatesDtoV1" } } } }, "description": "OK" } }, "summary": "Get time entries for a user on a workspace", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "patch": { "operationId": "stopRunningTimeEntry", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StopTimeEntryRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeEntryDtoImplV1" } } }, "description": "OK" } }, "summary": "Stop a currently running timer on a workspace for a user", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createForOthers", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } }, { "description": "Represents a time entry identifier across the system.", "example": "64c777ddd3fcab07cfbb210c", "in": "query", "name": "from-entry", "required": false, "schema": { "type": "string", "description": "Represents a time entry identifier across the system.", "example": "64c777ddd3fcab07cfbb210c" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTimeEntryRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeEntryDtoImplV1" } } }, "description": "Created" } }, "summary": "Add a new time entry for another user on workspace", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "replaceMany", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } }, { "description": "If set to true, results will contain additional information about the time entry.", "in": "query", "name": "hydrated", "required": false, "schema": { "type": "boolean", "description": "If set to true, results will contain additional information about the time entry.", "default": false } } ], "requestBody": { "content": { "application/json": { "schema": { "minItems": 1, "type": "array", "items": { "$ref": "#/components/schemas/UpdateTimeEntryBulkRequest" } } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TimeEntryDtoV1" } } } }, "description": "OK" } }, "summary": "Bulk edit time entries", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/user/{userId}/time-entries/{id}/duplicate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "duplicateTimeEntry", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } }, { "description": "Represents a time entry identifier across the system.", "example": "8j39fn9307hh5125439g2ast", "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a time entry identifier across the system.", "example": "8j39fn9307hh5125439g2ast" } } ], "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeEntryDtoImplV1" } } }, "description": "Created" } }, "summary": "Duplicate a time entry", "tags": [ "Time entry" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/users": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getUsersOfWorkspace", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "If provided, you'll get a filtered list of users that contain the provided string in their email address.", "example": "mail@example.com", "in": "query", "name": "email", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of users that contain the provided string in their email address.", "example": "mail@example.com" } }, { "description": "If provided, you'll get a list of users that have access to the project.", "example": "21a687e29ae1f428e7ebe606", "in": "query", "name": "project-id", "required": false, "schema": { "type": "string" } }, { "description": "If provided, you'll get a filtered list of users with the corresponding status.", "example": "ACTIVE", "in": "query", "name": "status", "required": false, "schema": { "type": "string", "enum": [ "PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL" ] } }, { "description": "If provided, you'll get a filtered list of users with the corresponding account status filter. If not, this will only filter ACTIVE, PENDING_EMAIL_VERIFICATION, and NOT_REGISTERED Users.", "example": "LIMITED", "in": "query", "name": "account-statuses", "required": false, "schema": { "type": "string" } }, { "description": "If provided, you'll get a filtered list of users that contain the provided string in their name", "example": "John", "in": "query", "name": "name", "required": false, "schema": { "type": "string", "description": "If provided, you'll get a filtered list of users that contain the provided string in their name", "example": "John" } }, { "description": "Sorting column criteria. Default value: EMAIL", "example": "ID", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "ID", "EMAIL", "NAME", "NAME_LOWERCASE", "ACCESS", "HOURLYRATE", "COSTRATE" ] } }, { "description": "Sorting mode. Default value: ASCENDING", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } }, { "description": "If provided, you'll get all users along with workspaces, groups, or projects they have access to. Default value is NONE.", "example": "WORKSPACE", "in": "query", "name": "memberships", "required": false, "schema": { "type": "string", "enum": [ "ALL", "NONE", "WORKSPACE", "PROJECT", "USERGROUP" ] } }, { "description": "If you pass along includeRoles=true, you'll get each user's detailed manager role (including projects and members which they manage)", "in": "query", "name": "include-roles", "required": true, "schema": { "type": "string", "default": "false" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/UserDtoV1" } } } }, "description": "OK" } }, "summary": "Find all users on a workspace", "tags": [ "User" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "description": "You can add users to a workspace via API only if that workspace has a paid subscription. If the workspace has a paid subscription, you can add as many users as you want but you are limited by the number of paid user seats on that workspace.", "operationId": "addUsers", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Indicates whether to send an email when user is added to the workspace.", "in": "query", "name": "send-email", "required": true, "schema": { "type": "string", "default": "true" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddUserToWorkspaceRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "OK" } }, "summary": "Add user to a workspace", "tags": [ "Workspace" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/users/info": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "filterUsersOfWorkspace", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUsersRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/UserDtoV1" } } } }, "description": "OK" } }, "security": [ { "MarketplaceKeyAuth": [] }, { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ], "summary": "Filter workspace users", "tags": [ "User" ] } }, "/v1/workspaces/{workspaceId}/users/{userId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "deprecated": true, "description": "This endpoint is not functional and has been deprecated. A user can be removed/deleted on the CAKE.com Account Members page after deactivating all their existing memberships on all workspaces within an organization.", "operationId": "removeMember", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "OK" } }, "summary": "Remove user from a workspace", "tags": [ "Workspace (Deprecated)" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateUserStatus", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserStatusRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "OK" } }, "summary": "Update a user's status", "tags": [ "Workspace" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/users/{userId}/cost-rate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "setCostRateForUser", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CostRateRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "OK" } }, "summary": "Update a user's cost rate", "tags": [ "Workspace" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/users/{userId}/custom-field/{customFieldId}/value": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "upsertUserCustomFieldValue", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } }, { "description": "Represents custom field identifier across the system.", "example": "5e4117fe8c625f38930d57b7", "in": "path", "name": "customFieldId", "required": true, "schema": { "type": "string", "description": "Represents custom field identifier across the system.", "example": "5e4117fe8c625f38930d57b7" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertUserCustomFieldRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserCustomFieldValueDtoV1" } } }, "description": "Created" } }, "summary": "Update a user's custom field", "tags": [ "User" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/users/{userId}/hourly-rate": { "servers": [ { "url": "https://api.clockify.me/api" } ], "put": { "operationId": "setHourlyRateForUser", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HourlyRateRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceDtoV1" } } }, "description": "OK" } }, "summary": "Update a user's hourly rate", "tags": [ "Workspace" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/users/{userId}/managers": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getManagersOfUser", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } }, { "description": "Sorting column criteria", "example": "ID", "in": "query", "name": "sort-column", "required": false, "schema": { "type": "string", "enum": [ "ID", "EMAIL", "NAME", "NAME_LOWERCASE", "ACCESS", "HOURLYRATE", "COSTRATE" ] } }, { "description": "Sorting mode", "example": "ASCENDING", "in": "query", "name": "sort-order", "required": false, "schema": { "type": "string", "enum": [ "ASCENDING", "DESCENDING" ] } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 1 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "page-size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/UserDtoV1" } } } }, "description": "OK" } }, "summary": "Find user's team manager", "tags": [ "User" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/users/{userId}/roles": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteUserRole", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RoleRequestV1" } } }, "required": true }, "responses": { "204": { "description": "No Content" } }, "summary": "Remove user's manager role", "tags": [ "User" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "operationId": "createUserRole", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f", "in": "path", "name": "userId", "required": true, "schema": { "type": "string", "description": "Represents a user identifier across the system.", "example": "5a0ab5acb07987125438b60f" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RoleRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/RoleDetailsDtoV1" } } } }, "description": "Created" } }, "summary": "Give manager role to a user", "tags": [ "User" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/webhooks": { "servers": [ { "url": "https://api.clockify.me/api" } ], "get": { "operationId": "getWebhooks", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a webhook type.", "example": "USER_CREATED", "in": "query", "name": "type", "required": false, "schema": { "type": "string", "enum": [ "USER_CREATED", "SYSTEM", "ADDON" ] } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhooksDtoV1" } } }, "description": "OK" } }, "summary": "Get all webhooks on a workspace", "tags": [ "Webhooks" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "description": "Creating a webhook generates a new token which can be used to verify that the webhook being sent was sent by Clockify, as it will always be present in the header.", "operationId": "createWebhook", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWebhookRequestV1" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhookDtoV1" } } }, "description": "Created" } }, "summary": "Create a webhook", "tags": [ "Webhooks" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/webhooks/{webhookId}": { "servers": [ { "url": "https://api.clockify.me/api" } ], "delete": { "operationId": "deleteWebhook", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a webhook identifier across the system.", "example": "5b715448b0798751107918ab", "in": "path", "name": "webhookId", "required": true, "schema": { "type": "string", "description": "Represents a webhook identifier across the system.", "example": "5b715448b0798751107918ab" } } ], "responses": { "200": { "description": "OK" } }, "summary": "Delete a webhook", "tags": [ "Webhooks" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "get": { "operationId": "getWebhook", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a webhook identifier across the system.", "example": "5b715448b0798751107918ab", "in": "path", "name": "webhookId", "required": true, "schema": { "type": "string", "description": "Represents a webhook identifier across the system.", "example": "5b715448b0798751107918ab" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhookDtoV1" } } }, "description": "OK" } }, "summary": "Get a specific webhook by id", "tags": [ "Webhooks" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "operationId": "updateWebhook", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a webhook identifier across the system.", "example": "5b715448b0798751107918ab", "in": "path", "name": "webhookId", "required": true, "schema": { "type": "string", "description": "Represents a webhook identifier across the system.", "example": "5b715448b0798751107918ab" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWebhookRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhookDtoV1" } } }, "description": "OK" } }, "summary": "Update a webhook", "tags": [ "Webhooks" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/webhooks/{webhookId}/logs": { "servers": [ { "url": "https://api.clockify.me/api" } ], "post": { "operationId": "getLogsForWebhook", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a webhook identifier across the system.", "in": "path", "name": "webhookId", "required": true, "schema": { "type": "string", "description": "Represents a webhook identifier across the system." } }, { "description": "Page number.", "example": 1, "in": "query", "name": "page", "required": false, "schema": { "type": "integer", "description": "Page number.", "format": "int32", "example": 1, "default": 0 } }, { "description": "Page size.", "example": 50, "in": "query", "name": "size", "required": false, "schema": { "minimum": 1, "type": "integer", "description": "Page size.", "format": "int32", "example": 50, "default": 50 } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhookLogSearchRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/WebhookLogDtoV1" } } } }, "description": "OK" } }, "summary": "Get logs for a webhook", "tags": [ "Webhooks" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/webhooks/{webhookId}/token": { "servers": [ { "url": "https://api.clockify.me/api" } ], "patch": { "description": "Generates a new webhook token and invalidates previous one", "operationId": "generateNewToken", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, { "description": "Represents a webhook identifier across the system.", "example": "5b715448b0798751107918ab", "in": "path", "name": "webhookId", "required": true, "schema": { "type": "string", "description": "Represents a webhook identifier across the system.", "example": "5b715448b0798751107918ab" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhookDtoV1" } } }, "description": "OK" } }, "summary": "Generate a new token", "tags": [ "Webhooks" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/shared-reports/{id}": { "servers": [ { "url": "https://reports.api.clockify.me" } ], "get": { "description": "Response depends on report type and export type. Given example is for SUMMARY report and JSON exportType. \n\nShared report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).", "operationId": "generateSharedReportV1", "parameters": [ { "in": "query", "name": "dateRangeStart", "schema": { "type": "string", "description": "Provide the start date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)", "example": "2018-11-01T00:00:00" } }, { "in": "query", "name": "dateRangeEnd", "schema": { "type": "string", "description": "Provide the end date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)", "example": "2018-11-30T23:59:59.999" } }, { "in": "query", "name": "sortOrder", "schema": { "type": "string", "description": "Sort result in ascending or descending order", "example": "ASCENDING" } }, { "in": "query", "name": "sortColumn", "schema": { "type": "string", "description": "If provided, you'll get result sorted by sort column." } }, { "in": "query", "name": "exportType", "schema": { "type": "string", "description": "Represents an export type of shared report", "example": "JSON" } }, { "in": "query", "name": "page", "schema": { "type": "integer", "format": "int32", "example": 1 } }, { "in": "query", "name": "pageSize", "schema": { "type": "integer", "format": "int32", "example": 20 } }, { "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a shared report identifier across the system.", "example": "61794f784363c45af78e5555" } } ], "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/TimeEntrySummaryReportDto" } } }, "description": "OK" } }, "summary": "Generate shared report by ID", "tags": [ "Shared Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/reports/attendance": { "servers": [ { "url": "https://reports.api.clockify.me" } ], "post": { "operationId": "generateAttendanceReport", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ecxxxx" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttendanceReportFilterV1" } } } }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/AttendanceReportDtoV1" } } }, "description": "OK" } }, "summary": "Generate an attendance report", "tags": [ "Team Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/reports/detailed": { "servers": [ { "url": "https://reports.api.clockify.me" } ], "post": { "description": "Detailed report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).", "operationId": "generateDetailedReport", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ecxxxx" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DetailedReportFilterV1" } } } }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/TimeEntryDetailedReportDto" } } }, "description": "OK" } }, "summary": "Generate a detailed report", "tags": [ "Time Entry Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/reports/expenses/detailed": { "servers": [ { "url": "https://reports.api.clockify.me" } ], "post": { "description": "Expense report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).", "operationId": "generateDetailedReportV1", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ec6bbb" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseReportFilterV1" } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpenseDetailedReportDtoV1" } } }, "description": "OK" } }, "summary": "Generate an expense report", "tags": [ "Expense Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/reports/summary": { "servers": [ { "url": "https://reports.api.clockify.me" } ], "post": { "description": "Summary report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).", "operationId": "generateSummaryReport", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ecxxxx" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SummaryReportFilterV1" } } } }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/TimeEntrySummaryReportDto" } } }, "description": "OK" } }, "summary": "Generate a summary report", "tags": [ "Time Entry Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/reports/weekly": { "servers": [ { "url": "https://reports.api.clockify.me" } ], "post": { "description": "Weekly report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).", "operationId": "generateWeeklyReport", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ecxxxx" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WeeklyReportFilterV1" } } } }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/TimeEntryWeeklyReportDto" } } }, "description": "OK" } }, "summary": "Generate a weekly report", "tags": [ "Time Entry Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/shared-reports": { "servers": [ { "url": "https://reports.api.clockify.me" } ], "get": { "description": "Gets all shared reports for current user on given workspace", "operationId": "getSharedReportsV1", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ecxxxx" } }, { "in": "query", "name": "page", "schema": { "type": "integer", "format": "int32", "default": 1, "description": "Page number.", "example": 2 } }, { "in": "query", "name": "pageSize", "schema": { "type": "integer", "format": "int32", "default": 50, "description": "Page size.", "example": 20, "minimum": 1 } }, { "in": "query", "name": "sharedReportsFilter", "schema": { "type": "string", "default": "ALL", "description": "Filters shared reports by origin.", "enum": [ "ALL", "CREATED_BY_ME", "SHARED_WITH_ME" ], "example": "CREATED_BY_ME" } } ], "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/SharedReportsAndCountDtoV1" } } }, "description": "OK" } }, "summary": "Get all my shared reports", "tags": [ "Shared Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "post": { "description": "Saves shared report with name, options and report filter. \n\nShared report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).", "operationId": "saveSharedReportV1", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ecxxxx" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SharedReportRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/SharedReportV1" } } }, "description": "OK" } }, "summary": "Create a shared report", "tags": [ "Shared Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/shared-reports/{id}": { "servers": [ { "url": "https://reports.api.clockify.me" } ], "delete": { "operationId": "deleteSharedReportV1", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a shared report identifier across the system.", "example": "61794f784363c45af78e5555" } }, { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ecxxxx" } } ], "responses": { "204": { "description": "Success" } }, "summary": "Delete a shared report", "tags": [ "Shared Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] }, "put": { "description": "Updates shared report name and/or options", "operationId": "updateSharedReportV1", "parameters": [ { "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "60f91b3ffdaf031696ecxxxx" } }, { "in": "path", "name": "id", "required": true, "schema": { "type": "string", "description": "Represents a shared report identifier across the system.", "example": "61794f784363c45af78e5555" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSharedReportRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "*/*": { "schema": { "$ref": "#/components/schemas/SharedReportV1" } } }, "description": "OK" } }, "summary": "Update a shared report", "tags": [ "Shared Report" ], "security": [ { "ApiKeyAuth": [] }, { "AddonKeyAuth": [] } ] } }, "/v1/workspaces/{workspaceId}/audit-log": { "servers": [ { "url": "https://auditlog-api.api.clockify.me" } ], "post": { "operationId": "getAuditLogs", "parameters": [ { "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string", "description": "Represents a workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AuditLogGetRequestV1" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PageableV1ListAuditLogDtoV1" } } }, "description": "OK" } }, "summary": "Generate an audit log report", "tags": [ "Audit Log Report" ], "security": [ { "ApiKeyAuth": [] } ] } } }, "components": { "schemas": { "AccountStatus": { "type": "object", "description": "Represents account status enum.", "example": "ACTIVE", "oneOf": [ { "type": "string", "enum": [ "ACTIVE", "PENDING_EMAIL_VERIFICATION", "DELETED", "NOT_REGISTERED", "LIMITED", "LIMITED_DELETED" ] } ], "properties": { "ACTIVE": { "type": "string", "enum": [ "ACTIVE", "PENDING_EMAIL_VERIFICATION", "DELETED", "NOT_REGISTERED", "LIMITED", "LIMITED_DELETED" ] }, "DELETED": { "type": "string", "enum": [ "ACTIVE", "PENDING_EMAIL_VERIFICATION", "DELETED", "NOT_REGISTERED", "LIMITED", "LIMITED_DELETED" ] }, "LIMITED": { "type": "string", "enum": [ "ACTIVE", "PENDING_EMAIL_VERIFICATION", "DELETED", "NOT_REGISTERED", "LIMITED", "LIMITED_DELETED" ] }, "LIMITED_DELETED": { "type": "string", "enum": [ "ACTIVE", "PENDING_EMAIL_VERIFICATION", "DELETED", "NOT_REGISTERED", "LIMITED", "LIMITED_DELETED" ] }, "NOT_REGISTERED": { "type": "string", "enum": [ "ACTIVE", "PENDING_EMAIL_VERIFICATION", "DELETED", "NOT_REGISTERED", "LIMITED", "LIMITED_DELETED" ] }, "PENDING_EMAIL_VERIFICATION": { "type": "string", "enum": [ "ACTIVE", "PENDING_EMAIL_VERIFICATION", "DELETED", "NOT_REGISTERED", "LIMITED", "LIMITED_DELETED" ] }, "active": { "type": "boolean" }, "limitedAccount": { "type": "boolean" }, "notRegistered": { "type": "boolean" } } }, "AddUserToWorkspaceRequest": { "required": [ "email" ], "type": "object", "properties": { "email": { "minLength": 1, "type": "string", "description": "Represents an email address of the user.", "example": "johndoe@example.com" } } }, "AddUsersToProjectRequestV1": { "type": "object", "properties": { "remove": { "type": "boolean", "description": "Setting this flag to 'true' will remove the given users from the project.", "default": false }, "userGroups": { "$ref": "#/components/schemas/UserGroupIdsSchema" }, "userIds": { "type": "array", "description": "Represents array of user ids which should be added/removed.", "example": [ "45b687e29ae1f428e7ebe123", "67s687e29ae1f428e7ebe678" ], "items": { "type": "string", "description": "Represents array of user ids which should be added/removed.", "example": "[\"45b687e29ae1f428e7ebe123\",\"67s687e29ae1f428e7ebe678\"]" } } } }, "ApplyTaxes": { "type": "object", "description": "Represents item applyTaxes type.", "example": "TAX1TAX2", "oneOf": [ { "type": "string", "enum": [ "TAX1", "TAX2", "TAX1TAX2", "NONE" ] } ], "properties": { "NONE": { "type": "string", "enum": [ "TAX1", "TAX2", "TAX1TAX2", "NONE" ] }, "TAX1": { "type": "string", "enum": [ "TAX1", "TAX2", "TAX1TAX2", "NONE" ] }, "TAX1TAX2": { "type": "string", "enum": [ "TAX1", "TAX2", "TAX1TAX2", "NONE" ] }, "TAX2": { "type": "string", "enum": [ "TAX1", "TAX2", "TAX1TAX2", "NONE" ] }, "value": { "type": "string" } } }, "ApprovalDetailsDtoV1": { "type": "object", "properties": { "approvalRequest": { "$ref": "#/components/schemas/ApprovalRequestDtoV1" }, "approvedTime": { "type": "string", "description": "Represents a time duration.", "example": "PT1H30M" }, "billableAmount": { "type": "number", "format": "double", "example": 2500 }, "billableTime": { "type": "string", "description": "Represents a time duration.", "example": "PT1H30M" }, "breakTime": { "type": "string", "description": "Represents a time duration.", "example": "PT1H30M" }, "costAmount": { "type": "number", "description": "Represents an amount.", "format": "double", "example": 5000 }, "entries": { "type": "array", "description": "Represents a list of time entry info data transfer objects.", "items": { "$ref": "#/components/schemas/TimeEntryInfoDto" } }, "expenseTotal": { "type": "number", "description": "Represents an amount.", "format": "double", "example": 7500 }, "expenses": { "type": "array", "description": "Represents a list of expense hydrated data transfer objects.", "items": { "$ref": "#/components/schemas/ExpenseHydratedDto" } }, "pendingTime": { "type": "string", "description": "Represents a time duration.", "example": "PT1H30M" }, "trackedTime": { "type": "string", "description": "Represents a time duration.", "example": "PT1H30M" } } }, "ApprovalRequestCreatorDtoV1": { "type": "object", "properties": { "userEmail": { "type": "string", "description": "Represents user email.", "example": "johhndoe@example.com" }, "userId": { "type": "string", "description": "Represents user identifier across the system.", "example": "5a0ab5acb07987125438b60f" }, "userName": { "type": "string", "description": "Represents user name.", "example": "johhndoe" } }, "description": "Represents approval request creator object." }, "ApprovalRequestDtoV1": { "type": "object", "properties": { "creator": { "$ref": "#/components/schemas/ApprovalRequestCreatorDtoV1" }, "dateRange": { "$ref": "#/components/schemas/DateRangeDto" }, "id": { "type": "string", "description": "Represents approval request identifier across the workspace.", "example": "567687e29ae1f428e7ebf564" }, "owner": { "$ref": "#/components/schemas/ApprovalRequestOwnerDtoV1" }, "status": { "$ref": "#/components/schemas/ApprovalRequestStatusDtoV1" }, "workspaceId": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } }, "description": "Represents a valid approval request data transfer object." }, "ApprovalRequestOwnerDtoV1": { "type": "object", "properties": { "startOfWeek": { "type": "string", "description": "Represents a day of the week.", "example": "MONDAY", "enum": [ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ] }, "timeZone": { "type": "string", "description": "Represents time zone.", "example": "Europe/Budapest" }, "userId": { "type": "string", "description": "Represents user identifier across the system.", "example": "5a0ab5acb07987125438b60f" }, "userName": { "type": "string", "description": "Represents user name.", "example": "johndoe" } }, "description": "Represents approval request owner object." }, "ApprovalRequestStatusDtoV1": { "type": "object", "properties": { "note": { "type": "string", "description": "Represents an approval requesst note.", "example": "This is a sample approval request note." }, "state": { "type": "string", "description": "Represents approval state enum.", "example": "APPROVED", "enum": [ "PENDING", "APPROVED", "WITHDRAWN_SUBMISSION", "WITHDRAWN_APPROVAL", "REJECTED" ] }, "updatedAt": { "type": "string", "description": "Represents a date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time", "example": "2020-01-01T08:00:00Z" }, "updatedBy": { "type": "string", "description": "Represents user identifier across the system.", "example": "5a0ab5acb07987125438b60f" }, "updatedByUserName": { "type": "string", "description": "Represents user name.", "example": "juandelacruz" } }, "description": "Represents approval request status object." }, "AssignmentCreateRequestV1": { "required": [ "end", "hoursPerDay", "projectId", "start", "userId" ], "type": "object", "properties": { "billable": { "type": "boolean", "description": "Indicates whether assignment is billable or not.", "default": false }, "end": { "type": "string", "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z" }, "hoursPerDay": { "type": "number", "description": "Represents assignment total hours per day.", "format": "double", "example": 7.5 }, "includeNonWorkingDays": { "type": "boolean", "description": "Indicates whether to include non-working days or not.", "default": false }, "note": { "maxLength": 100, "minLength": 0, "type": "string", "description": "Represents an assignment note.", "example": "This is a sample note for an assignment." }, "projectId": { "minLength": 1, "type": "string", "description": "Represents a project identifier across the system.", "example": "56b687e29ae1f428e7ebe504" }, "recurringAssignment": { "$ref": "#/components/schemas/RecurringAssignmentRequestV1" }, "start": { "type": "string", "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" }, "startTime": { "type": "string", "description": "Represents a start time in the hh:mm:ss format.", "example": "10:00:00" }, "taskId": { "type": "string", "description": "Represents a task identifier across the system.", "example": "56b687e29ae1f428e7ebe505" }, "userId": { "minLength": 1, "type": "string", "description": "Represents a user identifier across the system.", "example": "72k687e29ae1f428e7ebe109" } } }, "AssignmentDtoV1": { "type": "object", "properties": { "billable": { "type": "boolean", "description": "Indicates whether assignment is billable or not.", "default": false }, "excludeDays": { "uniqueItems": true, "type": "array", "description": "Represents a list of excluded days objects", "items": { "$ref": "#/components/schemas/SchedulingExcludeDay" } }, "hoursPerDay": { "type": "number", "description": "Represents assignment total hours per day.", "format": "double", "example": 7.5 }, "id": { "type": "string", "description": "Represents assignment identifier across the system.", "example": "74a687e29ae1f428e7ebe505" }, "includeNonWorkingDays": { "type": "boolean", "description": "Indicates whether assignment should include non-working days or not.", "default": false }, "note": { "type": "string", "description": "Represents assignment note.", "example": "This is a sample note for an assignment." }, "period": { "$ref": "#/components/schemas/DateRangeDto" }, "projectId": { "type": "string", "description": "Represents project identifier across the system.", "example": "56b687e29ae1f428e7ebe504" }, "published": { "type": "boolean", "description": "Indicates whether assignment is published or not.", "default": false }, "recurring": { "$ref": "#/components/schemas/RecurringAssignmentDto" }, "startTime": { "type": "string", "description": "Represents start time in hh:mm:ss format.", "example": "10:00:00" }, "taskId": { "type": "string", "description": "Represents task identifier across the system.", "example": "36b687e29ae1f428e7ebe109" }, "userId": { "type": "string", "description": "Represents user identifier across the system.", "example": "72k687e29ae1f428e7ebe109" }, "workspaceId": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } }, "AssignmentHydratedDtoV1": { "type": "object", "properties": { "billable": { "type": "boolean", "description": "Indicates whether assignment is billable or not.", "default": false }, "clientId": { "type": "string", "description": "Represents client identifier across the system.", "example": "36b687e29ae1f428e7ebe109" }, "clientName": { "type": "string", "description": "Represents project name.", "example": "Software Development" }, "hoursPerDay": { "type": "number", "description": "Represents number of hours per day as double.", "format": "double", "example": 7.5 }, "id": { "type": "string", "description": "Represents assignment identifier across the system.", "example": "74a687e29ae1f428e7ebe505" }, "note": { "type": "string", "description": "Represents assignment note.", "example": "This is a sample note for an assignment." }, "period": { "$ref": "#/components/schemas/DateRangeDto" }, "projectArchived": { "type": "boolean" }, "projectBillable": { "type": "boolean" }, "projectColor": { "type": "string", "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format.", "example": "#000000" }, "projectId": { "type": "string", "description": "Represents project identifier across the system.", "example": "56b687e29ae1f428e7ebe504" }, "projectName": { "type": "string", "description": "Represents project name.", "example": "Software Development" }, "startTime": { "type": "string", "description": "Represents start time in hh:mm:ss format.", "example": "10:00:00" }, "taskId": { "type": "string", "description": "Represents task identifier across the system.", "example": "36b687e29ae1f428e7ebe109" }, "taskName": { "type": "string", "description": "Represents task name.", "example": "Bugfixing" }, "userId": { "type": "string", "description": "Represents user identifier across the system.", "example": "72k687e29ae1f428e7ebe109" }, "userName": { "type": "string", "description": "Represents user name.", "example": "John Doe" }, "workspaceId": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } }, "AssignmentPerDayDto": { "type": "object", "properties": { "date": { "type": "string", "format": "date-time" }, "hasAssignment": { "type": "boolean" } }, "description": "Represents a list of assignment per day objects." }, "AssignmentUpdateRequestV1": { "required": [ "end", "start" ], "type": "object", "properties": { "billable": { "type": "boolean", "description": "Indicates whether assignment is billable or not.", "default": false }, "end": { "type": "string", "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T00:00:00Z" }, "hoursPerDay": { "type": "number", "description": "Represents assignment total hours per day.", "format": "double", "example": 7.5 }, "includeNonWorkingDays": { "type": "boolean", "description": "Indicates whether to include non-working days or not.", "default": false }, "note": { "maxLength": 100, "minLength": 0, "type": "string", "description": "Represents an assignment note.", "example": "This is a sample note for an assignment." }, "seriesUpdateOption": { "type": "string", "description": "Valid series option", "example": "THIS_ONE", "enum": [ "THIS_ONE", "THIS_AND_FOLLOWING", "ALL" ] }, "start": { "type": "string", "description": "Represents start date in yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" }, "startTime": { "type": "string", "description": "Represents a start time in the hh:mm:ss format.", "example": "10:00:00" }, "taskId": { "type": "string", "description": "Represents task identifier across the system.", "example": "56b687e29ae1f428e7ebe505" } } }, "AuthorizationSourceDtoV1": { "type": "object", "properties": { "id": { "type": "string", "description": "Represents authorization source identifier across the system.", "example": "5b715612b079875110791234" }, "type": { "type": "string", "description": "Represents a valid authorization source type.", "example": "USER_GROUP", "enum": [ "USER_GROUP" ] } }, "description": "Represents an authorization data transfer object." }, "AutomaticAccrualDto": { "type": "object", "properties": { "amount": { "type": "number", "description": "Represents automatic accrual's amount", "format": "double", "example": 20 }, "period": { "type": "string", "description": "Represents automatic accrual's period", "example": "YEAR", "enum": [ "MONTH", "YEAR" ] }, "timeUnit": { "type": "string", "description": "Represents automatic accrual's time unit", "example": "DAYS", "enum": [ "DAYS", "HOURS" ] } }, "description": "Represents automatic approval settings." }, "AutomaticAccrualRequest": { "required": [ "amount" ], "type": "object", "properties": { "amount": { "minimum": 0, "type": "number", "description": "Represents amount of automatic accrual.", "format": "double", "example": 2 }, "period": { "type": "string", "description": "Represents automatic accrual period.", "example": "MONTH", "enum": [ "MONTH", "YEAR" ] }, "timeUnit": { "type": "string", "description": "Represents automatic accrual time unit.", "example": "DAYS", "enum": [ "DAYS", "HOURS" ] } }, "description": "Provide automatic accrual settings." }, "AutomaticLockDtoV1": { "type": "object", "properties": { "changeDay": { "type": "string", "description": "Represents a day of the week.", "example": "FRIDAY", "enum": [ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ] }, "dayOfMonth": { "type": "integer", "description": "Represents a day of month as integer.", "format": "int32", "example": 15 }, "firstDay": { "type": "string", "description": "Represents a day of the week.", "example": "MONDAY", "enum": [ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ] }, "olderThanPeriod": { "type": "string", "description": "Represents a time entry automatic lock period enum.", "example": "DAYS", "enum": [ "DAYS", "WEEKS", "MONTHS" ] }, "olderThanValue": { "type": "integer", "description": "Represents an integer as the criteria for locking time entries.", "format": "int32", "example": 5 }, "type": { "type": "string", "description": "Represents a time entry automatic lock type enum.", "example": "WEEKLY", "enum": [ "WEEKLY", "MONTHLY", "OLDER_THAN" ] } }, "description": "Represents an automatic lock object." }, "AutomaticTimeEntryCreationDto": { "type": "object", "properties": { "defaultEntities": { "$ref": "#/components/schemas/DefaultEntitiesDto" }, "enabled": { "type": "boolean" } }, "description": "Represents automatic time entry creation settings." }, "AutomaticTimeEntryCreationRequest": { "required": [ "defaultEntities" ], "type": "object", "properties": { "defaultEntities": { "$ref": "#/components/schemas/DefaultEntitiesRequest" }, "enabled": { "type": "boolean", "description": "Indicates that automatic time entry creation is enabled.", "default": false } }, "description": "Provides automatic time entry creation settings." }, "BalanceDtoV1": { "type": "object", "properties": { "balance": { "type": "number", "description": "Represents the balance amount of the time unit", "format": "double", "example": 20 }, "id": { "type": "string", "description": "Represent balance identifier across the system.", "example": "5b715448b079875110792222" }, "negativeBalanceAmount": { "type": "number", "description": "Represent negative balance amount.", "format": "double", "example": 2 }, "negativeBalanceLimit": { "type": "boolean", "description": "Indicates whether the negative balance limit is allowed.", "example": true, "default": false }, "policyArchived": { "type": "boolean", "description": "Indicates whether the policy is archived.", "example": false, "default": false }, "policyId": { "type": "string", "description": "Represent policy identifier across the system.", "example": "5b715448b079875110793333" }, "policyName": { "type": "string", "description": "Represent policy name.", "example": "Days" }, "policyTimeUnit": { "type": "string", "description": "Represent policy time unit.", "example": "DAYS", "enum": [ "DAYS", "HOURS" ] }, "total": { "type": "number", "description": "Represents the total amount", "format": "double", "example": 18 }, "used": { "type": "number", "description": "Represents the balance used amount", "format": "double", "example": 2 }, "userId": { "type": "string", "description": "Represent user identifier across the system.", "example": "5b715448b079875110791234" }, "userName": { "type": "string", "description": "Represent user's username.", "example": "nicholas" }, "workspaceId": { "type": "string", "description": "Represent workspace identifier across the system.", "example": "5b715448b079875110791111" } }, "description": "Represent the list of balances." }, "BalancesWithCountDtoV1": { "type": "object", "properties": { "balances": { "type": "array", "items": { "$ref": "#/components/schemas/BalanceDtoV1" } }, "count": { "type": "integer", "description": "Represents the count of balances.", "format": "int32", "example": 2 } } }, "BaseFilterRequest": { "type": "object", "properties": { "contains": { "type": "string", "description": "Filter type.", "example": "CONTAINS", "enum": [ "CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY" ] }, "ids": { "uniqueItems": true, "type": "array", "description": "Represents a list of filter identifiers.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "Represents a list of filter identifiers.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } } }, "description": "Represents a company filter object. If provided, you'll get a filtered list of invoices that matches the specified company filter." }, "CalculationType": { "type": "object", "description": "Represents an enum if tax is calculated as item based or invoice based.", "example": "INVOICE_BASED", "oneOf": [ { "type": "string", "enum": [ "INVOICE_BASED", "ITEM_BASED" ] } ], "properties": { "INVOICE_BASED": { "type": "string", "enum": [ "INVOICE_BASED", "ITEM_BASED" ] }, "ITEM_BASED": { "type": "string", "enum": [ "INVOICE_BASED", "ITEM_BASED" ] }, "value": { "type": "string" } } }, "ChangeInvoiceStatusRequestV1": { "type": "object", "properties": { "invoiceStatus": { "type": "string", "description": "Represents the invoice status to be set.", "example": "PAID", "enum": [ "UNSENT", "SENT", "PAID", "PARTIALLY_PAID", "VOID", "OVERDUE" ] } } }, "ChangePolicyStatusRequestV1": { "required": [ "status" ], "type": "object", "properties": { "status": { "type": "string", "description": "Provide the status you would like to use for changing the policy.", "example": "ACTIVE", "enum": [ "ACTIVE", "ARCHIVED", "ALL" ] } } }, "ClientDtoV1": { "type": "object", "properties": { "address": { "type": "string", "description": "Represents client's address.", "example": "Ground Floor, ABC Bldg., Palo Alto, California, USA 94020" }, "archived": { "type": "boolean", "description": "Represents whether a client is archived or not.", "default": false }, "ccEmails": { "type": "array", "description": "Represents additional emails for sending invoices.", "example": "clientx@example.com", "items": { "type": "string", "description": "Represents additional emails for sending invoices.", "example": "clientx@example.com" } }, "currencyId": { "type": "string", "description": "Represents currency identifier across the system.", "example": "33t687e29ae1f428e7ebe505" }, "email": { "type": "string", "description": "Represents client email.", "example": "clientx@example.com" }, "id": { "type": "string", "description": "Represents client identifier across the system.", "example": "44a687e29ae1f428e7ebe305" }, "name": { "type": "string", "description": "Represents client name.", "example": "Client X" }, "note": { "type": "string", "description": "Represents saved notes for the client.", "example": "This is a sample note for the client." }, "workspaceId": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } }, "ClientWithCurrencyDtoV1": { "type": "object", "properties": { "address": { "type": "string", "description": "Represents client's address.", "example": "Ground Floor, ABC Bldg., Palo Alto, California, USA 94020" }, "archived": { "type": "boolean", "description": "Represents whether a client is archived or not.", "default": false }, "ccEmails": { "type": "array", "description": "Represents additional emails for sending invoices.", "example": "clientx@example.com", "items": { "type": "string", "description": "Represents additional emails for sending invoices.", "example": "clientx@example.com" } }, "currencyCode": { "type": "string", "description": "Represents client currency code.", "example": "USD" }, "currencyId": { "type": "string", "description": "Represents currency identifier across the system.", "example": "33t687e29ae1f428e7ebe505" }, "email": { "type": "string", "description": "Represents client email.", "example": "clientx@example.com" }, "id": { "type": "string", "description": "Represents client identifier across the system.", "example": "44a687e29ae1f428e7ebe305" }, "name": { "type": "string", "description": "Represents client name.", "example": "Client X" }, "note": { "type": "string", "description": "Represents saved notes for the client.", "example": "This is a sample note for the client." }, "workspaceId": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } }, "ContainsArchivedFilterRequest": { "type": "object", "properties": { "contains": { "type": "string", "description": "Filter type.", "example": "CONTAINS", "enum": [ "CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY" ] }, "ids": { "uniqueItems": true, "type": "array", "description": "Represents a list of filter identifiers.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "Represents a list of filter identifiers.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } }, "status": { "type": "string", "description": "Filters entities by status.", "example": "ACTIVE", "enum": [ "ACTIVE", "ARCHIVED", "ALL" ] } }, "description": "Represents a project filter for imported items." }, "ContainsUserGroupFilterRequest": { "type": "object", "properties": { "contains": { "type": "string", "description": "Filter type.", "example": "CONTAINS", "enum": [ "CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY" ] }, "ids": { "uniqueItems": true, "type": "array", "description": "Represents a list of filter identifiers.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "Represents a list of filter identifiers.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } }, "status": { "type": "string", "description": "Filters entities by status.", "example": "ACTIVE", "enum": [ "PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL" ] } }, "description": "Provide list with user group ids and corresponding status." }, "ContainsUserGroupFilterRequestV1": { "type": "object", "properties": { "contains": { "type": "string", "description": "Filter type.", "example": "CONTAINS", "enum": [ "CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY" ] }, "ids": { "uniqueItems": true, "type": "array", "description": "Represents a list of filter identifiers.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "Represents a list of filter identifiers.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } }, "status": { "type": "string", "description": "Filters entities by status.", "example": "ACTIVE", "enum": [ "PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL" ] } }, "description": "Represents a user group filter request object." }, "ContainsUsersFilterRequestForHoliday": { "type": "object", "properties": { "contains": { "type": "string", "description": "Filter type.", "example": "CONTAINS", "enum": [ "CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY" ] }, "ids": { "uniqueItems": true, "type": "array", "description": "Represents a list of filter identifiers.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "Represents a list of filter identifiers.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } }, "status": { "type": "string", "description": "Filters entities by status.", "example": "ACTIVE", "enum": [ "ALL", "ACTIVE", "INACTIVE" ] }, "statuses": { "type": "array", "items": { "type": "string" } } }, "description": "Provide list with users ids and corresponding status." }, "ContainsUsersFilterRequestV1": { "type": "object", "properties": { "contains": { "type": "string", "description": "Filter type.", "example": "CONTAINS", "enum": [ "CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY" ] }, "ids": { "uniqueItems": true, "type": "array", "description": "Represents a list of filter identifiers.", "example": [ "5a0ab5acb07987125438b60f", "64c777ddd3fcab07cfbb210c" ], "items": { "type": "string", "description": "Represents a list of filter identifiers.", "example": "[\"5a0ab5acb07987125438b60f\",\"64c777ddd3fcab07cfbb210c\"]" } }, "sourceType": { "type": "string", "description": "Valid authorization source type.", "example": "USER_GROUP", "enum": [ "USER_GROUP" ] }, "status": { "type": "string", "description": "Filters entities by status.", "example": "ACTIVE", "enum": [ "PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL" ] }, "statuses": { "type": "array", "description": "Valid array of membership statuses.", "example": [ "PENDING", "INACTIVE" ], "items": { "type": "string", "description": "Valid array of membership statuses.", "example": "[\"PENDING\",\"INACTIVE\"]", "enum": [ "PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL" ] } } }, "description": "Represents a user filter request object." }, "CopyAssignmentRequestV1": { "required": [ "userId" ], "type": "object", "properties": { "seriesUpdateOption": { "type": "string", "description": "Represents a series update option.", "example": "THIS_ONE", "enum": [ "THIS_ONE", "THIS_AND_FOLLOWING", "ALL" ] }, "userId": { "type": "string", "description": "Represents a user identifier across the system.", "example": "72k687e29ae1f428e7ebe109" } } }, "CostRateRequest": { "type": "object", "properties": { "amount": { "minimum": 0, "type": "integer", "description": "Represents an amount as integer.", "format": "int32", "example": 2000 }, "since": { "type": "string", "description": "Represents a datetime in yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" }, "sinceAsInstant": { "type": "string", "format": "date-time" } }, "description": "Represents a cost rate request object." }, "CostRateRequestV1": { "required": [ "amount" ], "type": "object", "properties": { "amount": { "minimum": 0, "type": "integer", "description": "Represents an amount as integer.", "format": "int32", "example": 20000 }, "since": { "type": "string", "description": "Represents a date and time in yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00Z" } } }, "CreateApprovalRequest": { "required": [ "periodStart" ], "type": "object", "properties": { "period": { "type": "string", "description": "Specifies the approval period. It has to match the workspace approval period setting.", "example": "MONTHLY", "enum": [ "WEEKLY", "SEMI_MONTHLY", "MONTHLY" ] }, "periodStart": { "minLength": 1, "type": "string", "description": "Specifies an approval period start date in yyyy-MM-ddThh:mm:ssZ format.", "example": "2020-01-01T00:00:00.000Z" } } }, "CreateClientRequestV1": { "type": "object", "properties": { "address": { "maxLength": 3000, "minLength": 0, "type": "string", "description": "Represents a client's address.", "example": "Ground Floor, ABC Bldg., Palo Alto, California, USA 94020" }, "email": { "type": "string", "format": "email", "description": "Represents a client email.", "example": "clientx@example.com" }, "name": { "maxLength": 100, "minLength": 0, "type": "string", "description": "Represents a client name.", "example": "Client X" }, "note": { "maxLength": 3000, "minLength": 0, "type": "string", "description": "Represents additional notes for the client.", "example": "This is a sample note for the client." } } }, "CreateCustomAttributeRequest": { "required": [ "name", "namespace", "value" ], "type": "object", "properties": { "name": { "minLength": 1, "type": "string", "description": "Represents custom attribute name.", "example": "race" }, "namespace": { "minLength": 1, "type": "string", "description": "Represents custom attribute namespace.", "example": "user_info" }, "value": { "minLength": 1, "type": "string", "description": "Represents custom attribute value.", "example": "Asian" } }, "description": "Represents a list of create custom field request objects." }, "CreateExpenseV1Request": { "required": [ "amount", "categoryId", "date", "file", "projectId", "userId" ], "type": "object", "properties": { "amount": { "maximum": 92233720368547760, "type": "number", "description": "Represents an expense amount as the double data type.", "format": "double", "example": 99.5 }, "billable": { "type": "boolean", "description": "Indicates whether expense is billable or not.", "default": false }, "categoryId": { "type": "string", "description": "Represents a category identifier across the system.", "example": "45y687e29ae1f428e7ebe890" }, "date": { "type": "string", "description": "Provides a valid yyyy-MM-ddThh:mm:ssZ format date.", "format": "date-time", "example": "2020-01-01T00:00:00Z" }, "file": { "type": "string", "format": "binary" }, "notes": { "maxLength": 3000, "minLength": 0, "type": "string", "description": "Represents notes for an expense.", "example": "This is a sample note for this expense." }, "projectId": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" }, "taskId": { "type": "string", "description": "Represents a task identifier across the system.", "example": "54m377ddd3fcab07cfbb432w" }, "userId": { "minLength": 1, "type": "string", "description": "Represents a user identifier across the system.", "example": "89b687e29ae1f428e7ebe912" } } }, "CreateHolidayRequestV1": { "required": [ "datePeriod", "name" ], "type": "object", "properties": { "automaticTimeEntryCreation": { "$ref": "#/components/schemas/AutomaticTimeEntryCreationRequest" }, "color": { "pattern": "^#(?:[0-9a-fA-F]{6}){1}$", "type": "string", "description": "Provide color in format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format.", "example": "#8BC34A" }, "datePeriod": { "$ref": "#/components/schemas/DatePeriodRequest" }, "everyoneIncludingNew": { "type": "boolean", "description": "Indicates whether the holiday is shown to new users.", "example": true, "default": false }, "name": { "maxLength": 100, "minLength": 2, "type": "string", "description": "Provide the name of the holiday.", "example": "Labour Day" }, "occursAnnually": { "type": "boolean", "description": "Indicates whether the holiday occurs annually.", "example": true, "default": false }, "userGroups": { "$ref": "#/components/schemas/UserGroupIdsSchema" }, "users": { "$ref": "#/components/schemas/UserIdsSchema" } } }, "CreateInvoiceDtoV1": { "type": "object", "properties": { "billFrom": { "type": "string", "description": "Represents to whom the invoice should be billed from.", "example": "Business X" }, "clientId": { "type": "string", "description": "Represents client identifier across the system.", "example": "34p687e29ae1f428e7ebe562" }, "currency": { "type": "string", "description": "Represents the currency used by the invoice.", "example": "USD" }, "dueDate": { "type": "string", "description": "Represents an invoice due date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time", "example": "2020-06-01T08:00:00Z" }, "id": { "type": "string", "description": "Represents invoice identifier across the system.", "example": "78a687e29ae1f428e7ebe303" }, "issuedDate": { "type": "string", "description": "Represents an invoice issued date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time", "example": "2020-01-01T08:00:00Z" }, "number": { "type": "string", "description": "Represents an invoice number.", "example": "202306121129" } } }, "CreateInvoiceItemRequestV1": { "required": [ "applyTaxes", "description", "itemType", "quantity", "unitPrice" ], "type": "object", "properties": { "applyTaxes": { "type": "string", "description": "Represents taxes applied to the invoice item. Applies only when the specified taxes are active on the invoice.", "example": "TAX1TAX2", "enum": [ "TAX1", "TAX2", "TAX1TAX2", "NONE" ] }, "description": { "type": "string", "description": "Represents an invoice item description.", "example": "This is a description of an invoice item." }, "itemType": { "minLength": 1, "type": "string", "description": "Represents an item type.", "example": "Service" }, "quantity": { "type": "integer", "description": "Represents an item quantity.", "format": "int64", "example": 10000 }, "unitPrice": { "type": "integer", "description": "Represents an item unit price.", "format": "int64", "example": 500 } } }, "CreateInvoicePaymentRequest": { "type": "object", "properties": { "amount": { "minimum": 1, "type": "integer", "description": "Represents an invoice payment amount as long.", "format": "int64", "example": 100 }, "note": { "maxLength": 1000, "minLength": 0, "type": "string", "description": "Represents an invoice payment note.", "example": "This is a sample note for this invoice payment." }, "paymentDate": { "type": "string", "description": "Represents an invoice payment date in yyyy-MM-ddThh:mm:ssZ format.", "example": "2021-01-01T12:00:00Z" } } }, "CreateInvoiceRequest": { "required": [ "clientId", "currency", "dueDate", "issuedDate", "number" ], "type": "object", "properties": { "clientId": { "minLength": 1, "type": "string", "description": "Represents a client identifier across the system.", "example": "98h687e29ae1f428e7ebe707" }, "currency": { "minLength": 1, "type": "string", "description": "Represents the currency used by the invoice.", "example": "USD" }, "dueDate": { "type": "string", "description": "Represents an invoice due date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time", "example": "2020-06-01T08:00:00Z" }, "issuedDate": { "type": "string", "description": "Represents an invoice issued date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time", "example": "2020-01-01T08:00:00Z" }, "number": { "minLength": 1, "type": "string", "description": "Represents an invoice number.", "example": "202306121129" }, "timeViewMode": { "type": "string", "enum": [ "TIME_SENSITIVE_VIEW", "AGGREGATED_TIME_VIEW" ] } } }, "CreatePolicyRequestV1": { "required": [ "approve", "name" ], "type": "object", "properties": { "allowHalfDay": { "type": "boolean", "description": "Indicates whether policy allows half days.", "example": false, "default": false }, "allowNegativeBalance": { "type": "boolean", "description": "Indicates whether policy allows negative balances.", "example": true, "default": false }, "approve": { "$ref": "#/components/schemas/PolicyApprovalDto" }, "archived": { "type": "boolean", "description": "Indicates whether policy is archived.", "example": true, "default": false }, "automaticAccrual": { "$ref": "#/components/schemas/AutomaticAccrualRequest" }, "automaticTimeEntryCreation": { "$ref": "#/components/schemas/AutomaticTimeEntryCreationRequest" }, "color": { "pattern": "^#(?:[0-9a-fA-F]{6}){1}$", "type": "string", "description": "Provide color in format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format.", "example": "#8BC34A" }, "everyoneIncludingNew": { "type": "boolean", "description": "Indicates whether the policy is to be applied to future new users.", "example": false, "default": false }, "hasExpiration": { "type": "boolean", "description": "Indicates whether the policy balance should have expiration", "example": false, "default": false }, "icon": { "type": "string", "description": "Provide icon.", "example": "UMBRELLA", "enum": [ "UMBRELLA", "SNOWFLAKE", "FAMILY", "PLANE", "STETHOSCOPE", "HEALTH_METRICS", "CHILDCARE", "LUGGAGE", "MONETIZATION", "CALENDAR" ] }, "name": { "maxLength": 100, "minLength": 2, "type": "string", "description": "Represents a name of new policy.", "example": "Mental health days" }, "negativeBalance": { "$ref": "#/components/schemas/NegativeBalanceRequest" }, "timeUnit": { "type": "string", "description": "Indicates time unit of the policy. ", "example": "DAYS", "enum": [ "DAYS", "HOURS" ] }, "userGroups": { "$ref": "#/components/schemas/UserGroupIdsSchema" }, "users": { "$ref": "#/components/schemas/UserIdsSchema" } } }, "CreateProjectFromTemplateV1": { "required": [ "name", "templateProjectId" ], "type": "object", "properties": { "clientId": { "type": "string", "description": "Represents a client identifier across the system.", "example": "9t641568b07987035750704" }, "color": { "pattern": "^#(?:[0-9a-fA-F]{6}){1}$", "type": "string", "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format.", "example": "#000000" }, "isPublic": { "type": "boolean", "description": "Indicates whether the project is public or not.", "default": false }, "name": { "maxLength": 250, "minLength": 2, "type": "string", "description": "Represents a project name.", "example": "Software Development" }, "templateProjectId": { "minLength": 1, "type": "string", "description": "Represents a project identifier across the system.", "example": "5b641568b07987035750505e" } } }, "CreateTimeEntryRequest": { "type": "object", "properties": { "billable": { "type": "boolean", "description": "Indicates whether a time entry is billable or not.", "default": false }, "customAttributes": { "maxItems": 10, "minItems": 0, "type": "array", "description": "Represents a list of create custom field request objects.", "items": { "$ref": "#/components/schemas/CreateCustomAttributeRequest" } }, "customFields": { "maxItems": 50, "minItems": 0, "type": "array", "description": "Represents a list of value objects for user’s custom fields.", "items": { "$ref": "#/components/schemas/UpdateCustomFieldRequest" } }, "description": { "maxLength": 3000, "type": "string", "description": "Represents time entry description.", "example": "This is a sample time entry description." }, "end": { "type": "string", "description": "Represents an end date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time", "example": "2021-01-01T00:00:00Z" }, "projectId": { "type": "string", "description": "Represents a project identifier across the system.", "example": "25b687e29ae1f428e7ebe123" }, "start": { "type": "string", "description": "Represents a start date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time", "example": "2020-01-01T00:00:00Z" }, "tagIds": { "type": "array", "description": "Represents a list of tag ids.", "example": [ "321r77ddd3fcab07cfbb567y", "44x777ddd3fcab07cfbb88f" ], "items": { "type": "string", "description": "Represents a list of tag ids.", "example": "[\"321r77ddd3fcab07cfbb567y\",\"44x777ddd3fcab07cfbb88f\"]" } }, "taskId": { "type": "string", "description": "Represents a task identifier across the system.", "example": "54m377ddd3fcab07cfbb432w" }, "type": { "type": "string", "description": "Valid time entry type.", "enum": [ "REGULAR", "BREAK" ] } } }, "CreateTimeOffRequestV1Request": { "required": [ "timeOffPeriod" ], "type": "object", "properties": { "note": { "type": "string", "description": "Provide the note you would like to use for creating the time off request.", "example": "Create Time Off Note" }, "timeOffPeriod": { "$ref": "#/components/schemas/TimeOffRequestPeriodV1Request" } } }, "CreateWebhookRequestV1": { "required": [ "triggerSource", "triggerSourceType", "url", "webhookEvent" ], "type": "object", "properties": { "name": { "maxLength": 30, "minLength": 2, "type": "string", "description": "Represents a webhook name.", "example": "stripe" }, "triggerSource": { "type": "array", "description": "Represents a list of trigger sources.", "example": [ "54a687e29ae1f428e7ebe909", "87p187e29ae1f428e7ebej56" ], "items": { "type": "string", "description": "Represents a list of trigger sources.", "example": "[\"54a687e29ae1f428e7ebe909\",\"87p187e29ae1f428e7ebej56\"]" } }, "triggerSourceType": { "type": "string", "description": "Represents a webhook event trigger source type.", "example": "PROJECT_ID", "enum": [ "PROJECT_ID", "USER_ID", "TAG_ID", "TASK_ID", "WORKSPACE_ID", "ASSIGNMENT_ID", "EXPENSE_ID" ] }, "url": { "minLength": 1, "type": "string", "description": "Represents a webhook target url.", "example": "https://example-clockify.com/stripeEndpoint" }, "webhookEvent": { "type": "string", "description": "Represents a webhook event type.", "example": "NEW_PROJECT", "enum": [ "NEW_PROJECT", "NEW_TASK", "NEW_CLIENT", "NEW_TIMER_STARTED", "TIMER_STOPPED", "TIME_ENTRY_UPDATED", "TIME_ENTRY_DELETED", "TIME_ENTRY_SPLIT", "NEW_TIME_ENTRY", "TIME_ENTRY_RESTORED", "NEW_TAG", "USER_DELETED_FROM_WORKSPACE", "USER_JOINED_WORKSPACE", "USER_DEACTIVATED_ON_WORKSPACE", "USER_ACTIVATED_ON_WORKSPACE", "USER_EMAIL_CHANGED", "USER_UPDATED", "NEW_INVOICE", "INVOICE_UPDATED", "NEW_APPROVAL_REQUEST", "APPROVAL_REQUEST_STATUS_UPDATED", "TIME_OFF_REQUESTED", "TIME_OFF_REQUEST_UPDATED", "TIME_OFF_REQUEST_APPROVED", "TIME_OFF_REQUEST_REJECTED", "TIME_OFF_REQUEST_STARTED", "TIME_OFF_REQUEST_WITHDRAWN", "BALANCE_UPDATED", "TAG_UPDATED", "TAG_DELETED", "TASK_UPDATED", "CLIENT_UPDATED", "TASK_DELETED", "CLIENT_DELETED", "EXPENSE_RESTORED", "ASSIGNMENT_CREATED", "ASSIGNMENT_DELETED", "ASSIGNMENT_PUBLISHED", "ASSIGNMENT_UPDATED", "EXPENSE_CREATED", "EXPENSE_DELETED", "EXPENSE_UPDATED", "PROJECT_UPDATED", "PROJECT_DELETED", "USER_GROUP_CREATED", "USER_GROUP_UPDATED", "USER_GROUP_DELETED", "USERS_INVITED_TO_WORKSPACE", "LIMITED_USERS_ADDED_TO_WORKSPACE", "COST_RATE_UPDATED", "BILLABLE_RATE_UPDATED" ] } } }, "CreateWorkspaceRequestV1": { "type": "object", "properties": { "name": { "maxLength": 50, "minLength": 1, "type": "string", "description": "Represents a workspace name.", "example": "Cool Company" }, "organizationId": { "type": "string", "description": "Represents the Cake organization identifier across the system.", "example": "67d471fb56aa9668b7bfa295" } } }, "CurrencyWithDefaultInfoDtoV1": { "type": "object", "properties": { "code": { "type": "string", "description": "Represents currency code.", "example": "USD" }, "id": { "type": "string", "description": "Represents currency identifier across the system.", "example": "5b641568b07987035750505e" }, "isDefault": { "type": "boolean", "description": "Indicates whether curency should be set as default.", "example": true, "default": false } }, "description": "Represents currency with default info object." }, "CustomFieldDefaultValuesDtoV1": { "type": "object", "properties": { "projectId": { "type": "string", "description": "Represents project identifier across the system.", "example": "5b641568b07987035750505e" }, "status": { "type": "string", "description": "Represents custom field status", "example": "VISIBLE" }, "value": { "type": "object", "description": "Represents a custom field's default value", "example": "Manila" } }, "description": "Represents a list of custom field default values data transfer objects." }, "CustomFieldDtoV1": { "type": "object", "properties": { "allowedValues": { "type": "array", "description": "Represents a list of custom field's allowed values.", "example": [ "New York", "London", "Manila", "Sydney", "Belgrade" ], "items": { "type": "string", "description": "Represents a list of custom field's allowed values.", "example": "[\"New York\",\"London\",\"Manila\",\"Sydney\",\"Belgrade\"]" } }, "description": { "type": "string", "description": "Represents custom field description.", "example": "This field contains a location." }, "entityType": { "type": "string", "description": "Represents custom field entity type", "example": "USER" }, "id": { "type": "string", "description": "Represents custom field identifier across the system.", "example": "44a687e29ae1f428e7ebe305" }, "name": { "type": "string", "description": "Represents custom field name.", "example": "location" }, "onlyAdminCanEdit": { "type": "boolean", "description": "Flag to set whether custom field is modifiable only by admin users.", "default": false }, "placeholder": { "type": "string", "description": "Represents custom field placeholder value.", "example": "Location" }, "projectDefaultValues": { "type": "array", "description": "Represents a list of custom field default values data transfer objects.", "items": { "$ref": "#/components/schemas/CustomFieldDefaultValuesDtoV1" } }, "required": { "type": "boolean", "description": "Flag to set whether custom field is mandatory or not.", "default": false }, "status": { "type": "string", "description": "Represents custom field status", "example": "VISIBLE" }, "type": { "type": "string", "description": "Represents custom field type.", "example": "DROPDOWN_MULTIPLE" }, "workspaceDefaultValue": { "type": "object", "description": "Represents a custom field's default value in the workspace.", "example": "Manila" }, "workspaceId": { "type": "string", "description": "Represents workspace identifier across the system.", "example": "64a687e29ae1f428e7ebe303" } } }, "CustomFieldProjectDefaultValuesRequest": { "type": "object", "properties": { "defaultValue": { "type": "object", "description": "Represents a custom field's default value.", "example": "Manila" }, "status": { "type": "string", "description": "Represents a custom field status.", "example": "VISIBLE", "enum": [ "INACTIVE", "VISIBLE", "INVISIBLE" ] } } }, "CustomFieldRequestV1": { "required": [ "name", "type" ], "type": "object", "properties": { "allowedValues": { "type": "array", "description": "Represents a list of custom field's allowed values.", "example": [ "New York", "London", "Manila", "Sydney", "Belgrade" ], "items": { "type": "string", "description": "Represents a list of custom field's allowed values.", "example": "[\"New York\",\"London\",\"Manila\",\"Sydney\",\"Belgrade\"]" } }, "description": { "type": "string", "description": "Represents custom field description.", "example": "This field contains a location." }, "entityType": { "type": "string", "description": "Represents custom field entity type", "example": "TIMEENTRY", "enum": [ "TIMEENTRY", "USER" ] }, "name": { "type": "string", "description": "Represents custom field name.", "example": "location" }, "onlyAdminCanEdit": { "type": "boolean", "description": "Flag to set whether custom field is modifiable only by admin users.", "default": false }, "placeholder": { "type": "string", "description": "Represents custom field placeholder value.", "example": "Location" }, "status": { "type": "string", "description": "Represents custom field status", "example": "VISIBLE", "enum": [ "INACTIVE", "VISIBLE", "INVISIBLE" ] }, "type": { "type": "string", "description": "Represents custom field type.", "example": "DROPDOWN_MULTIPLE", "enum": [ "TXT", "NUMBER", "DROPDOWN_SINGLE", "DROPDOWN_MULTIPLE", "CHECKBOX", "LINK" ] }, "workspaceDefaultValue": { "type": "object", "description": "Represents a custom field's default value in the workspace.