> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://developers.awork.com/apiv1/absences/post-absence/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.awork.com/_mcp/server. # Creates an absence. POST https://api.awork.com/api/v1/absences Content-Type: application/json Creates an absence with dates rounded to 00:00:00, 12:00:00, or 23:59:59 UTC to support full-day and half-day periods. The end date must be the same as or later than the start date, and overlapping absences are rejected unless the provider allows them.The user must own the absence, be an admin, or have `user-planning-data:write` permission. Reference: https://developers.awork.com/apiv1/absences/post-absence ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Request ### Body (application/json) This endpoint expects an AbsenceForm. - `userId` (string, required) — The id of the user to create the absence for. - `startOn` (string, optional) — The start time of the absence. The time of the date will be ignored. - `endOn` (string, optional) — The end time of the absence. The time of the date will be ignored. - `description` (string, optional, nullable) — The reason for the absence. - `externalProvider` (string, optional, nullable) — The external provider for the absence. If this value is set, the absence is treated as externally managed and therefore read-only in awork. This means users in awork can no longer edit or delete the absence. - `isHalfDayOnStart` (boolean, optional) — If it's true and it's a single day absence means that the absence to create is for the first half of the workday. If it's a multi day absence it started on the second half of the first day of the absence period. - `isHalfDayOnEnd` (boolean, optional) — If it's true and it's a single day absence means that the absence to create is for the second half of the workday. If it's a multi day absence it ended on the first half of the last day of the absence period. - `isSingleDayAbsence` (boolean, optional) ## Response ### 200 OK - `id` (string, optional) — The id of the entity. - `createdOn` (string, optional) — The date this entity was created. - `createdBy` (string, optional) — The id of the user who created this entity. - `updatedOn` (string, optional) — The date this entity was last modified. - `updatedBy` (string, optional) — The id of the user who last modified this entity. - `userId` (string, optional, nullable) — The id of the user to create the absence for. - `startOn` (string, optional) — The start time of the absence. - `endOn` (string, optional) — The end time of the absence. - `description` (string, optional, nullable) — The reason for the absence. - `externalProvider` (string, optional, nullable) — The external provider for the absence. If this value is set, the absence is treated as externally managed and therefore read-only in awork. This means users in awork can no longer edit or delete the absence. - `deletedOn` (string, optional, nullable) — The date the absence was deleted. - `deletedBy` (string, optional, nullable) — The id of the user that deleted the absence. - `isReadOnly` (boolean, optional) — If it's true it means that this Absence is read-only and cannot be edited/deleted by the user. - `isHalfDayOnStart` (boolean, optional) — If it's true and it's a single day absence means that the absence is for the first half of the workday. If it's a multi day absence it started on the second half of the first day of the absence period. - `isHalfDayOnEnd` (boolean, optional) — If it's true and it's a single day absence means that the absence is for the second half of the workday. If it's a multi day absence it ended on the first half of the last day of the absence period. ## Errors ### 400 Bad Request Error Bad Request - `code` (string, required) — The error code. - `description` (string, required) — The description of the error. - `link` (string, required) — The link to the API documentation page. - `details` (list of string, optional, nullable) — A list of details describing the error. - `validationErrors` (list of ValidationErrorResponse, optional, nullable) — If a validation error occurred, this contains the validation errors for each property. - `traceId` (string, optional, nullable) — The request trace id for tracking the request. ### 401 Unauthorized Error Unauthorized - `code` (string, required) — The error code. - `description` (string, required) — The description of the error. - `link` (string, required) — The link to the API documentation page. - `details` (list of string, optional, nullable) — A list of details describing the error. - `validationErrors` (list of ValidationErrorResponse, optional, nullable) — If a validation error occurred, this contains the validation errors for each property. - `traceId` (string, optional, nullable) — The request trace id for tracking the request. ## Types ### ValidationErrorResponse The validation error response. - `property` (string, optional, nullable) — The name of the property that failed validation. - `message` (string, optional, nullable) — The reason why this property failed validation. ## Examples **Request** ```json { "userId": "123e4567-e89b-12d3-a456-426614174000" } ``` **Response** ```json { "id": "123e4567-e89b-12d3-a456-426614174000", "createdOn": "2022-03-11T15:33:47.100Z", "createdBy": "123e4567-e89b-12d3-a456-426614174000", "updatedOn": "2022-03-11T21:15:00.100Z", "updatedBy": "123e4567-e89b-12d3-a456-426614174000", "userId": "123e4567-e89b-12d3-a456-426614174000", "startOn": "2022-03-01T00:00:00Z", "endOn": "2022-03-03T00:00:00Z", "description": "Workation by the beach", "externalProvider": "string", "deletedOn": "2024-01-15T09:30:00Z", "deletedBy": "123e4567-e89b-12d3-a456-426614174000", "isReadOnly": true, "isHalfDayOnStart": true, "isHalfDayOnEnd": true } ``` **SDK Code** ```python import requests url = "https://api.awork.com/api/v1/absences" payload = { "userId": "123e4567-e89b-12d3-a456-426614174000" } headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript const url = 'https://api.awork.com/api/v1/absences'; const options = { method: 'POST', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{"userId":"123e4567-e89b-12d3-a456-426614174000"}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://api.awork.com/api/v1/absences" payload := strings.NewReader("{\n \"userId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "Bearer ") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://api.awork.com/api/v1/absences") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{\n \"userId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}" response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://api.awork.com/api/v1/absences") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{\n \"userId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}") .asString(); ``` ```php request('POST', 'https://api.awork.com/api/v1/absences', [ 'body' => '{ "userId": "123e4567-e89b-12d3-a456-426614174000" }', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://api.awork.com/api/v1/absences"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"userId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = ["userId": "123e4567-e89b-12d3-a456-426614174000"] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://api.awork.com/api/v1/absences")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```