curl --request POST \
--url https://api.absentify.com/api/v1/requests/recurring/preview \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"leave_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requester_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"interval": 50,
"from": "<string>",
"until": "<string>",
"count": 183,
"weekDays": "<string>",
"day": 16,
"month": 6,
"pos": 2,
"reason": "<string>",
"exDates": [
"<string>"
],
"files": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"representative_member_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"ignoreMaximumAbsence": true
}
'import requests
url = "https://api.absentify.com/api/v1/requests/recurring/preview"
payload = {
"leave_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requester_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"interval": 50,
"from": "<string>",
"until": "<string>",
"count": 183,
"weekDays": "<string>",
"day": 16,
"month": 6,
"pos": 2,
"reason": "<string>",
"exDates": ["<string>"],
"files": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"representative_member_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"ignoreMaximumAbsence": True
}
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({
leave_type_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
requester_member_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
interval: 50,
from: '<string>',
until: '<string>',
count: 183,
weekDays: '<string>',
day: 16,
month: 6,
pos: 2,
reason: '<string>',
exDates: ['<string>'],
files: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
representative_member_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
ignoreMaximumAbsence: true
})
};
fetch('https://api.absentify.com/api/v1/requests/recurring/preview', 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/recurring/preview",
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([
'leave_type_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'requester_member_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'interval' => 50,
'from' => '<string>',
'until' => '<string>',
'count' => 183,
'weekDays' => '<string>',
'day' => 16,
'month' => 6,
'pos' => 2,
'reason' => '<string>',
'exDates' => [
'<string>'
],
'files' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'representative_member_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'ignoreMaximumAbsence' => true
]),
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/recurring/preview"
payload := strings.NewReader("{\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requester_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"interval\": 50,\n \"from\": \"<string>\",\n \"until\": \"<string>\",\n \"count\": 183,\n \"weekDays\": \"<string>\",\n \"day\": 16,\n \"month\": 6,\n \"pos\": 2,\n \"reason\": \"<string>\",\n \"exDates\": [\n \"<string>\"\n ],\n \"files\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"representative_member_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"ignoreMaximumAbsence\": true\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/recurring/preview")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requester_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"interval\": 50,\n \"from\": \"<string>\",\n \"until\": \"<string>\",\n \"count\": 183,\n \"weekDays\": \"<string>\",\n \"day\": 16,\n \"month\": 6,\n \"pos\": 2,\n \"reason\": \"<string>\",\n \"exDates\": [\n \"<string>\"\n ],\n \"files\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"representative_member_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"ignoreMaximumAbsence\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.absentify.com/api/v1/requests/recurring/preview")
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 \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requester_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"interval\": 50,\n \"from\": \"<string>\",\n \"until\": \"<string>\",\n \"count\": 183,\n \"weekDays\": \"<string>\",\n \"day\": 16,\n \"month\": 6,\n \"pos\": 2,\n \"reason\": \"<string>\",\n \"exDates\": [\n \"<string>\"\n ],\n \"files\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"representative_member_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"ignoreMaximumAbsence\": true\n}"
response = http.request(request)
puts response.read_body{
"can_create": true,
"occurrence_count": 0,
"duration": {
"workday_absence_duration": 123,
"leave_unit": "days",
"outside_of_schedule": true,
"per_year": [
{
"fiscal_year": 0,
"workday_duration_in_days": 123,
"workday_duration_in_minutes": 123,
"carry_over_days_used_in_period": 123,
"carry_over_minutes_used_in_period": 123
}
]
},
"takes_from_allowance": true,
"allowance_type": {
"id": "<string>",
"name": "<string>",
"allowance_unit": "days"
},
"is_allowance_sufficient": true,
"conflicts": [
{
"date": "<string>",
"conflicts_with": [
{
"request_id": "<string>",
"start": "<string>",
"end": "<string>",
"status": "<string>",
"leave_type_name": "<string>"
}
]
}
],
"department_limit_conflicts": [
{
"date": "<string>",
"department_id": "<string>",
"department_name": "<string>",
"current_absent": 0,
"max_allowed": 0
}
],
"representative_unavailable": [
{
"date": "<string>",
"representatives": [
{
"member_id": "<string>",
"member_name": "<string>",
"reason": "<string>"
}
]
}
],
"representative_overlaps": [
{
"date": "<string>",
"representing_for": [
{
"member_id": "<string>",
"member_name": "<string>",
"request_id": "<string>",
"status": "<string>",
"start": "<string>",
"end": "<string>"
}
]
}
],
"rejection": {
"code": "RECURRENCE_WINDOW_EXCEEDED",
"message": "<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": []
}Preview recurring requests (dry run)
Answer what POST /requests/recurring would do with this payload without creating anything: the number of occurrences, the summed workday duration and its split by fiscal year, whether the member’s allowance covers the whole series, and the per-occurrence conflicts.
Input: identical to POST /requests/recurring. files is accepted and ignored. reason, admin_approval_option, ignoreMaximumAbsence and representative_member_ids are validated exactly as on create.
Duration: duration.workday_absence_duration follows the same days-vs-minutes rule as workday_absence_duration on GET /requests and is the sum over all occurrences; preview and created series always agree. per_year splits that sum by fiscal year.
Allowance: is_allowance_sufficient is one verdict for the whole series, matching the all-or-nothing behaviour of POST /requests/recurring: false means creating the series fails with the allowance error and leaves nothing behind. Leave types that do not deduct return true.
Conflicts: conflicts lists occurrences overlapping the member’s existing requests, department_limit_conflicts the occurrences on which a department’s maximum absent limit is already reached, representative_overlaps the occurrences on which the member is someone else’s representative (pending or accepted), and representative_unavailable the occurrences on which a passed representative is absent.
Rejection: when the payload would be rejected with 400 by POST /requests/recurring, the response is still 200 with rejection set and can_create: false. Match on rejection.code: neither until nor count given (RECURRENCE_END_REQUIRED), day/month/pos/weekDays not matching repeat (RECURRENCE_RULE_INVALID), a series reaching more than 365 days into the future (RECURRENCE_WINDOW_EXCEEDED), fewer than two occurrences (RECURRENCE_TOO_FEW_OCCURRENCES), an hour-based leave type without a valid start_time/end_time (HOUR_LEAVE_TYPE_REQUIRES_TIME_RANGE), a half_day on a full-day-only leave type (HALF_DAY_NOT_ALLOWED_FOR_FULL_DAY_LEAVE_TYPE), or an occurrence outside the member’s employment period (OUTSIDE_EMPLOYMENT_PERIOD). After that the rules the create endpoint applies to every occurrence follow, in its order: a leave type disabled for the member (LEAVE_TYPE_DISABLED), a missing or too long reason (REASON_REQUIRED, REASON_TOO_LONG), an occurrence outside the bookable fiscal-year window (OUTSIDE_FISCAL_YEAR_WINDOW) or too far in the past for the caller’s role (PAST_DATE_NOT_ALLOWED), an occurrence on which a non-admin is someone else’s accepted representative (REPRESENTATIVE_CONFLICT), a leave type needing approval while the member has no approver (NO_APPROVER_SET), and the representative requirement (REPRESENTATIVES_INVALID, REQUIRED_REPRESENTATIVES_COUNT_NOT_MET). A workspace without the Essentials plan, or a non-admin passing admin_approval_option: approve_request_immediately, gets the same 403 as the create endpoint.
Verdict: can_create is true only when rejection is null, conflicts is empty, department_limit_conflicts is empty (or the caller is an admin passing ignoreMaximumAbsence) and the allowance covers the series. representative_unavailable is informational.
Side effects: no request, approver, notification, webhook or calendar sync entry is created. Safe to repeat; each call evaluates the data as it is at that moment.
curl --request POST \
--url https://api.absentify.com/api/v1/requests/recurring/preview \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"leave_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requester_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"interval": 50,
"from": "<string>",
"until": "<string>",
"count": 183,
"weekDays": "<string>",
"day": 16,
"month": 6,
"pos": 2,
"reason": "<string>",
"exDates": [
"<string>"
],
"files": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"representative_member_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"ignoreMaximumAbsence": true
}
'import requests
url = "https://api.absentify.com/api/v1/requests/recurring/preview"
payload = {
"leave_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requester_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"interval": 50,
"from": "<string>",
"until": "<string>",
"count": 183,
"weekDays": "<string>",
"day": 16,
"month": 6,
"pos": 2,
"reason": "<string>",
"exDates": ["<string>"],
"files": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"representative_member_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"ignoreMaximumAbsence": True
}
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({
leave_type_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
requester_member_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
interval: 50,
from: '<string>',
until: '<string>',
count: 183,
weekDays: '<string>',
day: 16,
month: 6,
pos: 2,
reason: '<string>',
exDates: ['<string>'],
files: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
representative_member_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
ignoreMaximumAbsence: true
})
};
fetch('https://api.absentify.com/api/v1/requests/recurring/preview', 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/recurring/preview",
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([
'leave_type_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'requester_member_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'interval' => 50,
'from' => '<string>',
'until' => '<string>',
'count' => 183,
'weekDays' => '<string>',
'day' => 16,
'month' => 6,
'pos' => 2,
'reason' => '<string>',
'exDates' => [
'<string>'
],
'files' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'representative_member_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'ignoreMaximumAbsence' => true
]),
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/recurring/preview"
payload := strings.NewReader("{\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requester_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"interval\": 50,\n \"from\": \"<string>\",\n \"until\": \"<string>\",\n \"count\": 183,\n \"weekDays\": \"<string>\",\n \"day\": 16,\n \"month\": 6,\n \"pos\": 2,\n \"reason\": \"<string>\",\n \"exDates\": [\n \"<string>\"\n ],\n \"files\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"representative_member_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"ignoreMaximumAbsence\": true\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/recurring/preview")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requester_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"interval\": 50,\n \"from\": \"<string>\",\n \"until\": \"<string>\",\n \"count\": 183,\n \"weekDays\": \"<string>\",\n \"day\": 16,\n \"month\": 6,\n \"pos\": 2,\n \"reason\": \"<string>\",\n \"exDates\": [\n \"<string>\"\n ],\n \"files\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"representative_member_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"ignoreMaximumAbsence\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.absentify.com/api/v1/requests/recurring/preview")
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 \"leave_type_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"requester_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"interval\": 50,\n \"from\": \"<string>\",\n \"until\": \"<string>\",\n \"count\": 183,\n \"weekDays\": \"<string>\",\n \"day\": 16,\n \"month\": 6,\n \"pos\": 2,\n \"reason\": \"<string>\",\n \"exDates\": [\n \"<string>\"\n ],\n \"files\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"representative_member_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"ignoreMaximumAbsence\": true\n}"
response = http.request(request)
puts response.read_body{
"can_create": true,
"occurrence_count": 0,
"duration": {
"workday_absence_duration": 123,
"leave_unit": "days",
"outside_of_schedule": true,
"per_year": [
{
"fiscal_year": 0,
"workday_duration_in_days": 123,
"workday_duration_in_minutes": 123,
"carry_over_days_used_in_period": 123,
"carry_over_minutes_used_in_period": 123
}
]
},
"takes_from_allowance": true,
"allowance_type": {
"id": "<string>",
"name": "<string>",
"allowance_unit": "days"
},
"is_allowance_sufficient": true,
"conflicts": [
{
"date": "<string>",
"conflicts_with": [
{
"request_id": "<string>",
"start": "<string>",
"end": "<string>",
"status": "<string>",
"leave_type_name": "<string>"
}
]
}
],
"department_limit_conflicts": [
{
"date": "<string>",
"department_id": "<string>",
"department_name": "<string>",
"current_absent": 0,
"max_allowed": 0
}
],
"representative_unavailable": [
{
"date": "<string>",
"representatives": [
{
"member_id": "<string>",
"member_name": "<string>",
"reason": "<string>"
}
]
}
],
"representative_overlaps": [
{
"date": "<string>",
"representing_for": [
{
"member_id": "<string>",
"member_name": "<string>",
"request_id": "<string>",
"status": "<string>",
"start": "<string>",
"end": "<string>"
}
]
}
],
"rejection": {
"code": "RECURRENCE_WINDOW_EXCEEDED",
"message": "<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": []
}Authorizations
Body
^([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})$^([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})$daily, weekly, monthly 1 <= x <= 100Date/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.
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.
1 <= x <= 3651 <= x <= 311 <= x <= 12-1 <= x <= 5Show child attributes
Show child attributes
Show child attributes
Show child attributes
full_day, morning, afternoon 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.
^([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})$^([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})$approve_request_immediately, go_through_the_normal_approval_process Response
Successful response
The one-line verdict: true means POST with this payload passes every rule the create endpoint applies, as of the data at preview time; false means it fails. False whenever rejection is set, a blocking conflict is listed or is_allowance_sufficient is false. Two things the preview cannot see: requests created in between, and changes to the member's approvers that the create call makes when approver sync from Microsoft 365 is on. A snapshot, not a reservation. department_limit_conflicts block unless the caller is an admin passing ignoreMaximumAbsence; representative_unavailable never blocks.
-9007199254740991 <= x <= 9007199254740991Show child attributes
Show child attributes
The allowance the absence deducts from. Null when it deducts nothing.
Show child attributes
Show child attributes
Verdict for the whole series: true means the allowance covers it, false means creating it fails with the allowance error and leaves nothing behind. Always true for leave types that do not deduct. Null when rejection is set: the allowance was not evaluated. The conflict arrays are reported separately and do not affect this flag.
Occurrences that overlap an existing non-declined, non-cancelled request of the member.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Only populated when representative_member_ids are passed: occurrences on which a chosen representative is absent.
Show child attributes
Show child attributes
Occurrences on which the member is someone else's representative, pending or accepted. Only accepted ones reject the series for non-admins (REPRESENTATIVE_CONFLICT).
Show child attributes
Show child attributes
Set when creating the same series would be rejected with 400: the first failing rule, series rules first and then the per-occurrence rules, in the order the create endpoint applies them. Overlaps, the allowance and department limits are never a rejection; see the conflict arrays and is_allowance_sufficient. duration and is_allowance_sufficient are null when this is set. Match on code, not on message (which is translated into the API key member's language).
Show child attributes
Show child attributes
Was this page helpful?