> This page is for API, version 2026-01-01 (Stable) (default).
> For other versions, use one of these documentation indexes:
> - 2026-01-01 (Stable) (default): https://developer.deel.com/api/stable/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.deel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.deel.com/_mcp/server.

# List policies

GET https://api.letsdeel.com/rest/time_offs/profile/{hris_profile_id}/policies

Returns the time-off policies assigned to the specified hris_profile_id, including policy details such as allowed types, accrual rules, and balances. Results can be filtered by policy type name or policy type ID.

 **Token scopes**: `time-off:read`

Reference: https://developer.deel.com/api/reference/endpoints/time-off/get-time-off-policies

## Authentication

- `Authorization` header (bearer token, required) — ## Authentication The Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail. ```curl curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \ -H 'Authorization: Bearer YOUR-TOKEN-HERE' ``` [Learn more about authentication](/api/authentication)
- `Authorization` header (bearer token, required) — Standard OAuth2 security scheme based on https://swagger.io/docs/specification/authentication/

## Servers

- `https://api.letsdeel.com/rest` (Production, default)
- `https://api-staging.letsdeel.com/rest` (Demo)

## Request

### Path parameters

- `hris_profile_id` (string, required) — hrisProfileId id.

### Query parameters

- `policy_type_name` (enum, optional) — Policy type name.
  - Allowed values: `Adoption leave`, `Advanced vacation`, `Bereavement leave`, `Blood donation leave`, `Breastfeeding leave`, `Childbirth leave`, `Childcare leave`, `Civic/public duty leave`, `Compensatory leave`, `Disability leave`, `Doctor's appointment leave`, `Family & domestic violence leave`, `Family responsibility leave`, `Floating Holiday Allowance`, `Hajj leave`, `Hospitalization leave`, `Long Service Leave`, `Marriage/wedding leave`, `Maternity leave`, `Menstrual leave`, `Military leave`, `Moving leave`, `Other leave`, `Paid leave`, `Parental leave`, `Paternity leave`, `Personal leave`, `Pregnancy leave`, `Regional holiday`, `RTT`, `Sick leave`, `Study leave`, `Supplementary Leave`, `Unpaid leave`, `Vacation`, `Vacation - public holidays replacement`, `Volunteer leave`, `Work accident leave`, `Work Location`
- `policy_type_id` (string, optional) — policy type id

## Response

### 200

Successful operation.

- `policies` (list of TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItems, optional)

## Errors

### 400 Bad Request Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 401 Unauthorized Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 403 Forbidden Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 404 Not Found Error

Not Found - Resource not found

- `message` (string, optional)

### 500 Internal Server Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

## Types

### TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItems

Time off policy

- `id` (string, required) — Unique identifier of the policy
- `name` (string, required) — Name of the policy
- `created_at` (string, required) — Date and time when the policy was created
- `leave_type` (enum, required) — Type of leave for this policy
  - Allowed values: `SHORT_TERM_LEAVE`, `LONG_TERM_LEAVE`
- `updated_at` (string, required) — Date and time when the policy was last updated
- `policy_type` (TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItemsPolicyType, required) — Type of this policy
- `payment_type` (enum, required) — Payment type for the time off policy
  - Allowed values: `PAID`, `UNPAID`
- `tracking_unit` (enum, required, nullable) — Unit used for tracking policy periods
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `policy_allowances` (list of TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItemsPolicyAllowancesItems, required) — Allowances associated with this policy
- `notice_period_unit` (enum, required, nullable) — Unit for notice period
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `request_start_type` (enum, required, nullable) — Type of request start configuration
  - Allowed values: `IMMEDIATELY`, `FIXED_PERIOD`
- `request_start_unit` (enum, required, nullable) — Unit used for request start configuration
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `overlap_request_type` (enum, required) — Type of overlapping requests allowed
  - Allowed values: `ALLOWED`, `NOT_ALLOWED`
- `tracking_unit_amount` (double, required, nullable) — Amount of tracking units
- `time_off_request_type` (enum, required) — Type of time off requests allowed
  - Allowed values: `HALF_DAY`, `HOURLY`, `FULL_DAY`, `PERCENTAGE`, `PARTIAL_HOURS`
- `is_attachment_required` (enum, required) — Whether an attachment is required for time off requests
  - Allowed values: `NOT_REQUIRED`, `REQUIRED`, `CONDITIONALLY_REQUIRED`
- `is_description_required` (boolean, required) — Whether a description is required for time off requests
- `notice_period_unit_amount` (double, required, nullable) — Amount of notice period units
- `request_start_unit_amount` (double, required, nullable) — Amount of request start units
- `policy_allowance_proration` (TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItemsPolicyAllowanceProration, required) — Proration configuration for policy allowances
- `retrospective_request_type` (enum, required) — Type of retrospective requests allowed
  - Allowed values: `ALLOWED`, `NOT_ALLOWED`
- `allow_to_edit_past_time_offs` (boolean, required) — Whether editing past time offs is allowed
- `auto_approval_inactivity_time_unit` (enum, required, nullable) — Unit for auto-approval inactivity time
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `auto_approval_inactivity_time_unit_amount` (double, required, nullable) — Amount of auto-approval inactivity time units
- `description` (string, optional, nullable) — Description of the policy
- `policy_type_id` (string, optional) — Unique identifier of the policy type
- `time_off_types` (list of TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItemsTimeOffTypesItems, optional) — Time off types associated with this policy
- `tracking_cadence` (enum, optional) — Cadence for tracking policy periods
  - Allowed values: `FIXED_DAY`, `ANNIVERSARY`, `NOT_SPECIFIED`
- `tracking_start_date` (string, optional, nullable) — Start date for tracking policy periods

### ApiErrorRequest

- `method` (string, optional) — The HTTP method of the failed request
- `url` (string, optional) — The relative URL of the failed request
- `status` (double, optional) — The status code of the response
- `api_req_id` (string, optional) — The request ID of the failed request
- `docs` (string, optional) — A link to the official documentation for the requested endpoint resource
- `source` (string, optional) — The source handler which produced the returned error
- `code` (double, optional) — The code of the source handler which produced the returned error

### ApiError

- `message` (string, optional) — A description of the returned error
- `path` (string, optional) — The JSON path where input validation failed

### TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItemsPolicyType

Type of this policy

- `id` (string, required) — Unique identifier of the policy type
- `name` (string, required) — Name of the policy type

### TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItemsPolicyAllowancesItems

- `id` (string, required) — Unique identifier of the policy allowance
- `type` (enum, required) — Type of the policy allowance
  - Allowed values: `BASE_ALLOWANCE`, `ADDITIONAL_ALLOWANCE`
- `accrual_type` (enum, required) — Type of accrual for the allowance. Determines how/when profiles should earn their entitlement (aka: allowance).
  - Allowed values: `TIMEFRAME`, `EVENT`, `TIME_OFF_IN_LIEU`, `HOURLY`, `LUMPSUM`, `NO_AUTO_ACCRUAL`
- `accrual_unit` (enum, required, nullable) — Unit used for accrual
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `rollover_type` (enum, required, nullable) — Type of rollover
  - Allowed values: `NO_ROLLOVER`, `PAY_OUT`, `CARRY_OVER`, `CARRY_OVER_PAY_OUT`
- `entitlement_unit` (enum, required, nullable) — Unit used for entitlement
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `accrual_unit_amount` (double, required, nullable) — Amount of accrual units
- `enable_bank_holidays` (boolean, required) — Whether bank holidays are enabled for this allowance
- `balance_tracking_type` (enum, required, nullable) — Type of balance tracking. Determines how workers can request their time off.
  - Allowed values: `INFLEXIBLE`, `FLEXIBLE_NO_LIMIT`, `FLEXIBLE_CUSTOM_AMOUNT`, `FLEXIBLE_UP_TO_YEARLY_ALLOWANCE`
- `entitlement_start_date` (string, required, nullable) — Start date for entitlement
- `entitlement_start_type` (enum, required) — Type of entitlement start
  - Allowed values: `IMMEDIATELY`, `FIXED_PERIOD`, `FIXED_DAY`
- `entitlement_start_unit` (enum, required, nullable) — Unit used for entitlement start
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `entitlement_unit_amount` (double, required, nullable) — Amount of entitlement units
- `accrual_application_type` (enum, required, nullable) — Type of accrual application. Enum to indicate when accruals will be applied within the accrual cycles.
  - Allowed values: `BEGIN_OF_CYCLE`, `END_OF_CYCLE`, `BEGIN_OF_NEXT_CYCLE`
- `rollover_expiration_unit` (enum, required, nullable) — Unit used for rollover expiration
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `rollover_limit_unit_amount` (double, required, nullable) — Amount of rollover limit units
- `entitlement_expiration_unit` (enum, required, nullable) — Unit used for entitlement expiration
  - Allowed values: `HOUR`, `BUSINESS_DAY`, `CALENDAR_DAY`, `WEEK`, `MONTH`, `YEAR`
- `entitlement_start_unit_amount` (double, required, nullable) — Amount of entitlement start units
- `rollover_expiration_unit_amount` (double, required, nullable) — Amount of rollover expiration units
- `entitlement_expiration_unit_amount` (double, required, nullable) — Amount of entitlement expiration units
- `zero_out_negative_balances_on_rollover` (boolean, required) — Whether negative balances are zeroed out on rollover
- `balance_tracking_flexible_custom_request_amount` (double, required, nullable) — Amount for flexible custom request balance tracking. The flexible custom extra amount request of the policy allowance.
- `part_time_prorated_entitlement_unit_amount` (double, optional, nullable) — The total prorated policy allowance entitlement amount if the worker is part-time.

### TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItemsPolicyAllowanceProration

Proration configuration for policy allowances

- `prorates_on_hire` (boolean, required) — Whether proration is applied on hire
- `prorates_on_termination` (boolean, required) — Whether proration is applied on termination
- `part_time_worker_treatment_type` (enum, required) — Type of treatment for part-time workers
  - Allowed values: `SAME_AS_FTE`, `PERCENTAGE_OF_FTE`, `BASED_ON_WORK_HOURS`, `BASED_ON_WORK_DAYS`, `CUSTOM_ENTITLEMENT`
- `part_time_worker_treatment_specific_amount` (double, required, nullable) — Specific amount for part-time worker treatment when the type is CUSTOM_ENTITLEMENT

### TimeOffsProfileHrisProfileIdPoliciesGetResponsesContentApplicationJsonSchemaPoliciesItemsTimeOffTypesItems

- `id` (string, optional) — Unique identifier of the time off type
- `name` (string, optional) — Name of the time off type
- `description` (string, optional, nullable) — Description of the time off type

## Examples

**Response**

```json
{
  "policies": [
    {
      "id": "c7f4986f-39a4-4f5d-9325-f37a8e9f5cdf",
      "name": "US PTO Policy",
      "created_at": "2023-01-01T00:00:00Z",
      "leave_type": "SHORT_TERM_LEAVE",
      "updated_at": "2023-01-15T12:30:45Z",
      "policy_type": {
        "id": "c7f4986f-39a4-4f5d-9325-f37a8e9f5cdf",
        "name": "Vacation"
      },
      "payment_type": "PAID",
      "tracking_unit": "YEAR",
      "policy_allowances": [
        {
          "id": "c7f4986f-39a4-4f5d-9325-f37a8e9f5cdf",
          "type": "BASE_ALLOWANCE",
          "accrual_type": "TIMEFRAME",
          "accrual_unit": "MONTH",
          "rollover_type": "CARRY_OVER",
          "entitlement_unit": "CALENDAR_DAY",
          "accrual_unit_amount": 1,
          "enable_bank_holidays": true,
          "balance_tracking_type": "FLEXIBLE_NO_LIMIT",
          "entitlement_start_date": "2023-01-01",
          "entitlement_start_type": "IMMEDIATELY",
          "entitlement_start_unit": "CALENDAR_DAY",
          "entitlement_unit_amount": 15,
          "accrual_application_type": "BEGIN_OF_CYCLE",
          "rollover_expiration_unit": "MONTH",
          "rollover_limit_unit_amount": 5,
          "entitlement_expiration_unit": "MONTH",
          "entitlement_start_unit_amount": 90,
          "rollover_expiration_unit_amount": 6,
          "entitlement_expiration_unit_amount": 3,
          "zero_out_negative_balances_on_rollover": true,
          "balance_tracking_flexible_custom_request_amount": 8,
          "part_time_prorated_entitlement_unit_amount": 7.5
        }
      ],
      "notice_period_unit": "BUSINESS_DAY",
      "request_start_type": "IMMEDIATELY",
      "request_start_unit": "BUSINESS_DAY",
      "overlap_request_type": "NOT_ALLOWED",
      "tracking_unit_amount": 1,
      "time_off_request_type": "HALF_DAY",
      "is_attachment_required": "REQUIRED",
      "is_description_required": true,
      "notice_period_unit_amount": 14,
      "request_start_unit_amount": 14,
      "policy_allowance_proration": {
        "prorates_on_hire": true,
        "prorates_on_termination": true,
        "part_time_worker_treatment_type": "SAME_AS_FTE",
        "part_time_worker_treatment_specific_amount": 10
      },
      "retrospective_request_type": "ALLOWED",
      "allow_to_edit_past_time_offs": false,
      "auto_approval_inactivity_time_unit": "CALENDAR_DAY",
      "auto_approval_inactivity_time_unit_amount": 3,
      "description": "Standard paid time off policy for US employees",
      "policy_type_id": "c7f4986f-39a4-4f5d-9325-f37a8e9f5cdf",
      "time_off_types": [
        {
          "id": "c7f4986f-39a4-4f5d-9325-f37a8e9f5cdf",
          "name": "Vacation",
          "description": "Annual vacation leave"
        }
      ],
      "tracking_cadence": "FIXED_DAY",
      "tracking_start_date": "2023-01-01"
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://api.letsdeel.com/rest/time_offs/profile/f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/policies"

querystring = {"policy_type_id":"f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b","policy_type_name":"Adoption leave"}

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/time_offs/profile/f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/policies?policy_type_id=f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b&policy_type_name=Adoption+leave';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/time_offs/profile/f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/policies?policy_type_id=f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b&policy_type_name=Adoption+leave"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/time_offs/profile/f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/policies?policy_type_id=f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b&policy_type_name=Adoption+leave")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.letsdeel.com/rest/time_offs/profile/f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/policies?policy_type_id=f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b&policy_type_name=Adoption+leave")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.letsdeel.com/rest/time_offs/profile/f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/policies?policy_type_id=f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b&policy_type_name=Adoption+leave', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/time_offs/profile/f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/policies?policy_type_id=f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b&policy_type_name=Adoption+leave");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/time_offs/profile/f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/policies?policy_type_id=f7b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b&policy_type_name=Adoption+leave")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```