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": []
}Pfadparameter
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.
Antwort
Successful response
War diese Seite hilfreich?