---
updatedAt: 2026-01-21T12:15:58.000Z
---

Fetch the complete documentation index at: https://apidocs.hibob.com/llms.txt. Use this file to discover all available pages before exploring further.

# Get time off requests changes

Returns an array of all changes made to time off requests within a specified date range. Each item in the array includes: the time off request details at the time of the change, and the type of change, such as `created` or `deleted`. Optionally, requests that were changed to status `pending` can also be included.  <br /><br /> **Notes:**  <p> <ul> <li>The results are filtered by **the date the change has occurred** (when the request was created or updated), not the start/end date of the time off request itself. </li>         <li>Each change reflects a snapshot of the time off request's status **at the time of the change**, and may not reflect the current status. </li> </ul></p> <p><strong>Durations and cost:</strong></p> <ul>
  <li>
    This endpoint returns daily durations only for requests that use day-by-day duration configurations, including:
    <code>DifferentDayDurations</code>, <code>specificHoursDayDurations</code>, <code>differentSpecificHoursDayDurations</code>.
  </li>
  <li>These durations do not include a daily cost breakdown.</li>
  <li>
    All requests return <code>totalCost</code>, which represents the amount deducted from the balance for the whole request.
  </li>
  <li>
    To retrieve the cost per day, use <strong><a href="https://apidocs.hibob.com/reference/get_timeoff-employees-id-requests-requestid">Get the details of an existing time off request.</a></strong> with
    <code>includeDailyDurations=true</code>.
  </li>
</ul> <p><strong>Permissions required</strong>: Please refer to the main <a href="https://apidocs.hibob.com/reference/time-off#required-permissions">Time off API Required Permissions</a> page.</p>

# OpenAPI definition

```json
{
  "openapi": "3.1.1",
  "info": {
    "title": "Time Off API",
    "description": "Use Public API to access Time off requests, policies, and balances in Bob",
    "license": {
      "name": "Proprietary",
      "url": "https://apidocs.hibob.com/docs/api-terms-of-use"
    },
    "contact": {
      "name": "Hi Bob, Inc."
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.hibob.com/v1",
      "description": "Production"
    },
    {
      "url": "https://api.sandbox.hibob.com/v1",
      "description": "Sandbox"
    }
  ],
  "x-readme": {
    "metrics-enabled": false
  },
  "tags": [
    {
      "name": "Time off requests",
      "description": "Operations for managing time off requests"
    },
    {
      "name": "Time off Webhooks",
      "description": "Webhook events for time off request-related operations"
    }
  ],
  "webhooks": {
    "timeoffRequestRequested": {
      "post": {
        "operationId": "post_webhook_timeoff-request-requested",
        "tags": [
          "Time off Webhooks"
        ],
        "summary": "Time off request requested",
        "description": "Triggered when submitting a time off request.\n\nUse the **getApi** URL in the payload to retrieve the full request details.\nWhen using the getApi URL immediately after this event, the status in the response will be **approved** if the request was auto-approved, or **pending** if it is awaiting approval.\n\nIn the right panel, open **Examples** and select **Payload Example** to see a real payload.\n",
        "parameters": [
          {
            "name": "bob-signature",
            "in": "header",
            "required": true,
            "description": "Base64-encoded signature sent with each webhook request. Use it to verify that the request came from Bob. To verify webhook authenticity, see <a href=\"https://apidocs.hibob.com/update/reference?isFramePreview=true#how-does-bob-calculate-the-signature\" target=\"_blank\">How does Bob calculate the signature</a>.",
            "schema": {
              "type": "string",
              "example": "EQScIBkAtTKFW0ictgt5zzOsqIc2+xGEsM88jOdLuW4CM/a3gLEfrKV+IC5IHx0xbirzLKPIfaZjCGwzuiyI8w=="
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeoffRequestRequestedEvent"
              },
              "example": {
                "companyId": 637323,
                "type": "timeoff.request.requested",
                "triggeredBy": "3419283646526259215",
                "triggeredAt": "2024-10-03T09:29:00.831502",
                "version": "v2",
                "data": {
                  "timeoffRequestId": 32832853,
                  "employeeId": "3373576791477190995",
                  "getApi": "https://api.hibob.com/v1/timeoff/employees/3373576791477190995/requests/32832853"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook received successfully"
          },
          "400": {
            "description": "Invalid webhook payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "timeoffRequestApproved": {
      "post": {
        "operationId": "post_webhook_timeoff-request-approved",
        "tags": [
          "Time off Webhooks"
        ],
        "summary": "Time off request approved",
        "description": "Triggered when approving a time off request.\n\nFor auto-approved requests, two events are sent in sequence: **requested** then **approved**.\n\nIn the right panel, open **Examples** and select **Payload Example** to see a real payload.\n",
        "parameters": [
          {
            "name": "bob-signature",
            "in": "header",
            "required": true,
            "description": "Base64-encoded signature sent with each webhook request. Use it to verify that the request came from Bob. To verify webhook authenticity, see <a href=\"https://apidocs.hibob.com/update/reference?isFramePreview=true#how-does-bob-calculate-the-signature\" target=\"_blank\">How does Bob calculate the signature</a>.",
            "schema": {
              "type": "string",
              "example": "EQScIBkAtTKFW0ictgt5zzOsqIc2+xGEsM88jOdLuW4CM/a3gLEfrKV+IC5IHx0xbirzLKPIfaZjCGwzuiyI8w=="
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeoffRequestApprovedEvent"
              },
              "example": {
                "companyId": 637323,
                "type": "timeoff.request.approved",
                "triggeredBy": "3419283646526259215",
                "triggeredAt": "2024-10-03T09:29:00.831502",
                "version": "v2",
                "data": {
                  "timeoffRequestId": 32832853,
                  "employeeId": "3373576791477190995",
                  "getApi": "https://api.hibob.com/v1/timeoff/employees/3373576791477190995/requests/32832853"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook received successfully"
          },
          "400": {
            "description": "Invalid webhook payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "timeoffRequestDeclined": {
      "post": {
        "operationId": "post_webhook_timeoff-request-declined",
        "tags": [
          "Time off Webhooks"
        ],
        "summary": "Time off request declined",
        "description": "Triggered when declining a time off request.\n\nWhen using the **getApi** URL to retrieve details of a declined request, the status in the response will be **disapproved** (not \"declined\").\n\nIn the right panel, open **Examples** and select **Payload Example** to see a real payload.\n",
        "parameters": [
          {
            "name": "bob-signature",
            "in": "header",
            "required": true,
            "description": "Base64-encoded signature sent with each webhook request. Use it to verify that the request came from Bob. To verify webhook authenticity, see <a href=\"https://apidocs.hibob.com/update/reference?isFramePreview=true#how-does-bob-calculate-the-signature\" target=\"_blank\">How does Bob calculate the signature</a>.",
            "schema": {
              "type": "string",
              "example": "EQScIBkAtTKFW0ictgt5zzOsqIc2+xGEsM88jOdLuW4CM/a3gLEfrKV+IC5IHx0xbirzLKPIfaZjCGwzuiyI8w=="
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeoffRequestDeclinedEvent"
              },
              "example": {
                "companyId": 637323,
                "type": "timeoff.request.declined",
                "triggeredBy": "3419283646526259215",
                "triggeredAt": "2024-10-03T09:29:00.831502",
                "version": "v2",
                "data": {
                  "timeoffRequestId": 32832969,
                  "employeeId": "3332883884017713938",
                  "getApi": "https://api.hibob.com/v1/timeoff/employees/3332883884017713938/requests/32832969"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook received successfully"
          },
          "400": {
            "description": "Invalid webhook payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "timeoffRequestCancelled": {
      "post": {
        "operationId": "post_webhook_timeoff-request-cancelled",
        "tags": [
          "Time off Webhooks"
        ],
        "summary": "Time off request cancelled",
        "description": "Triggered when cancelling a time off request.\n\nIn the right panel, open **Examples** and select **Payload Example** to see a real payload.\n",
        "parameters": [
          {
            "name": "bob-signature",
            "in": "header",
            "required": true,
            "description": "Base64-encoded signature sent with each webhook request. Use it to verify that the request came from Bob. To verify webhook authenticity, see <a href=\"https://apidocs.hibob.com/update/reference?isFramePreview=true#how-does-bob-calculate-the-signature\" target=\"_blank\">How does Bob calculate the signature</a>.",
            "schema": {
              "type": "string",
              "example": "EQScIBkAtTKFW0ictgt5zzOsqIc2+xGEsM88jOdLuW4CM/a3gLEfrKV+IC5IHx0xbirzLKPIfaZjCGwzuiyI8w=="
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeoffRequestCancelledEvent"
              },
              "example": {
                "companyId": 636192,
                "type": "timeoff.request.cancelled",
                "triggeredBy": "3332883804594373380",
                "triggeredAt": "2025-01-02T11:08:26.022782",
                "version": "v2",
                "data": {
                  "timeoffRequestId": 32809865,
                  "employeeId": "3332883804594373380",
                  "getApi": "https://api.hibob.com/v1/timeoff/employees/3332883804594373380/requests/32809865",
                  "originalRequestId": null
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook received successfully"
          },
          "400": {
            "description": "Invalid webhook payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "timeoffRequestDeleted": {
      "post": {
        "operationId": "post_webhook_timeoff-request-deleted",
        "tags": [
          "Time off Webhooks"
        ],
        "summary": "Time off request deleted",
        "description": "Triggered when deleting a time off request.\n\nIn the right panel, open **Examples** and select **Payload Example** to see a real payload.\n",
        "parameters": [
          {
            "name": "bob-signature",
            "in": "header",
            "required": true,
            "description": "Base64-encoded signature sent with each webhook request. Use it to verify that the request came from Bob. To verify webhook authenticity, see <a href=\"https://apidocs.hibob.com/update/reference?isFramePreview=true#how-does-bob-calculate-the-signature\" target=\"_blank\">How does Bob calculate the signature</a>.",
            "schema": {
              "type": "string",
              "example": "EQScIBkAtTKFW0ictgt5zzOsqIc2+xGEsM88jOdLuW4CM/a3gLEfrKV+IC5IHx0xbirzLKPIfaZjCGwzuiyI8w=="
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeoffRequestDeletedEvent"
              },
              "example": {
                "companyId": 636192,
                "type": "timeoff.request.deleted",
                "triggeredBy": "3332883804594373380",
                "triggeredAt": "2025-01-02T11:08:26.022782",
                "version": "v2",
                "data": {
                  "timeoffRequestId": 32809865,
                  "employeeId": "3332883804594373380",
                  "getApi": "https://api.hibob.com/v1/timeoff/employees/3332883804594373380/requests/32809865",
                  "originalRequestId": null
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook received successfully"
          },
          "400": {
            "description": "Invalid webhook payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "timeoffRequestUpdated": {
      "post": {
        "operationId": "post_webhook_timeoff-request-updated",
        "tags": [
          "Time off Webhooks"
        ],
        "summary": "Time off request updated",
        "description": "Triggered when updating a time off request.\n\nFor date or time changes (hard-update), a new request replaces the existing one. The payload then includes **originalRequestId** (the very first request before any modifications) and **previousRequestId** (the most recently replaced request).\n\nIn the right panel, open **Examples** and select **Payload Example** to see a real payload.\n",
        "parameters": [
          {
            "name": "bob-signature",
            "in": "header",
            "required": true,
            "description": "Base64-encoded signature sent with each webhook request. Use it to verify that the request came from Bob. To verify webhook authenticity, see <a href=\"https://apidocs.hibob.com/update/reference?isFramePreview=true#how-does-bob-calculate-the-signature\" target=\"_blank\">How does Bob calculate the signature</a>.",
            "schema": {
              "type": "string",
              "example": "EQScIBkAtTKFW0ictgt5zzOsqIc2+xGEsM88jOdLuW4CM/a3gLEfrKV+IC5IHx0xbirzLKPIfaZjCGwzuiyI8w=="
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeoffRequestUpdatedEvent"
              },
              "example": {
                "companyId": 636192,
                "type": "timeoff.request.updated",
                "triggeredBy": "3332883804594373380",
                "triggeredAt": "2025-02-18T16:15:00.218602",
                "version": "v2",
                "data": {
                  "timeoffRequestId": 34902625,
                  "employeeId": "3332883884017713938",
                  "getApi": "https://api.hibob.com/v1/timeoff/employees/3332883884017713938/requests/34900183",
                  "originalRequestId": 34615592,
                  "previousRequestId": 34900183
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook received successfully"
          },
          "400": {
            "description": "Invalid webhook payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "timeoffRequestImported": {
      "post": {
        "operationId": "post_webhook_timeoff-request-imported",
        "tags": [
          "Time off Webhooks"
        ],
        "summary": "Time off request created from import",
        "description": "Triggered when importing a time off request.\n\nImported requests are always approved by default. When using the **getApi** URL immediately after this event, the status in the response will be **approved**.\n\nIn the right panel, open **Examples** and select **Payload Example** to see a real payload.\n",
        "parameters": [
          {
            "name": "bob-signature",
            "in": "header",
            "required": true,
            "description": "Base64-encoded signature sent with each webhook request. Use it to verify that the request came from Bob. To verify webhook authenticity, see <a href=\"https://apidocs.hibob.com/update/reference?isFramePreview=true#how-does-bob-calculate-the-signature\" target=\"_blank\">How does Bob calculate the signature</a>.",
            "schema": {
              "type": "string",
              "example": "EQScIBkAtTKFW0ictgt5zzOsqIc2+xGEsM88jOdLuW4CM/a3gLEfrKV+IC5IHx0xbirzLKPIfaZjCGwzuiyI8w=="
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeoffRequestImportedEvent"
              },
              "example": {
                "companyId": 637323,
                "type": "timeoff.request.imported",
                "triggeredBy": "3419283646526259215",
                "triggeredAt": "2024-10-03T09:29:00.831502",
                "version": "v2",
                "data": {
                  "timeoffRequestId": 24640322,
                  "employeeId": "3052501936990322832",
                  "getApi": "https://api.hibob.com/v1/timeoff/employees/3052501936990322832/requests/24640322"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook received successfully"
          },
          "400": {
            "description": "Invalid webhook payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "timeoffRequestSetEndDate": {
      "post": {
        "operationId": "post_webhook_timeoff-request-set-end-date",
        "tags": [
          "Time off Webhooks"
        ],
        "summary": "Set end date to a time off request",
        "description": "Triggered when setting the end date of an open-ended time off request.\n\nIn the right panel, open **Examples** and select **Payload Example** to see a real payload.\n",
        "parameters": [
          {
            "name": "bob-signature",
            "in": "header",
            "required": true,
            "description": "Base64-encoded signature sent with each webhook request. Use it to verify that the request came from Bob. To verify webhook authenticity, see <a href=\"https://apidocs.hibob.com/update/reference?isFramePreview=true#how-does-bob-calculate-the-signature\" target=\"_blank\">How does Bob calculate the signature</a>.",
            "schema": {
              "type": "string",
              "example": "EQScIBkAtTKFW0ictgt5zzOsqIc2+xGEsM88jOdLuW4CM/a3gLEfrKV+IC5IHx0xbirzLKPIfaZjCGwzuiyI8w=="
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeoffRequestSetEndDateEvent"
              },
              "example": {
                "companyId": 637323,
                "type": "timeoff.request.setEndDate",
                "triggeredBy": "3419283646526259215",
                "triggeredAt": "2024-10-03T09:29:00.831502",
                "version": "v2",
                "data": {
                  "timeoffRequestId": 32832853,
                  "employeeId": "3373576791477190995",
                  "getApi": "https://api.hibob.com/v1/timeoff/employees/3373576791477190995/requests/32832853"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook received successfully"
          },
          "400": {
            "description": "Invalid webhook payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    }
  },
  "paths": {
    "/timeoff/requests/changes": {
      "get": {
        "operationId": "get_timeoff-requests-changes",
        "tags": [
          "Time off requests"
        ],
        "summary": "Get time off requests changes",
        "description": "Returns an array of all changes made to time off requests within a specified date range. Each item in the array includes: the time off request details at the time of the change, and the type of change, such as `created` or `deleted`. Optionally, requests that were changed to status `pending` can also be included.  <br /><br /> **Notes:**  <p> <ul> <li>The results are filtered by **the date the change has occurred** (when the request was created or updated), not the start/end date of the time off request itself. </li>         <li>Each change reflects a snapshot of the time off request's status **at the time of the change**, and may not reflect the current status. </li> </ul></p> <p><strong>Durations and cost:</strong></p> <ul>\n  <li>\n    This endpoint returns daily durations only for requests that use day-by-day duration configurations, including:\n    <code>DifferentDayDurations</code>, <code>specificHoursDayDurations</code>, <code>differentSpecificHoursDayDurations</code>.\n  </li>\n  <li>These durations do not include a daily cost breakdown.</li>\n  <li>\n    All requests return <code>totalCost</code>, which represents the amount deducted from the balance for the whole request.\n  </li>\n  <li>\n    To retrieve the cost per day, use <strong><a href=\"https://apidocs.hibob.com/reference/get_timeoff-employees-id-requests-requestid\">Get the details of an existing time off request.</a></strong> with\n    <code>includeDailyDurations=true</code>.\n  </li>\n</ul> <p><strong>Permissions required</strong>: Please refer to the main <a href=\"https://apidocs.hibob.com/reference/time-off#required-permissions\">Time off API Required Permissions</a> page.</p>",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "description": "The starting date for retrieving time off request changes. If the to parameter is missing, only changes from the last 6 months are included. Requests with a date older than 6 months will return an error. Must be in ISO 8601 format, e.g., 2050-04-05T14:30:24.345Z or 2050-04-05T12:30-02:00.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "description": "Defines the end of the date range for retrieving time off request changes. Must be later than the since timestamp and cannot extend more than 6 months beyond it. Requests with a later date range will return an error. If omitted, the date range extends from the since timestamp to the present. Must be in ISO 8601 format, e.g., 2050-04-05T14:30:24.345Z or 2050-04-05T12:30-02:00.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "includePending",
            "in": "query",
            "description": "Optional parameter. Indicates whether to include pending requests in the results.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Array of time off requests and their change type",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeOffChangesResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Basic": []
          },
          {
            "Bearer": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "WebhookEvent": {
        "type": "object",
        "description": "Base webhook event structure containing common webhook properties",
        "properties": {
          "companyId": {
            "type": "number",
            "description": "The company ID"
          },
          "type": {
            "type": "string",
            "description": "The event type (e.g., timeoff.request.requested)"
          },
          "triggeredBy": {
            "type": "string",
            "description": "The backend-id of the employee that triggered the event, or 'system' for system-triggered events"
          },
          "triggeredAt": {
            "type": "string",
            "description": "The timestamp when the event occurred (ISO 8601-style string)"
          },
          "version": {
            "type": "string",
            "description": "The webhook version (e.g., v2)"
          },
          "data": {
            "type": "object",
            "description": "Event-specific payload; structure varies by event type"
          }
        },
        "required": [
          "companyId",
          "type",
          "triggeredBy",
          "triggeredAt",
          "version",
          "data"
        ]
      },
      "TimeoffRequestRequestedEventData": {
        "type": "object",
        "description": "Data payload for timeoff.request.requested event",
        "properties": {
          "timeoffRequestId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the time off request"
          },
          "employeeId": {
            "type": "string",
            "description": "The unique identifier of the employee"
          },
          "getApi": {
            "type": "string",
            "description": "URL to retrieve the full time off request details via the API"
          }
        },
        "required": [
          "timeoffRequestId",
          "employeeId",
          "getApi"
        ]
      },
      "TimeoffRequestApprovedEventData": {
        "type": "object",
        "description": "Data payload for timeoff.request.approved event",
        "properties": {
          "timeoffRequestId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the time off request"
          },
          "employeeId": {
            "type": "string",
            "description": "The unique identifier of the employee"
          },
          "getApi": {
            "type": "string",
            "description": "URL to retrieve the full time off request details via the API"
          }
        },
        "required": [
          "timeoffRequestId",
          "employeeId",
          "getApi"
        ]
      },
      "TimeoffRequestDeclinedEventData": {
        "type": "object",
        "description": "Data payload for timeoff.request.declined event",
        "properties": {
          "timeoffRequestId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the time off request"
          },
          "employeeId": {
            "type": "string",
            "description": "The unique identifier of the employee"
          },
          "getApi": {
            "type": "string",
            "description": "URL to retrieve the full time off request details via the API"
          }
        },
        "required": [
          "timeoffRequestId",
          "employeeId",
          "getApi"
        ]
      },
      "TimeoffRequestCancelledEventData": {
        "type": "object",
        "description": "Data payload for timeoff.request.cancelled event",
        "properties": {
          "timeoffRequestId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the time off request"
          },
          "employeeId": {
            "type": "string",
            "description": "The unique identifier of the employee"
          },
          "getApi": {
            "type": "string",
            "description": "URL to retrieve the full time off request details via the API"
          },
          "originalRequestId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "The ID of the very first request before any modifications"
          }
        },
        "required": [
          "timeoffRequestId",
          "employeeId",
          "getApi"
        ]
      },
      "TimeoffRequestDeletedEventData": {
        "type": "object",
        "description": "Data payload for timeoff.request.deleted event",
        "properties": {
          "timeoffRequestId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the time off request"
          },
          "employeeId": {
            "type": "string",
            "description": "The unique identifier of the employee"
          },
          "getApi": {
            "type": "string",
            "description": "URL to retrieve the full time off request details via the API"
          },
          "originalRequestId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "The ID of the very first request before any modifications"
          }
        },
        "required": [
          "timeoffRequestId",
          "employeeId",
          "getApi"
        ]
      },
      "TimeoffRequestUpdatedEventData": {
        "type": "object",
        "description": "Data payload for timeoff.request.updated event",
        "properties": {
          "timeoffRequestId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the time off request"
          },
          "employeeId": {
            "type": "string",
            "description": "The unique identifier of the employee"
          },
          "getApi": {
            "type": "string",
            "description": "URL to retrieve the full time off request details via the API"
          },
          "originalRequestId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "The ID of the very first request before any modifications"
          },
          "previousRequestId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "The ID of the most recently replaced request (for date/time changes)"
          }
        },
        "required": [
          "timeoffRequestId",
          "employeeId",
          "getApi"
        ]
      },
      "TimeoffRequestImportedEventData": {
        "type": "object",
        "description": "Data payload for timeoff.request.imported event",
        "properties": {
          "timeoffRequestId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the time off request"
          },
          "employeeId": {
            "type": "string",
            "description": "The unique identifier of the employee"
          },
          "getApi": {
            "type": "string",
            "description": "URL to retrieve the full time off request details via the API"
          }
        },
        "required": [
          "timeoffRequestId",
          "employeeId",
          "getApi"
        ]
      },
      "TimeoffRequestSetEndDateEventData": {
        "type": "object",
        "description": "Data payload for timeoff.request.setEndDate event",
        "properties": {
          "timeoffRequestId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the time off request"
          },
          "employeeId": {
            "type": "string",
            "description": "The unique identifier of the employee"
          },
          "getApi": {
            "type": "string",
            "description": "URL to retrieve the full time off request details via the API"
          }
        },
        "required": [
          "timeoffRequestId",
          "employeeId",
          "getApi"
        ]
      },
      "TimeoffRequestRequestedEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "timeoff.request.requested"
                ],
                "description": "Event type for time off request submitted"
              },
              "data": {
                "$ref": "#/components/schemas/TimeoffRequestRequestedEventData"
              }
            }
          }
        ]
      },
      "TimeoffRequestApprovedEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "timeoff.request.approved"
                ],
                "description": "Event type for time off request approved"
              },
              "data": {
                "$ref": "#/components/schemas/TimeoffRequestApprovedEventData"
              }
            }
          }
        ]
      },
      "TimeoffRequestDeclinedEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "timeoff.request.declined"
                ],
                "description": "Event type for time off request declined"
              },
              "data": {
                "$ref": "#/components/schemas/TimeoffRequestDeclinedEventData"
              }
            }
          }
        ]
      },
      "TimeoffRequestCancelledEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "timeoff.request.cancelled"
                ],
                "description": "Event type for time off request cancelled"
              },
              "data": {
                "$ref": "#/components/schemas/TimeoffRequestCancelledEventData"
              }
            }
          }
        ]
      },
      "TimeoffRequestDeletedEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "timeoff.request.deleted"
                ],
                "description": "Event type for time off request deleted"
              },
              "data": {
                "$ref": "#/components/schemas/TimeoffRequestDeletedEventData"
              }
            }
          }
        ]
      },
      "TimeoffRequestUpdatedEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "timeoff.request.updated"
                ],
                "description": "Event type for time off request updated"
              },
              "data": {
                "$ref": "#/components/schemas/TimeoffRequestUpdatedEventData"
              }
            }
          }
        ]
      },
      "TimeoffRequestImportedEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "timeoff.request.imported"
                ],
                "description": "Event type for time off request created from import"
              },
              "data": {
                "$ref": "#/components/schemas/TimeoffRequestImportedEventData"
              }
            }
          }
        ]
      },
      "TimeoffRequestSetEndDateEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "timeoff.request.setEndDate"
                ],
                "description": "Event type for setting the end date of an open-ended time off request"
              },
              "data": {
                "$ref": "#/components/schemas/TimeoffRequestSetEndDateEventData"
              }
            }
          }
        ]
      },
      "TimeOffChangesBase": {
        "title": "Changes item (base)",
        "type": "object",
        "properties": {
          "employeeId": {
            "type": "string",
            "description": "Employee ID",
            "format": "uuid"
          },
          "employeeDisplayName": {
            "type": "string",
            "description": "Employee display name."
          },
          "employeeEmail": {
            "type": "string",
            "description": "Employee email address."
          },
          "policyTypeDisplayName": {
            "type": "string",
            "description": "Display name of the policy type."
          },
          "changeType": {
            "type": "string",
            "description": "Change type - created, canceled or deleted.",
            "enum": [
              "Created",
              "Canceled",
              "Deleted",
              "Pending"
            ]
          },
          "requestId": {
            "type": "integer",
            "format": "int64",
            "description": "The backend-id of the current time-off request, representing the latest version of the request.\n"
          },
          "originalRequestId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "The backend-id of the very first time-off request. It remains unchanged regardless of updates that create new time off request records.\n"
          },
          "previousRequestId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "The backend-id of the previous request that was replaced when this new request was created.\n"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the time off request was created."
          },
          "durationUnit": {
            "type": "string",
            "description": "The unit used for the totalDuration and totalCost - either 'days' or 'hours'\n",
            "enum": [
              "days",
              "hours"
            ]
          },
          "totalDuration": {
            "type": "number",
            "description": "The total amount of time the request covers, including regular days off such as weekends\n"
          },
          "totalCost": {
            "type": "number",
            "description": "The amount that will be deducted from the balance"
          },
          "changeReason": {
            "type": "string",
            "description": "Request change reason"
          },
          "visibility": {
            "allOf": [
              {
                "$ref": "#/components/schemas/GetTimeoffRequestBase/properties/visibility"
              }
            ]
          }
        }
      },
      "TimeOffChangesDays": {
        "title": "Changes (days)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the first day of the time off.\n"
              },
              "endDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the last day of the time off.\n"
              },
              "startPortion": {
                "type": "string",
                "description": "What portion of the first day is included - all_day, morning or afternoon (relevant for the Days type).\n"
              },
              "endPortion": {
                "type": "string",
                "description": "What portion of the last day is included - all_day, morning or afternoon (relevant for the Days type).\n"
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "days"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChangesHours": {
        "title": "Changes (hours)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "date": {
                "type": "string",
                "format": "date",
                "description": "Date of the time off (relevant for requests using the Hours type)"
              },
              "hoursOnDate": {
                "type": "number",
                "description": "The time off duration in hours for the date (relevant for requests using the Hours type).\n"
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "hours"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChangesPortionOnRange": {
        "title": "Changes (portionOnRange)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the first day of the time off.\n"
              },
              "endDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the last day of the time off.\n"
              },
              "dayPortion": {
                "type": "string",
                "description": "What portion of the request's days is included - morning or afternoon (portionOnRange type).\n"
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "portionOnRange"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChangesHoursOnRange": {
        "title": "Changes (hoursOnRange)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the first day of the time off.\n"
              },
              "endDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the last day of the time off.\n"
              },
              "dailyHours": {
                "type": "number",
                "description": "The time off duration in hours for every day in the request (hoursOnRange type)\n"
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "hoursOnRange"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChangesDifferentDayDurations": {
        "title": "Changes (differentDayDurations)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the first day of the time off.\n"
              },
              "endDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the last day of the time off.\n"
              },
              "durations": {
                "type": "array",
                "description": "Array of durations for each day in the request.\n",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string",
                      "format": "date"
                    },
                    "dayDuration": {
                      "$ref": "#/components/schemas/HoursAndMinutesDayDuration"
                    }
                  }
                }
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "differentDayDurations"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChangesSpecificHoursDayDurations": {
        "title": "Changes (specificHoursDayDurations)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the first day of the time off.\n"
              },
              "endDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the last day of the time off.\n"
              },
              "timeZone": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The calculated time zone name. The value for this field is automatically determined based on the time zone of the employee’s assigned site.\n"
              },
              "durations": {
                "type": "array",
                "description": "Array of durations for each day in the request.\n",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string",
                      "format": "date"
                    },
                    "dayDuration": {
                      "type": "object",
                      "properties": {
                        "localStartTime": {
                          "type": "string"
                        },
                        "localEndTime": {
                          "type": "string"
                        },
                        "dayDurationType": {
                          "type": "string",
                          "enum": [
                            "specificHoursDayDuration"
                          ]
                        }
                      }
                    }
                  }
                }
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "specificHoursDayDurations"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChangesDifferentSpecificHoursDayDurations": {
        "title": "Changes (differentSpecificHoursDayDurations)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the first day of the time off"
              },
              "endDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the last day of the time off."
              },
              "timeZone": {
                "type": "string",
                "description": "The time zone for the time off request"
              },
              "durations": {
                "type": "array",
                "description": "Array of day durations for the time off request",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string",
                      "format": "date",
                      "description": "The date for this duration entry"
                    },
                    "dayDuration": {
                      "description": "The duration for this specific date. Each date must include exactly one of the following types: <ul> <li>SpecificHoursDayDuration</li> <li>PortionDayDuration</li> </ul>\n",
                      "oneOf": [
                        {
                          "$ref": "#/components/schemas/SpecificHoursDayDuration"
                        },
                        {
                          "$ref": "#/components/schemas/DiffSpecHoursPortionDayDuration"
                        }
                      ]
                    }
                  },
                  "required": [
                    "date",
                    "dayDuration"
                  ]
                }
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "differentSpecificHoursDayDurations"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChangesPercentageOnRange": {
        "title": "Changes (percentageOnRange)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the first day of the time off.\n"
              },
              "endDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the last day of the time off.\n"
              },
              "percentageOfDay": {
                "type": "integer",
                "description": "The percentage of day requested"
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "percentageOnRange"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChangesOpenEnded": {
        "title": "Changes (openEnded)",
        "allOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesBase"
          },
          {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "description": "Date of the first day of the time off.\n"
              },
              "endDate": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date",
                "description": "Date of the last day of the time off.\n"
              },
              "startPortion": {
                "type": "string",
                "description": "What portion of the first day is included - all_day, morning or afternoon.\n"
              },
              "endPortion": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "What portion of the last day is included - all_day, morning or afternoon (may be null while open).\n"
              },
              "timeZone": {
                "type": "string",
                "description": "The calculated time zone name. The value for this field is automatically determined based on the time zone of the employee’s assigned site.\n"
              },
              "type": {
                "type": "string",
                "description": "The type of request duration.",
                "enum": [
                  "openEnded"
                ]
              }
            }
          }
        ]
      },
      "TimeOffChange": {
        "title": "Changes item",
        "oneOf": [
          {
            "$ref": "#/components/schemas/TimeOffChangesDays"
          },
          {
            "$ref": "#/components/schemas/TimeOffChangesHours"
          },
          {
            "$ref": "#/components/schemas/TimeOffChangesPortionOnRange"
          },
          {
            "$ref": "#/components/schemas/TimeOffChangesHoursOnRange"
          },
          {
            "$ref": "#/components/schemas/TimeOffChangesDifferentDayDurations"
          },
          {
            "$ref": "#/components/schemas/TimeOffChangesSpecificHoursDayDurations"
          },
          {
            "$ref": "#/components/schemas/TimeOffChangesDifferentSpecificHoursDayDurations"
          },
          {
            "$ref": "#/components/schemas/TimeOffChangesPercentageOnRange"
          },
          {
            "$ref": "#/components/schemas/TimeOffChangesOpenEnded"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "days": "#/components/schemas/TimeOffChangesDays",
            "hours": "#/components/schemas/TimeOffChangesHours",
            "portionOnRange": "#/components/schemas/TimeOffChangesPortionOnRange",
            "hoursOnRange": "#/components/schemas/TimeOffChangesHoursOnRange",
            "differentDayDurations": "#/components/schemas/TimeOffChangesDifferentDayDurations",
            "specificHoursDayDurations": "#/components/schemas/TimeOffChangesSpecificHoursDayDurations",
            "differentSpecificHoursDayDurations": "#/components/schemas/TimeOffChangesDifferentSpecificHoursDayDurations",
            "percentageOnRange": "#/components/schemas/TimeOffChangesPercentageOnRange",
            "openEnded": "#/components/schemas/TimeOffChangesOpenEnded"
          }
        }
      },
      "TimeOffChangesResponse": {
        "title": "Changes response",
        "type": "object",
        "properties": {
          "changes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimeOffChange"
            }
          }
        },
        "required": [
          "changes"
        ],
        "example": {
          "changes": [
            {
              "changeType": "Pending",
              "employeeId": "2834366722494955760",
              "employeeDisplayName": "Niall Finley",
              "employeeEmail": "niall.finley_572290@samplebob.com",
              "requestId": 42017629,
              "originalRequestId": null,
              "previousRequestId": null,
              "policyTypeDisplayName": "Holiday",
              "type": "specificHoursDayDurations",
              "createdOn": "2025-08-17T18:29:10.408597",
              "durationUnit": "hours",
              "totalDuration": 0.333,
              "totalCost": 0.333,
              "changeReason": "",
              "visibility": "Public",
              "startDate": "2025-08-06",
              "endDate": "2025-08-07",
              "timeZone": "America/New_York",
              "durations": [
                {
                  "date": "2025-08-06",
                  "dayDuration": {
                    "localStartTime": "00:50:00",
                    "localEndTime": "01:00:00",
                    "dayDurationType": "specificHoursDayDuration"
                  }
                },
                {
                  "date": "2025-08-07",
                  "dayDuration": {
                    "localStartTime": "00:50:00",
                    "localEndTime": "01:00:00",
                    "dayDurationType": "specificHoursDayDuration"
                  }
                }
              ]
            },
            {
              "changeType": "Created",
              "employeeId": "2911111434173677987",
              "employeeDisplayName": "TestRequest User",
              "employeeEmail": "joe.doe@samplecompany.com",
              "requestId": 42017707,
              "originalRequestId": null,
              "previousRequestId": null,
              "policyTypeDisplayName": "Holiday",
              "type": "differentSpecificHoursDayDurations",
              "createdOn": "2025-08-17T18:45:12.123456",
              "durationUnit": "hours",
              "totalDuration": 6.5,
              "totalCost": 6.5,
              "changeReason": "",
              "visibility": "Public",
              "startDate": "2025-08-28",
              "endDate": "2025-08-31",
              "timeZone": "Europe/London",
              "durations": [
                {
                  "date": "2025-08-28",
                  "dayDuration": {
                    "dayDurationType": "specificHoursDayDuration",
                    "localStartTime": "09:00:00",
                    "localEndTime": "11:00:00"
                  }
                },
                {
                  "date": "2025-08-29",
                  "dayDuration": {
                    "dayDurationType": "portionDayDuration",
                    "portion": "vacant"
                  }
                },
                {
                  "date": "2025-08-30",
                  "dayDuration": {
                    "dayDurationType": "specificHoursDayDuration",
                    "localStartTime": "14:00:00",
                    "localEndTime": "16:30:00"
                  }
                },
                {
                  "date": "2025-08-31",
                  "dayDuration": {
                    "dayDurationType": "portionDayDuration",
                    "portion": "all_day"
                  }
                }
              ]
            },
            {
              "changeType": "Created",
              "employeeId": "2834366722494955760",
              "employeeDisplayName": "Niall Finley",
              "employeeEmail": "niall.finley_572290@samplebob.com",
              "requestId": 42190369,
              "originalRequestId": null,
              "previousRequestId": null,
              "policyTypeDisplayName": "Holiday",
              "type": "portionOnRange",
              "createdOn": "2025-08-21T08:17:30.735453",
              "durationUnit": "hours",
              "totalDuration": 8.8,
              "totalCost": 8.8,
              "changeReason": "",
              "visibility": "Public",
              "startDate": "2025-08-22",
              "endDate": "2025-08-25",
              "dayPortion": "morning"
            },
            {
              "changeType": "Created",
              "employeeId": "2834366723786801393",
              "employeeDisplayName": "Darren Lavery",
              "employeeEmail": "darren.lavery_572290@samplebob.com",
              "requestId": 41474961,
              "originalRequestId": null,
              "previousRequestId": null,
              "policyTypeDisplayName": "Sick",
              "type": "days",
              "createdOn": "2025-08-03T13:34:10.012118",
              "durationUnit": "days",
              "totalDuration": 1,
              "totalCost": 1,
              "changeReason": "",
              "visibility": "Public",
              "startDate": "2025-08-03",
              "endDate": "2025-08-03",
              "startPortion": "all_day",
              "endPortion": "all_day"
            },
            {
              "changeType": "Created",
              "employeeId": "2834366753381810438",
              "employeeDisplayName": "Amy Miles",
              "employeeEmail": "amy.miles_572290@samplebob.com",
              "requestId": 41812663,
              "originalRequestId": 41812424,
              "previousRequestId": 41812424,
              "policyTypeDisplayName": "Holiday",
              "type": "differentDayDurations",
              "createdOn": "2025-08-11T12:56:35.889667",
              "durationUnit": "hours",
              "totalDuration": 6.667,
              "totalCost": 6.667,
              "changeReason": "",
              "visibility": "Public",
              "startDate": "2025-08-08",
              "endDate": "2025-08-11",
              "durations": [
                {
                  "date": "2025-08-08",
                  "dayDuration": {
                    "hours": 1,
                    "minutes": 30,
                    "dayDurationType": "hoursAndMinutesDayDuration"
                  }
                },
                {
                  "date": "2025-08-11",
                  "dayDuration": {
                    "hours": 5,
                    "minutes": 10,
                    "dayDurationType": "hoursAndMinutesDayDuration"
                  }
                }
              ]
            },
            {
              "changeType": "Created",
              "employeeId": "2911111434173677987",
              "employeeDisplayName": "TestRequest User",
              "employeeEmail": "joe.doe@samplecompany.com",
              "requestId": 42017566,
              "originalRequestId": null,
              "previousRequestId": null,
              "policyTypeDisplayName": "Holiday",
              "type": "hoursOnRange",
              "createdOn": "2025-08-17T18:22:03.338909",
              "durationUnit": "hours",
              "totalDuration": 4,
              "totalCost": 4,
              "changeReason": "",
              "visibility": "Public",
              "startDate": "2025-08-18",
              "endDate": "2025-08-19",
              "dailyHours": 2
            },
            {
              "changeType": "Created",
              "employeeId": "2911111434173677987",
              "employeeDisplayName": "TestRequest User",
              "employeeEmail": "joe.doe@samplecompany.com",
              "requestId": 42016823,
              "originalRequestId": null,
              "previousRequestId": null,
              "policyTypeDisplayName": "Holiday",
              "type": "hours",
              "createdOn": "2025-08-17T17:06:04.415477",
              "durationUnit": "hours",
              "totalDuration": 5.5,
              "totalCost": 5.5,
              "changeReason": "",
              "visibility": "Public",
              "date": "2025-08-04",
              "hoursOnDate": 5.5
            },
            {
              "changeType": "Created",
              "employeeId": "2911111434173677987",
              "employeeDisplayName": "TestRequest User",
              "employeeEmail": "joe.doe@samplecompany.com",
              "requestId": 42017704,
              "originalRequestId": null,
              "previousRequestId": null,
              "policyTypeDisplayName": "Holiday",
              "type": "percentageOnRange",
              "createdOn": "2025-08-17T18:37:16.326675",
              "durationUnit": "days",
              "totalDuration": 0.46,
              "totalCost": 0.46,
              "changeReason": "",
              "visibility": "Public",
              "startDate": "2025-08-01",
              "endDate": "2025-08-03",
              "percentageOfDay": 23
            },
            {
              "changeType": "Created",
              "employeeId": "2911111434173677987",
              "employeeDisplayName": "TestRequest User",
              "employeeEmail": "joe.doe@samplecompany.com",
              "requestId": 42017706,
              "originalRequestId": null,
              "previousRequestId": null,
              "policyTypeDisplayName": "Holiday",
              "type": "openEnded",
              "createdOn": "2025-08-17T18:37:34.825326",
              "durationUnit": "days",
              "totalDuration": 0.5,
              "totalCost": 0.5,
              "changeReason": "",
              "visibility": "Public",
              "startDate": "2025-08-31",
              "endDate": null,
              "startPortion": "afternoon",
              "endPortion": null,
              "timeZone": "Europe/London"
            }
          ]
        }
      },
      "HoursAndMinutesDayDuration": {
        "type": "object",
        "description": "Duration in hours and minutes for a day (relevant for `differentDayDurations` type)",
        "required": [
          "hours",
          "minutes",
          "dayDurationType"
        ],
        "properties": {
          "hours": {
            "type": "integer",
            "description": "Number of hours"
          },
          "minutes": {
            "type": "integer",
            "description": "Number of minutes (must match the minimal amount of minutes in the time off policy)\n"
          },
          "dayDurationType": {
            "type": "string",
            "enum": [
              "hoursAndMinutesDayDuration"
            ],
            "description": "Type of day duration"
          }
        }
      },
      "SpecificHoursDayDuration": {
        "title": "Specific hours day duration",
        "description": "Defines the request by exact working hours (for example, 10:00-12:00).\n",
        "required": [
          "dayDurationType",
          "localStartTime",
          "localEndTime"
        ],
        "type": "object",
        "properties": {
          "dayDurationType": {
            "type": "string",
            "enum": [
              "specificHoursDayDuration"
            ],
            "description": "The type of day duration"
          },
          "localStartTime": {
            "type": "string",
            "format": "time",
            "description": "Start time of the duration"
          },
          "localEndTime": {
            "type": "string",
            "format": "time",
            "description": "End time of the duration"
          }
        }
      },
      "DiffSpecHoursPortionDayDuration": {
        "title": "PortionDayDuration",
        "description": "Defines the request as either the entire day (all_day) or no hours at all (vacant).\n",
        "required": [
          "dayDurationType",
          "portion"
        ],
        "type": "object",
        "properties": {
          "dayDurationType": {
            "type": "string",
            "enum": [
              "portionDayDuration"
            ],
            "description": "The type of day duration"
          },
          "portion": {
            "type": "string",
            "enum": [
              "all_day",
              "vacant"
            ],
            "description": "The portion of the day"
          }
        }
      },
      "GetTimeoffRequestBase": {
        "title": "Time off request (base)",
        "type": "object",
        "properties": {
          "employeeId": {
            "type": "string",
            "format": "string",
            "description": "Employee ID."
          },
          "requestId": {
            "type": "integer",
            "description": "Time Off Request ID."
          },
          "policyTypeDisplayName": {
            "type": "string",
            "description": "The policy type name returned for this request. May contain sensitive information, such as the original policy type name for `Private` policies or when the caller has permission on `Custom name` policies. When `policyTypeCustomName` is not null and differs from this value, this field contains the original policy type name, meaning the caller has permission to see it. <a href=\"https://apidocs.hibob.com/docs/explore-time-off-api#policy-type-names-in-api-responses\">Learn more about policy type names and visibility.</a>"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the time off request was created."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "The request description."
          },
          "durationUnit": {
            "type": "string",
            "enum": [
              "days",
              "hours"
            ],
            "description": "The unit used for the totalDuration and totalCost - either 'days' or 'hours'\n"
          },
          "totalDuration": {
            "type": "number",
            "description": "The total amount of time the request covers, including regular days off such as weekends\n"
          },
          "totalCost": {
            "type": "number",
            "description": "The amount that will be deducted from the balance"
          },
          "status": {
            "type": "string",
            "description": "Request status. This can be approved, pending, canceled, etc."
          },
          "hasAttachment": {
            "type": "boolean",
            "description": "Whether the request has attachments"
          },
          "attachmentLinks": {
            "type": "array",
            "description": "Attachments with download links",
            "items": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "mimeType": {
                  "type": "string"
                }
              }
            }
          },
          "reasonCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "The reason code taken from the policy type's reason codes list. The list is available in GET /timeoff/policy-types/{policyType}/reason-codes\n"
          },
          "policyTypeCustomName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The custom public-facing label when the policy's `visibility` is `Custom name`; `null` for Public and Private policies. Never contains sensitive information. Always returned regardless of caller permissions. <a href=\"https://apidocs.hibob.com/docs/explore-time-off-api#policy-type-names-in-api-responses\">Learn more about policy type names and visibility.</a>"
          },
          "previousRequestId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The backend-id of the previous request that was replaced when this new request was created. This occurs when the request's date or time is updated, resulting in a new time off request record.\n"
          },
          "originalRequestId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The backend-id of the very first time-off request. It remains unchanged regardless of updates that create new time off request records. It serves as the anchor for tracing the request's entire history back to its initial submission.\n"
          },
          "approved": {
            "type": "boolean",
            "description": "Whether the request is approved (and hence publicly visible)."
          },
          "approvedBy": {
            "type": [
              "string",
              "null"
            ],
            "description": "Who approved the request"
          },
          "approvedAt": {
            "type": [
              "string",
              "null"
            ],
            "description": "When the request was approved"
          },
          "declinedBy": {
            "type": [
              "string",
              "null"
            ],
            "description": "Who declined the request"
          },
          "declinedAt": {
            "type": [
              "string",
              "null"
            ],
            "description": "When the request was declined"
          },
          "declineReason": {
            "type": [
              "string",
              "null"
            ],
            "description": "Why the request was declined"
          },
          "visibility": {
            "type": "string",
            "description": "The request visibility either 'Public', 'Private' or 'Custom name'",
            "enum": [
              "Public",
              "Private",
              "Custom name"
            ]
          },
          "timeZoneOffset": {
            "type": [
              "string",
              "null"
            ],
            "description": "Calculated time zone offset from GMT in ±HH:MM format (e.g., \"GMT -5:00\"). This field is relevant only for time-off requests which allow specifying exact start and end times (e.g., 09:00–18:00). The value is automatically calculated based on the employee's assigned site time zone.\n"
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "The unique identifier of the error."
          },
          "error": {
            "type": "string",
            "description": "A human readable error message."
          }
        }
      }
    },
    "securitySchemes": {
      "Basic": {
        "type": "http",
        "scheme": "basic"
      },
      "Bearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "OAuth 2.0",
        "description": "OAuth 2.0 authentication using an Access Token is available for registered partners only.  Try It! does not support the full HiBob OAuth flow. You can follow <a href=\"https://apidocs.hibob.com/reference/oauth-20#testing-from-the-public-api-reference\" target=\"_blank\">these steps</a> to complete the OAuth 2.0 flow in Postman and then paste the token here."
      }
    }
  }
}
```