{
"openapi": "3.0.0",
"info": {
"title": "awork API",
"version": "1.3.0",
"description": "This is the API documentation for awork.",
"termsOfService": "https://www.awork.com/legal-and-privacy/privacy-policy-awork-app",
"contact": {
"name": "awork Support",
"url": "https://support.awork.com",
"email": "support@awork.com"
}
},
"servers": [
{
"url": "https://api.awork.com/api/v2",
"description": "awork Production"
}
],
"paths": {
"/me/timeentries/last": {
"get": {
"tags": [
"TimeEntries"
],
"summary": "Returns the last time entry of a specified user.",
"description": "The last time entry is always the last one that was started.\r\n Time entries which are started in the future are ignored.\r\n If a time entry does not have a start time, 12.00 am is automatically assumed as the start time\r\n for comparison with other time entries from the same day.\r\n\r\nThe user must be an admin or the creator.",
"operationId": "GetMyLastTimeEntriesV2",
"parameters": [
{
"name": "userId",
"in": "query",
"description": "The id of the user.",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"204": {
"description": "No Content"
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"admin": "true",
"owner": "true"
}
}
},
"/me/timetracking/pause": {
"post": {
"tags": [
"TimeTracking"
],
"summary": "Pauses a running time tracking for a user.",
"description": "If there is already a paused time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.",
"operationId": "PostPauseMyTimeTrackingV2",
"parameters": [
{
"name": "userId",
"in": "query",
"description": "The id of the user.",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"204": {
"description": "No Content"
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"owner": "true"
}
}
},
"/me/timetracking/resume": {
"post": {
"tags": [
"TimeTracking"
],
"summary": "Resumes a paused time tracking for a user.",
"description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.",
"operationId": "PostResumeMyTimeTrackingV2",
"parameters": [
{
"name": "userId",
"in": "query",
"description": "The id of the user.",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"204": {
"description": "No Content"
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"owner": "true"
}
}
},
"/me/timetracking/start": {
"post": {
"tags": [
"TimeTracking"
],
"summary": "Starts a new time tracking for a user.",
"description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.",
"operationId": "PostStartMyTimeTrackingV2",
"parameters": [
{
"name": "userId",
"in": "query",
"description": "The id of the user.",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"description": "The model describing the time tracking to start.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StartTimeTrackingForm"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"admin": "true",
"owner": "true"
}
}
},
"/me/timetracking/stop": {
"post": {
"tags": [
"TimeTracking"
],
"summary": "Stops the currently running time tracking of the specified user.",
"description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.",
"operationId": "PostStopMyTimeTrackingV2",
"parameters": [
{
"name": "userId",
"in": "query",
"description": "The id of the user.",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StopTimeTrackingForm"
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"204": {
"description": "No Content"
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"admin": "true",
"owner": "true"
}
}
},
"/projects/{projectId}/timeentries": {
"get": {
"tags": [
"TimeEntries"
],
"summary": "Returns all time entries of the specified project.",
"description": "\r\n\r\nAny authenticated user.",
"operationId": "GetProjectTimeEntriesV2",
"parameters": [
{
"name": "projectId",
"in": "path",
"description": "The id of the project.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/pageSize"
},
{
"$ref": "#/components/parameters/orderby"
},
{
"$ref": "#/components/parameters/filterby"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"any": "true"
}
}
},
"/tasks/{taskId}/timeentries": {
"get": {
"tags": [
"TimeEntries"
],
"summary": "Returns all time entries of the specified task.",
"description": "\r\n\r\nAny authenticated user.",
"operationId": "GetTaskTimeEntriesV2",
"parameters": [
{
"name": "taskId",
"in": "path",
"description": "The id of the task.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/pageSize"
},
{
"$ref": "#/components/parameters/orderby"
},
{
"$ref": "#/components/parameters/filterby"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"any": "true"
}
}
},
"/timeentries": {
"get": {
"tags": [
"TimeEntries"
],
"summary": "Returns all time entries.",
"description": "Returns all time entries.\r\n Depending on the time entry, the calling users has to have several permissions to get the time entry.\r\n No permissions are required if the calling user is owner of this time entry (this includes external timetrackings from connected projects).\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions on the 'project-timetracking' feature are necessary (this does NOT include external timetrackings from connected projects).\r\n\r\nAny authenticated user.",
"operationId": "GetTimeEntriesV2",
"parameters": [
{
"name": "searchReindex",
"in": "query",
"description": "Whether to reindex for search.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/pageSize"
},
{
"$ref": "#/components/parameters/orderby"
},
{
"$ref": "#/components/parameters/filterby"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"any": "true"
}
},
"post": {
"tags": [
"TimeEntries"
],
"summary": "Creates a new time entry.",
"description": "Creates a new time entry.\r\n Depending on the time entry, the calling users has to have several permissions to create the time entry.\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n\r\nAny authenticated user.",
"operationId": "PostTimeEntryV2",
"requestBody": {
"description": "The time entry data.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntryForm"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"any": "true"
}
}
},
"/timeentries/simplified": {
"get": {
"tags": [
"TimeEntries"
],
"summary": "Retrieves all time entries with a simplified model based on the grouping parameter.",
"description": "\r\n\r\nAny authenticated user.",
"operationId": "GetTimeEntriesSimplifiedV2",
"parameters": [
{
"name": "grouping",
"in": "query",
"description": "The grouping type.",
"schema": {
"type": "string"
}
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/pageSize"
},
{
"$ref": "#/components/parameters/orderby"
},
{
"$ref": "#/components/parameters/filterby"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SimplifiedTimeEntry"
}
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"any": "true"
}
}
},
"/timeentries/{timeEntryId}": {
"get": {
"tags": [
"TimeEntries"
],
"summary": "Get a time entry by id.",
"description": "\r\n\r\nAny authenticated user.",
"operationId": "GetTimeEntryByIdV2",
"parameters": [
{
"name": "timeEntryId",
"in": "path",
"description": "The id of the time entry.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"any": "true"
}
},
"put": {
"tags": [
"TimeEntries"
],
"summary": "Updates the time entry with the specified id.",
"description": "Updates the time entry with the specified id.\r\n Depending on the time entry, the calling users has to have several permissions to update the time entry:\r\n No permissions are required if the calling user is owner of this time entry.\r\n If the calling user is not the creator of the time entry and the time entry is connected to a project, 'write'\r\n permissions\r\n on the 'project-timetracking' feature are necessary.\r\n If the time entry is connected to a task, the user needs to be assignee of this task or the user needs permissions on:\r\n 'project-planning-data' if it is a project task.\r\n The break duration of the time entry is kept the same. The break duration cannot be smaller than the duration of the\r\n time entry. To remove the breaks, use the endpoint POST /timeentries/{id}/removeBreaks.\r\n Following combination of times and duration are allowed for already completed time entries:\r\n - start time (local or utc) and end time (local or utc) (this option always takes precedence)\r\n - start time (local or utc) and duration\r\n - end time (local or utc) and duration\r\n For running time entries, you can only update the start time (local or utc) while the duration stays 0.\r\n\r\nAny authenticated user.",
"operationId": "PutTimeEntryByIdV2",
"parameters": [
{
"name": "timeEntryId",
"in": "path",
"description": "The id of the time entry.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"description": "The time entry data to update.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntryForm"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"any": "true"
}
}
},
"/timeentries/{timeEntryId}/removebreaks": {
"post": {
"tags": [
"TimeEntries"
],
"summary": "Handles removing all breaks from a time entry, effectively resuming the timer.",
"description": "\r\n\r\nAny authenticated user.",
"operationId": "PostTimeEntryRemoveBreaksV2",
"parameters": [
{
"name": "timeEntryId",
"in": "path",
"description": "The id of the time entry.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"any": "true"
}
}
},
"/users/{userId}/timeentries/last": {
"get": {
"tags": [
"TimeEntries"
],
"summary": "Returns the last time entry of a specified user.",
"description": "The last time entry is always the last one that was started.\r\n Time entries which are started in the future are ignored.\r\n If a time entry does not have a start time, 12.00 am is automatically assumed as the start time\r\n for comparison with other time entries from the same day.\r\n\r\nThe user must be an admin or the creator.",
"operationId": "GetLastTimeEntriesByUserIdV2",
"parameters": [
{
"name": "userId",
"in": "path",
"description": "The id of the user.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"204": {
"description": "No Content"
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"admin": "true",
"owner": "true"
}
}
},
"/users/{userId}/timetracking/pause": {
"post": {
"tags": [
"TimeTracking"
],
"summary": "Pauses a running time tracking for a user.",
"description": "If there is already a paused time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.",
"operationId": "PostPauseTimeTrackingByUserIdV2",
"parameters": [
{
"name": "userId",
"in": "path",
"description": "The id of the user.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"204": {
"description": "No Content"
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"owner": "true"
}
}
},
"/users/{userId}/timetracking/resume": {
"post": {
"tags": [
"TimeTracking"
],
"summary": "Resumes a paused time tracking for a user.",
"description": "If there is already a running time tracking nothing happens. If there is no running time tracking, returns NoContent.\r\n\r\nThe user must be the creator.",
"operationId": "PostResumeTimeTrackingByUserIdV2",
"parameters": [
{
"name": "userId",
"in": "path",
"description": "The id of the user.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"204": {
"description": "No Content"
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"owner": "true"
}
}
},
"/users/{userId}/timetracking/start": {
"post": {
"tags": [
"TimeTracking"
],
"summary": "Starts a new time tracking for a user.",
"description": "If there is already a running/paused time tracking it will be stopped automatically in order to start the new one.\r\n\r\nThe user must be an admin or the creator.",
"operationId": "PostStartTimeTrackingByUserIdV2",
"parameters": [
{
"name": "userId",
"in": "path",
"description": "The id of the user.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"description": "The model describing the time tracking to start.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StartTimeTrackingForm"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"admin": "true",
"owner": "true"
}
}
},
"/users/{userId}/timetracking/stop": {
"post": {
"tags": [
"TimeTracking"
],
"summary": "Stops the currently running time tracking of the specified user.",
"description": "The request body is optional. You can provide a stopReason to indicate how the tracking was stopped.\r\n For external API clients, the stopReason is automatically set to \"external-api\" regardless of what is provided.\r\n For this operation to work there must be a running time tracking for the user.\r\n\r\nThe user must be an admin or the creator.",
"operationId": "PostStopTimeTrackingByUserIdV2",
"parameters": [
{
"name": "userId",
"in": "path",
"description": "The id of the user.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StopTimeTrackingForm"
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TimeEntry"
}
}
}
},
"204": {
"description": "No Content"
}
},
"security": [
{
"oauth2": [
"full_access"
]
}
],
"x-api-versions": [
"v2"
],
"x-access": {
"admin": "true",
"owner": "true"
}
}
}
},
"components": {
"schemas": {
"Break": {
"type": "object",
"properties": {
"startDate": {
"type": "string",
"description": "The start date and time of the break in UTC. Required.",
"format": "date-time",
"example": "2022-01-01T12:00:00Z"
},
"duration": {
"type": "integer",
"description": "The duration of the break in seconds. Required when the end date is set.\nWhen a time tracking is paused, it has at least one break with a start date and no duration or end date.",
"format": "int32",
"nullable": true,
"example": 3600
},
"endDate": {
"type": "string",
"description": "The end date and time of the break in UTC. Required when the duration is set and the break is finished.",
"format": "date-time",
"nullable": true,
"example": "2022-01-01T13:00:00Z"
}
},
"additionalProperties": false,
"description": "The break model. Shows when a time tracking was paused."
},
"ErrorResponse": {
"required": [
"code",
"description",
"link"
],
"type": "object",
"properties": {
"code": {
"minLength": 1,
"type": "string",
"description": "The error code.",
"example": "not-found"
},
"description": {
"minLength": 1,
"type": "string",
"description": "The description of the error.",
"example": "There is no matching path for this URL."
},
"link": {
"minLength": 1,
"type": "string",
"description": "The link to the API documentation page.",
"example": "https://developers.awork.com"
},
"details": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of details describing the error.",
"nullable": true,
"example": [
"No project with the id '123' exists."
]
},
"validationErrors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ValidationErrorResponse"
},
"description": "If a validation error occurred, this contains the validation errors for each property.",
"nullable": true
},
"traceId": {
"type": "string",
"description": "The request trace id for tracking the request.",
"nullable": true,
"example": "a65ce5745df02af216715ff06661fb3a"
}
},
"additionalProperties": false,
"description": "The API error response."
},
"NestedBaseTypeModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
},
"icon": {
"type": "string",
"description": "The icon of the type.",
"nullable": true,
"example": "thumb_up"
}
},
"additionalProperties": false
},
"NestedCompanyModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
},
"hasImage": {
"type": "boolean",
"description": "Whether the company has a profile image.",
"example": true
},
"description": {
"type": "string",
"description": "The description of the company.",
"nullable": true,
"example": "One of our customers"
}
},
"additionalProperties": false
},
"NestedModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
}
},
"additionalProperties": false
},
"NestedStatusModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
},
"description": {
"type": "string",
"description": "The description of the type.",
"nullable": true,
"example": "Work in progress"
},
"type": {
"type": "string",
"description": "The type of the status.",
"nullable": true,
"example": "todo"
},
"isArchived": {
"type": "boolean",
"description": "Whether the type is archived.",
"example": false
}
},
"additionalProperties": false
},
"NestedTaskStatusModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
},
"description": {
"type": "string",
"description": "The description of the type.",
"nullable": true,
"example": "Work in progress"
},
"type": {
"type": "string",
"description": "The type of the status.",
"nullable": true,
"example": "todo"
},
"order": {
"type": "number",
"description": "The order of the task status in a task.",
"format": "double",
"nullable": true,
"example": 1
},
"icon": {
"type": "string",
"description": "The icon of the task status in a task.",
"nullable": true,
"example": "arrow_forward"
}
},
"additionalProperties": false
},
"NestedTypeModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
},
"icon": {
"type": "string",
"description": "The icon of the type.",
"nullable": true,
"example": "thumb_up"
},
"isArchived": {
"type": "boolean",
"description": "Whether the type is archived.",
"example": false
}
},
"additionalProperties": false
},
"NestedUserModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"firstName": {
"type": "string",
"description": "The first name of the user.",
"nullable": true,
"example": "Carla"
},
"lastName": {
"type": "string",
"description": "The last name of the user.",
"nullable": true,
"example": "Creative"
},
"hasImage": {
"type": "boolean",
"description": "Whether this user has a profile image.",
"nullable": true
}
},
"additionalProperties": false
},
"ProjectModelForTimeTrackings": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
},
"projectStatus": {
"$ref": "#/components/schemas/NestedStatusModel"
},
"company": {
"$ref": "#/components/schemas/NestedCompanyModel"
},
"projectType": {
"$ref": "#/components/schemas/NestedTypeModel"
},
"projectKey": {
"type": "string",
"description": "The unique project key within the workspace (e.g., \"NIKE\").\nMaximum 32 characters, uppercase letters, numbers, and dashes only.",
"nullable": true
},
"isPrivate": {
"type": "boolean",
"description": "Whether the project is private.",
"example": false
},
"hasImage": {
"type": "boolean",
"description": "Whether the project has an image.",
"example": true
},
"isExternal": {
"type": "boolean",
"description": "Whether the project is external."
},
"isBillableByDefault": {
"type": "boolean",
"description": "Whether project times should be billable by default.",
"nullable": true
},
"createdBy": {
"type": "string",
"description": "The id of the user who created the project.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
}
},
"additionalProperties": false
},
"ProjectTagModelForTimeTrackings": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the tag.",
"nullable": true,
"example": "Design"
},
"color": {
"type": "string",
"description": "The color of the tag.",
"nullable": true,
"example": "purple"
}
},
"additionalProperties": false,
"description": "A tag model used for the timetrackings ProjectModelForTimeTrackings.\nDo not delete, we need to create copies of the tag model for each entity to avoid issues with Automapper."
},
"ProjectTeamModelForTimeTrackings": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The id of the entity.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
}
},
"additionalProperties": false
},
"SimplifiedCompanyModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"hasImage": {
"type": "boolean"
}
},
"additionalProperties": false
},
"SimplifiedProjectModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
},
"hasImage": {
"type": "boolean"
},
"company": {
"$ref": "#/components/schemas/SimplifiedCompanyModel"
}
},
"additionalProperties": false
},
"SimplifiedTaskModel": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"nullable": true
},
"baseType": {
"type": "string",
"nullable": true
},
"createdBy": {
"type": "string",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"entityId": {
"type": "string",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"projectId": {
"type": "string",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"correlationId": {
"type": "string",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"parentId": {
"type": "string",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"taskStatusId": {
"type": "string",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"taskStatus": {
"$ref": "#/components/schemas/NestedTaskStatusModel"
},
"primaryTaskListId": {
"type": "string",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"primaryTaskList": {
"$ref": "#/components/schemas/NestedModel"
}
},
"additionalProperties": false
},
"SimplifiedTimeEntry": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The id of the time entry.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"isBillable": {
"type": "boolean",
"description": "Whether the time entry is billable or not.",
"example": true
},
"isBilled": {
"type": "boolean",
"description": "Whether the time entry is billed or not.",
"example": false
},
"duration": {
"type": "integer",
"description": "The duration of the time entry in seconds. Not set if the time entry is still running.",
"format": "int32",
"nullable": true,
"example": 8635
},
"startDate": {
"type": "string",
"description": "The start date and time of the time entry. Required.\nIf the time entry is date only, the time should be 00:00:00.",
"format": "date-time"
},
"endDate": {
"type": "string",
"description": "The end date and time of the time entry. Not set if the time entry is still running.\nIf the time entry is date only, it should be the same as the start date.",
"format": "date-time",
"nullable": true
},
"task": {
"$ref": "#/components/schemas/SimplifiedTaskModel"
},
"taskId": {
"type": "string",
"description": "The id of the task.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"project": {
"$ref": "#/components/schemas/SimplifiedProjectModel"
},
"projectId": {
"type": "string",
"description": "The id of the project.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"user": {
"$ref": "#/components/schemas/NestedUserModel"
},
"userId": {
"type": "string",
"description": "The id of the user.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"typeOfWork": {
"$ref": "#/components/schemas/NestedBaseTypeModel"
},
"typeOfWorkId": {
"type": "string",
"description": "The id of the type of work.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"createdBy": {
"type": "string",
"description": "The id of the user who created this time entry.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"createdOn": {
"type": "string",
"description": "The date of the creation of this time entry.",
"format": "date-time"
}
},
"additionalProperties": false,
"description": "The simplified time entry model."
},
"StartTimeTrackingForm": {
"required": [
"timezone",
"typeOfWorkId"
],
"type": "object",
"properties": {
"isBillable": {
"type": "boolean",
"description": "Whether the time tracking is billable or not.",
"example": true
},
"isBilled": {
"type": "boolean",
"description": "Whether the time tracking is billed or not.",
"example": false
},
"taskId": {
"type": "string",
"description": "The id of the task.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"projectId": {
"type": "string",
"description": "The id of the project.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"note": {
"type": "string",
"description": "The note of the time tracking.",
"nullable": true,
"example": "I created a first draft for the new sitemap"
},
"typeOfWorkId": {
"type": "string",
"description": "The id of the type of work of the time tracking.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"timezone": {
"minLength": 1,
"type": "string",
"description": "The original timezone of the time tracking.\nThe format of the timezone is the IANA standard.",
"example": "Europe/London"
}
},
"additionalProperties": false
},
"StopTimeTrackingForm": {
"type": "object",
"additionalProperties": false,
"description": "Form for stopping a time tracking."
},
"TaskModelForTimeTrackings": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the entity.",
"nullable": true,
"example": "Design"
},
"baseType": {
"type": "string",
"description": "The base type of the task.\nCan be 'private' for a private task or\n'projecttask' for a project task.",
"nullable": true,
"example": "projecttask"
},
"taskIdentifier": {
"type": "string",
"description": "The full task identifier combining project key and task number (e.g., \"NIKE-42\").\nMaintained by the service layer, updated when project key changes.",
"nullable": true
},
"taskStatusId": {
"type": "string",
"description": "The id of the status for this task.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"typeOfWorkId": {
"type": "string",
"description": "The id of the type of work of this task.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"project": {
"$ref": "#/components/schemas/ProjectModelForTimeTrackings"
},
"projectId": {
"type": "string",
"description": "The id of the project this task is assigned to.\nOnly set if this is a project task.\nIn this case, it is equal to the EntityId.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"plannedDuration": {
"type": "integer",
"description": "The expected planned workload of the task, in seconds.",
"format": "int32",
"nullable": true,
"example": 21600
},
"closedOn": {
"type": "string",
"description": "The date the task was set to closed.",
"format": "date-time",
"nullable": true
},
"taskStatus": {
"$ref": "#/components/schemas/NestedTaskStatusModel"
},
"createdBy": {
"type": "string",
"description": "The id of the user who created this task.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"correlationId": {
"type": "string",
"description": "The correlation id between parent and subtasks, meaning it's either the ParentId or its own Id.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"parentId": {
"type": "string",
"description": "The id of the parent task this of this subtask.\nOnly set if this is a subtask.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"parentTask": {
"$ref": "#/components/schemas/NestedModel"
}
},
"additionalProperties": false
},
"TaskOrderList": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The id of the task list.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"createdOn": {
"type": "string",
"description": "The date this task list was created.",
"format": "date-time",
"example": "2021-03-22T15:00:00Z"
},
"createdBy": {
"type": "string",
"description": "The id of the user who created this task list.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"updatedOn": {
"type": "string",
"description": "The date this task list was last modified.",
"format": "date-time",
"example": "2021-03-22T16:30:00Z"
},
"updatedBy": {
"type": "string",
"description": "The id of the user who last modified this task list.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the list.",
"nullable": true,
"example": "Product and Marketing To-Dos"
},
"order": {
"type": "number",
"description": "The order of the list.",
"format": "double",
"nullable": true,
"example": 2
},
"plannedDuration": {
"type": "integer",
"description": "The planned duration for this task list, in seconds.",
"format": "int32",
"nullable": true
},
"totalPlannedDuration": {
"type": "integer",
"description": "The total planned duration for this task list, including all primary tasks (parent tasks which have this tacklist as PrimaryTaskListId), in seconds.\nCalculated: sum PlannedDuration of primary tasks in list\nArchived task lists are not included in the calculation.",
"format": "int64",
"nullable": true
},
"totalPlannedDurationWithHierarchy": {
"type": "integer",
"description": "The total planned duration for this task list, including all primary tasks (parent tasks which have this task list as PrimaryTaskListId), in seconds.\nCalculated: max(PlannedDuration, sum TotalPlannedDurationWithHierarchy of primary tasks in list)\nArchived task lists are not included in the calculation.",
"format": "int64",
"nullable": true
},
"isArchived": {
"type": "boolean",
"description": "Whether the task list has been archived.",
"example": false
},
"isHiddenForConnectUsers": {
"type": "boolean",
"description": "True if the task in this list will be not visible for external workspace users. \nFalse otherwise."
},
"orderOfTask": {
"type": "number",
"description": "The order of the task in the list.",
"format": "double",
"nullable": true,
"example": 5
}
},
"additionalProperties": false
},
"TaskTagModelForTimeTrackings": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the tag.",
"nullable": true,
"example": "Design"
},
"color": {
"type": "string",
"description": "The color of the tag.",
"nullable": true,
"example": "purple"
}
},
"additionalProperties": false,
"description": "A tag model used for the timetrackings TaskModelForTimeTrackings.\nDo not delete, we need to create copies of the tag model for each entity to avoid issues with Automapper."
},
"TimeEntry": {
"required": [
"timezone",
"typeOfWorkId"
],
"type": "object",
"properties": {
"isBillable": {
"type": "boolean",
"description": "Whether the time tracking is billable or not.",
"example": true
},
"isBilled": {
"type": "boolean",
"description": "Whether the time tracking is billed or not.",
"example": false
},
"taskId": {
"type": "string",
"description": "The id of the task.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"projectId": {
"type": "string",
"description": "The id of the project.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"note": {
"type": "string",
"description": "The note of the time tracking.",
"nullable": true,
"example": "I created a first draft for the new sitemap"
},
"isDateOnly": {
"type": "boolean",
"description": "Whether the time entry is a date only entry."
},
"startDate": {
"type": "string",
"description": "The date and time when the time entry was started in UTC. Required.",
"format": "date-time"
},
"endDate": {
"type": "string",
"description": "The date and time when the time entry ends in UTC. Not set if the time entry is still running.",
"format": "date-time",
"nullable": true
},
"timezone": {
"minLength": 1,
"type": "string",
"description": "The original timezone of the time tracking.\nThe format of the timezone is the IANA standard.",
"example": "Europe/Berlin"
},
"duration": {
"type": "integer",
"description": "The duration of the time tracking in seconds.\nRequired when the time entry is not running.",
"format": "int32",
"nullable": true,
"example": 8635
},
"typeOfWorkId": {
"type": "string",
"description": "The id of the type of work.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"userId": {
"type": "string",
"description": "The id of the user.\nCan be null if the user was deleted.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"id": {
"type": "string",
"description": "The id of the time tracking.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"breakDuration": {
"type": "integer",
"description": "The duration of the break in seconds.\nCannot be set via API.",
"format": "int32",
"nullable": true
},
"createdBy": {
"type": "string",
"description": "The id of the user who created this time tracking.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"createdOn": {
"type": "string",
"description": "The date this time tracking was created.",
"format": "date-time"
},
"updatedBy": {
"type": "string",
"description": "The id of the user who last updated this time tracking.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"updatedOn": {
"type": "string",
"description": "The date this time tracking was last modified.",
"format": "date-time"
},
"typeOfWork": {
"$ref": "#/components/schemas/NestedTypeModel"
},
"user": {
"$ref": "#/components/schemas/UserModelForTimeTrackings"
},
"task": {
"$ref": "#/components/schemas/TaskModelForTimeTrackings"
},
"project": {
"$ref": "#/components/schemas/ProjectModelForTimeTrackings"
},
"breaks": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Break"
},
"description": "The breaks of the time tracking.",
"nullable": true
},
"resourceVersion": {
"type": "integer",
"description": "The version of the entity, updated on every modification, to the ticks in UTC.\nNot identical to UpdatedOn.",
"format": "int64",
"readOnly": true,
"example": 637825154598057900
},
"isExternal": {
"type": "boolean",
"description": "True if this entity is coming from an external workspace (awork Connect).",
"example": true
}
},
"additionalProperties": false
},
"TimeEntryForm": {
"required": [
"timezone",
"typeOfWorkId"
],
"type": "object",
"properties": {
"isBillable": {
"type": "boolean",
"description": "Whether the time tracking is billable or not.",
"example": true
},
"isBilled": {
"type": "boolean",
"description": "Whether the time tracking is billed or not.",
"example": false
},
"taskId": {
"type": "string",
"description": "The id of the task.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"projectId": {
"type": "string",
"description": "The id of the project.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"note": {
"type": "string",
"description": "The note of the time tracking.",
"nullable": true,
"example": "I created a first draft for the new sitemap"
},
"isDateOnly": {
"type": "boolean",
"description": "Whether the time entry is a date only entry."
},
"startDate": {
"type": "string",
"description": "The date and time when the time entry was started in UTC. Required.",
"format": "date-time"
},
"endDate": {
"type": "string",
"description": "The date and time when the time entry ends in UTC. Not set if the time entry is still running.",
"format": "date-time",
"nullable": true
},
"timezone": {
"minLength": 1,
"type": "string",
"description": "The original timezone of the time tracking.\nThe format of the timezone is the IANA standard.",
"example": "Europe/Berlin"
},
"duration": {
"type": "integer",
"description": "The duration of the time tracking in seconds.\nRequired when the time entry is not running.",
"format": "int32",
"nullable": true,
"example": 8635
},
"typeOfWorkId": {
"type": "string",
"description": "The id of the type of work.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"userId": {
"type": "string",
"description": "The id of the user.\nCan be null if the user was deleted.",
"format": "uuid",
"nullable": true,
"example": "123e4567-e89b-12d3-a456-426614174000"
}
},
"additionalProperties": false
},
"UserModelForTimeTrackings": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Gets or sets the id of the nested model.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"firstName": {
"type": "string",
"description": "The first name of the user.",
"nullable": true,
"example": "Carla"
},
"lastName": {
"type": "string",
"description": "The last name of the user.",
"nullable": true,
"example": "Creative"
},
"hasImage": {
"type": "boolean",
"description": "Whether this user has a profile image.",
"nullable": true
},
"isExternal": {
"type": "boolean",
"description": "Whether the user is external."
}
},
"additionalProperties": false
},
"UserTagModelForTimeTrackings": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"name": {
"type": "string",
"description": "The name of the tag.",
"nullable": true,
"example": "Design"
},
"color": {
"type": "string",
"description": "The color of the tag.",
"nullable": true,
"example": "purple"
}
},
"additionalProperties": false,
"description": "A tag model used for the timetrackings UserModelForTimeTrackings.\nDo not delete, we need to create copies of the tag model for each entity to avoid issues with Automapper."
},
"UserTeamModelForTimeTrackings": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The id of the entity.",
"format": "uuid",
"example": "123e4567-e89b-12d3-a456-426614174000"
}
},
"additionalProperties": false
},
"ValidationErrorResponse": {
"type": "object",
"properties": {
"property": {
"type": "string",
"description": "The name of the property that failed validation.",
"nullable": true,
"example": "FirstName"
},
"message": {
"type": "string",
"description": "The reason why this property failed validation.",
"nullable": true,
"example": "FirstName is required."
}
},
"additionalProperties": false,
"description": "The validation error response."
}
},
"parameters": {
"page": {
"name": "page",
"in": "query",
"description": "Page number for pagination",
"required": false,
"schema": {
"type": "integer",
"default": 1
}
},
"pageSize": {
"name": "pageSize",
"in": "query",
"description": "Number of items per page",
"required": false,
"schema": {
"type": "integer",
"default": 10
}
},
"orderby": {
"name": "orderby",
"in": "query",
"description": "The properties to order by",
"required": false,
"schema": {
"type": "string"
}
},
"filterby": {
"name": "filterby",
"in": "query",
"description": "The filter expression to filter by",
"required": false,
"schema": {
"type": "string"
}
}
},
"securitySchemes": {
"bearer": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT"
},
"oauth2": {
"type": "oauth2",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://api.awork.com/accounts/authorize",
"tokenUrl": "https://api.awork.com/accounts/token",
"scopes": {
"full_access": "Grants full access",
"offline_access": "Grants continued access with a refresh token"
}
}
}
}
}
},
"security": [
{
"bearer": []
},
{
"oauth2": [
"full_access",
"offline_access"
]
}
],
"tags": [
{
"name": "TimeEntries",
"description": "There are some endpoints which have a V2 version. For those the V1 endpoints will be deprecated in the future.\n Please use the V2 endpoints instead.\n The endpoints can be used for general operations on existing time entries.\n A time entry can be linked to a task and / or project, although it can also be created for the user themselves without any entity link.\n If the time entry is linked to a project it is also indirectly linked to the company of that project.\n Similarly, the time entry is automatically linked to the project of the the task."
},
{
"name": "TimeTracking",
"description": "The v1 versions of these endpoints will be deprecated at some point. Please migrate to the V2 versions.\n These endpoints can be used to start, stop, pause or resume a time tracking as well as to get the last time tracking of a user."
}
]
}