curl --request POST \
--url https://api.absentify.com/api/v1/requests/{id}/changes \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"reason": "<string>",
"start": "<string>",
"end": "<string>",
"leave_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.absentify.com/api/v1/requests/{id}/changes"
payload = {
"reason": "<string>",
"start": "<string>",
"end": "<string>",
"leave_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
reason: '<string>',
start: '<string>',
end: '<string>',
leave_type_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.absentify.com/api/v1/requests/{id}/changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.absentify.com/api/v1/requests/{id}/changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => '<string>',
'start' => '<string>',
'end' => '<string>',
'leave_type_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.absentify.com/api/v1/requests/{id}/changes"
payload := strings.NewReader("{\n \"reason\": \"<string>\",\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.absentify.com/api/v1/requests/{id}/changes")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"<string>\",\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.absentify.com/api/v1/requests/{id}/changes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"<string>\",\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": 0,
"revision": 0,
"kind": "reason",
"status": "pending",
"previous": {
"start": "<string>",
"end": "<string>",
"start_at": "morning",
"end_at": "lunchtime",
"leave_type": {
"id": "<string>",
"name": "<string>"
},
"duration": 123,
"workday_absence_duration": 123,
"reason": "<string>"
},
"proposed": {
"start": "<string>",
"end": "<string>",
"start_at": "morning",
"end_at": "lunchtime",
"leave_type": {
"id": "<string>",
"name": "<string>"
},
"duration": 123,
"workday_absence_duration": 123,
"reason": "<string>"
},
"changed_by": {
"id": "<string>",
"name": "<string>"
},
"decided_by": {
"id": "<string>",
"name": "<string>"
},
"created_at": "<string>",
"decided_at": "<string>",
"decision_reason": "<string>"
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Change a request
Change the reason, the period or the leave type of a request on behalf of the user who created the API token.
Pending requests are changed in place: a new period or leave type restarts the approval, a reason change never does. Approved requests keep their approved version until a change is decided:
- A new period inside the old one (shortening, same leave type) is applied at once and the days go back to the allowance, unless the leave type turns on
request_shortening_needs_approval. - A longer or moved period, or a new leave type, creates a change request with status
pending. The approved request stays in force everywhere (calendar, allowance, syncs) until the approvers approve it. Declining leaves it untouched. One change can be open per request: a new period or leave type withdraws the open one. - A reason change is applied at once and never needs approval.
- Leave types without approval, and changes by admins or managers (
admin_approval_option: approve_request_immediately), apply at once. For a new leave type, the new one decides whether approval is needed.
The leave type must allow changes (allow_request_changes), and so must a new one; if one does not, the call is rejected with 403, like a request that has already started or that the caller may not change. A non-admin passing admin_approval_option: approve_request_immediately gets 403 too.
A new leave type must be day-based or hour-based like the request: days and half days can be swapped for each other, and so can hours and minute units. Switching between the two is rejected with 400; cancel the request and create a new one instead.
In a recurring series, the dates of a single approved occurrence can be changed, and only that occurrence changes. The dates of an occurrence that still waits for approval and the leave type of any occurrence can’t be changed (400).
Send start and end together to change the period, and leave_type_id to change the leave type. Send reason to change the reason, or null to clear it. The response is the recorded change: its status is applied when it is in force and pending when it waits for approval (also shown as pending_change on the request). Approvers decide it with the /requests/{id}/changes/{changeId}/approve and /decline endpoints; the requester can /withdraw it.
curl --request POST \
--url https://api.absentify.com/api/v1/requests/{id}/changes \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"reason": "<string>",
"start": "<string>",
"end": "<string>",
"leave_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.absentify.com/api/v1/requests/{id}/changes"
payload = {
"reason": "<string>",
"start": "<string>",
"end": "<string>",
"leave_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
reason: '<string>',
start: '<string>',
end: '<string>',
leave_type_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.absentify.com/api/v1/requests/{id}/changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.absentify.com/api/v1/requests/{id}/changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => '<string>',
'start' => '<string>',
'end' => '<string>',
'leave_type_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.absentify.com/api/v1/requests/{id}/changes"
payload := strings.NewReader("{\n \"reason\": \"<string>\",\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.absentify.com/api/v1/requests/{id}/changes")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"<string>\",\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.absentify.com/api/v1/requests/{id}/changes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"<string>\",\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": 0,
"revision": 0,
"kind": "reason",
"status": "pending",
"previous": {
"start": "<string>",
"end": "<string>",
"start_at": "morning",
"end_at": "lunchtime",
"leave_type": {
"id": "<string>",
"name": "<string>"
},
"duration": 123,
"workday_absence_duration": 123,
"reason": "<string>"
},
"proposed": {
"start": "<string>",
"end": "<string>",
"start_at": "morning",
"end_at": "lunchtime",
"leave_type": {
"id": "<string>",
"name": "<string>"
},
"duration": 123,
"workday_absence_duration": 123,
"reason": "<string>"
},
"changed_by": {
"id": "<string>",
"name": "<string>"
},
"decided_by": {
"id": "<string>",
"name": "<string>"
},
"created_at": "<string>",
"decided_at": "<string>",
"decision_reason": "<string>"
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Autorisierungen
Pfadparameter
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$Body
Start/end of the request in ISO 8601. For day-based leave types (leave_unit: days) send the date at midnight UTC (e.g. 2026-06-01T00:00:00Z) and use start_at / end_at to set half-days. For hour-based leave types include the exact time of day (e.g. 2026-06-01T09:00:00Z); start_at / end_at are then ignored.
Start/end of the request in ISO 8601. For day-based leave types (leave_unit: days) send the date at midnight UTC (e.g. 2026-06-01T00:00:00Z) and use start_at / end_at to set half-days. For hour-based leave types include the exact time of day (e.g. 2026-06-01T09:00:00Z); start_at / end_at are then ignored.
For day-based leave types: whether the absence starts in the morning (the whole first day counts) or afternoon (only the second half of the first day). Ignored for hour-based leave types.
morning, afternoon For day-based leave types: whether the absence ends at lunchtime (only the first half of the last day) or end_of_day (the whole last day counts). Ignored for hour-based leave types.
lunchtime, end_of_day The new leave type, which must allow changes and be day-based or hour-based like the request.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$Whether the change is applied at once (admins only) or goes through the normal approval process.
approve_request_immediately, go_through_the_normal_approval_process Antwort
Successful response
-9007199254740991 <= x <= 9007199254740991The revision the request gets when this change is applied. Null while the change is pending, declined or withdrawn.
-9007199254740991 <= x <= 9007199254740991reason, shortened, extended, moved, leave_type pending waits for approvers, applied is in force, declined and withdrawn never changed the request.
pending, approved, declined, withdrawn, applied The request as it was before this change.
Show child attributes
Show child attributes
The request as this change wants it. Only for applied changes is this what is in force.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
War diese Seite hilfreich?