curl --request POST \
--url https://api.absentify.com/api/v1/exports \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"start": "<string>",
"end": "<string>",
"department_id": "<string>"
}
'import requests
url = "https://api.absentify.com/api/v1/exports"
payload = {
"start": "<string>",
"end": "<string>",
"department_id": "<string>"
}
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({start: '<string>', end: '<string>', department_id: '<string>'})
};
fetch('https://api.absentify.com/api/v1/exports', 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/exports",
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([
'start' => '<string>',
'end' => '<string>',
'department_id' => '<string>'
]),
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/exports"
payload := strings.NewReader("{\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"department_id\": \"<string>\"\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/exports")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"department_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.absentify.com/api/v1/exports")
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 \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"department_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"status": "processing"
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"message": "<string>",
"code": "<string>"
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Start an export
Starts the same export as a custom date range in Settings > Export and answers 202 Accepted. A period without absences still produces a file. Request the URL in the Location header until it stops answering 202; it then returns the file. Send the key as X-API-KEY or as Authorization: Bearer <key>. In a Power Automate HTTP action set Authentication to Raw with Bearer <key>, because it applies to the polling requests too. A key in the query string is not part of the Location URL. Requires an admin and an eligible plan. At most 5 API exports can run per workspace; more answer 429.
curl --request POST \
--url https://api.absentify.com/api/v1/exports \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"start": "<string>",
"end": "<string>",
"department_id": "<string>"
}
'import requests
url = "https://api.absentify.com/api/v1/exports"
payload = {
"start": "<string>",
"end": "<string>",
"department_id": "<string>"
}
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({start: '<string>', end: '<string>', department_id: '<string>'})
};
fetch('https://api.absentify.com/api/v1/exports', 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/exports",
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([
'start' => '<string>',
'end' => '<string>',
'department_id' => '<string>'
]),
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/exports"
payload := strings.NewReader("{\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"department_id\": \"<string>\"\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/exports")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"department_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.absentify.com/api/v1/exports")
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 \"start\": \"<string>\",\n \"end\": \"<string>\",\n \"department_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"status": "processing"
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"message": "<string>",
"code": "<string>"
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Autorisierungen
Body
EXCEL is the absence workbook. PAYROLL_EXCEL and PAYROLL_CSV are the payroll files. LEAVE_BALANCE_EXCEL is the leave balances workbook.
EXCEL, PAYROLL_EXCEL, PAYROLL_CSV, LEAVE_BALANCE_EXCEL Date/time in ISO 8601 format, e.g. 2026-06-01 (interpreted as UTC midnight) or 2026-06-01T09:00:00Z. Always include a time zone designator (Z for UTC) when sending a time of day. Localized formats such as 01.06.2026 or 06/01/2026 are misinterpreted and must not be used. First day of the export. Only the UTC date is used. The range may span at most 1826 days (5 years).
Date/time in ISO 8601 format, e.g. 2026-06-01 (interpreted as UTC midnight) or 2026-06-01T09:00:00Z. Always include a time zone designator (Z for UTC) when sending a time of day. Localized formats such as 01.06.2026 or 06/01/2026 are misinterpreted and must not be used. Last day of the export, inclusive. Only the UTC date is used.
Limit the export to one department. Omit for all departments.
1Only used by PAYROLL_CSV.
comma, semicolon War diese Seite hilfreich?