# Remote

> Work with your people on Remote: find employees and contractors, record and answer time off, check leave balances and public holidays, and approve or decline expenses.

App · Jobs & Hiring · 20 actions. Web page: https://docs.lodol.com/docs/integrations/remote

## Actions

### Approve time off

Approve a time off request an employee made in Remote. Only requests waiting for approval (status Requested) can be approved.

**Inputs**

- Time off (`timeoff_id`, text, required): The time off request. Use one from an earlier step or List time off.
- Approver (`approver_id`, text): The company manager the approval is recorded under. Leave it empty for the admin who made the API token.

**Outputs**

- `approved_at` (text): When it was approved (ISO 8601).
- `approver_id` (text): The user id of whoever approved it.
- `automatic` (true/false): True when Remote made it (e.g. a public holiday).
- `cancel_reason` (text): Why it was cancelled.
- `cancelled_at` (text): When it was cancelled.
- `employment_id` (text): The employment it belongs to.
- `end_date` (text): The last day (YYYY-MM-DD).
- `id` (text): The time off's id.
- `leave_policy` (object): The leave policy it is booked against.
- `leave_policy_variant_id` (text): The leave policy's id.
- `notes` (text): Notes on it.
- `start_date` (text): The first day (YYYY-MM-DD).
- `status` (text): requested, approved, taken, declined, cancelled or cancel_requested.
- `timeoff_days` (list): Each day, with the time taken that day.
- `timeoff_type` (text): The kind of leave, e.g. paid_time_off, sick_leave.
- `timezone` (text): The time zone the dates are in.
- `total_minutes` (number): The total time off, in minutes.

**Example output**

```json
{
  "approved_at": "2026-09-28T10:00:00Z",
  "approver_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
  "automatic": false,
  "cancel_reason": null,
  "cancelled_at": null,
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "end_date": "2026-10-05",
  "id": "9d8c7b6a-5f4e-4d3c-b2a1-0f9e8d7c6b5a",
  "leave_policy": {
    "leave_policy_variant_slug": "paid-time-off",
    "leave_type": "paid_time_off",
    "name": "Paid time off"
  },
  "leave_policy_variant_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
  "notes": "Dentist",
  "start_date": "2026-10-05",
  "status": "approved",
  "timeoff_days": [
    {
      "day": "2026-10-05",
      "hours": 8,
      "minutes": 480
    }
  ],
  "timeoff_type": "paid_time_off",
  "timezone": "Etc/UTC",
  "total_minutes": 480
}
```

### Cancel time off

Cancel time off that was already approved.

**Inputs**

- Time off (`timeoff_id`, text, required): The approved time off. Use one from an earlier step or List time off.
- Reason (`cancel_reason`, text, required): Why it is cancelled.

**Outputs**

- `approved_at` (text): When it was approved (ISO 8601).
- `approver_id` (text): The user id of whoever approved it.
- `automatic` (true/false): True when Remote made it (e.g. a public holiday).
- `cancel_reason` (text): Why it was cancelled.
- `cancelled_at` (text): When it was cancelled.
- `employment_id` (text): The employment it belongs to.
- `end_date` (text): The last day (YYYY-MM-DD).
- `id` (text): The time off's id.
- `leave_policy` (object): The leave policy it is booked against.
- `leave_policy_variant_id` (text): The leave policy's id.
- `notes` (text): Notes on it.
- `start_date` (text): The first day (YYYY-MM-DD).
- `status` (text): requested, approved, taken, declined, cancelled or cancel_requested.
- `timeoff_days` (list): Each day, with the time taken that day.
- `timeoff_type` (text): The kind of leave, e.g. paid_time_off, sick_leave.
- `timezone` (text): The time zone the dates are in.
- `total_minutes` (number): The total time off, in minutes.

**Example output**

```json
{
  "approved_at": "2026-09-28T10:00:00Z",
  "approver_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
  "automatic": false,
  "cancel_reason": "Plans changed",
  "cancelled_at": "2026-09-29T09:00:00",
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "end_date": "2026-10-05",
  "id": "9d8c7b6a-5f4e-4d3c-b2a1-0f9e8d7c6b5a",
  "leave_policy": {
    "leave_policy_variant_slug": "paid-time-off",
    "leave_type": "paid_time_off",
    "name": "Paid time off"
  },
  "leave_policy_variant_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
  "notes": "Dentist",
  "start_date": "2026-10-05",
  "status": "cancelled",
  "timeoff_days": [
    {
      "day": "2026-10-05",
      "hours": 8,
      "minutes": 480
    }
  ],
  "timeoff_type": "paid_time_off",
  "timezone": "Etc/UTC",
  "total_minutes": 480
}
```

### Create department

Add a department to the company. Remote allows two departments with the same name, and departments can't be renamed or deleted through the API, so check List departments first.

**Inputs**

- Name (`name`, text, required): The department's name, up to 255 characters.

**Outputs**

- `company_id` (text): The company's id.
- `id` (text): The department's id.
- `name` (text): The department's name.

**Example output**

```json
{
  "company_id": "0c8b9a3e-7d1f-4b2a-9e6c-5f4d3c2b1a00",
  "id": "2e4f6a8c-0b1d-4c3e-9f5a-7b9d1e3f5a7c",
  "name": "Engineering"
}
```

### Decline time off

Decline a time off request an employee made in Remote. Only requests waiting for approval (status Requested) can be declined.

**Inputs**

- Time off (`timeoff_id`, text, required): The time off request. Use one from an earlier step or List time off.
- Reason (`decline_reason`, text): Why, shown to the employee.

**Outputs**

- `approved_at` (text): When it was approved (ISO 8601).
- `approver_id` (text): The user id of whoever approved it.
- `automatic` (true/false): True when Remote made it (e.g. a public holiday).
- `cancel_reason` (text): Why it was cancelled.
- `cancelled_at` (text): When it was cancelled.
- `employment_id` (text): The employment it belongs to.
- `end_date` (text): The last day (YYYY-MM-DD).
- `id` (text): The time off's id.
- `leave_policy` (object): The leave policy it is booked against.
- `leave_policy_variant_id` (text): The leave policy's id.
- `notes` (text): Notes on it.
- `start_date` (text): The first day (YYYY-MM-DD).
- `status` (text): requested, approved, taken, declined, cancelled or cancel_requested.
- `timeoff_days` (list): Each day, with the time taken that day.
- `timeoff_type` (text): The kind of leave, e.g. paid_time_off, sick_leave.
- `timezone` (text): The time zone the dates are in.
- `total_minutes` (number): The total time off, in minutes.

**Example output**

```json
{
  "approved_at": "2026-09-28T10:00:00Z",
  "approver_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
  "automatic": false,
  "cancel_reason": null,
  "cancelled_at": null,
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "end_date": "2026-10-05",
  "id": "9d8c7b6a-5f4e-4d3c-b2a1-0f9e8d7c6b5a",
  "leave_policy": {
    "leave_policy_variant_slug": "paid-time-off",
    "leave_type": "paid_time_off",
    "name": "Paid time off"
  },
  "leave_policy_variant_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
  "notes": "Dentist",
  "start_date": "2026-10-05",
  "status": "declined",
  "timeoff_days": [
    {
      "day": "2026-10-05",
      "hours": 8,
      "minutes": 480
    }
  ],
  "timeoff_type": "paid_time_off",
  "timezone": "Etc/UTC",
  "total_minutes": 480
}
```

### Get connected account

Get the company this connection belongs to and the admin whose API token it uses, and whether it is a sandbox.

**Inputs**: None.

**Outputs**

- `company` (object): The company the token belongs to.
- `company_id` (text): The company's id.
- `environment` (text): sandbox for a sandbox token, live otherwise.
- `user` (object): The admin who generated the token.
- `user_id` (text): The token owner's user id.

**Example output**

```json
{
  "company": {
    "id": "0c8b9a3e-7d1f-4b2a-9e6c-5f4d3c2b1a00",
    "name": "Acme Ltd"
  },
  "company_id": "0c8b9a3e-7d1f-4b2a-9e6c-5f4d3c2b1a00",
  "environment": "live",
  "user": {
    "email": "jo@example.com",
    "id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
    "name": "Jo Admin",
    "status": "active"
  },
  "user_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e"
}
```

### Get employment

Get one person's employment in full: job, manager, start date, status, and the personal, address and contract details Remote holds (which fields there are depends on the country).

**Inputs**

- Employee (`employment_id`, text, required): The person. Pick one, or use an employment id from an earlier step or a Remote link.
- Include files (`include_files`, true/false): Also list their files (contracts, IDs, ...). Default: `false`.

**Outputs**

- `address_details` (object): Home address; fields vary by country.
- `company_id` (text): The company's id.
- `contract_details` (object): Contract terms; fields vary by country.
- `country` (object): The country they work in.
- `created_at` (text): When the employment was created (ISO 8601).
- `department` (object): Their department.
- `department_id` (text): Their department's id.
- `employment_lifecycle_stage` (text): e.g. onboarded, contract_signing.
- `employment_model` (text): eor, peo or global_payroll.
- `external_id` (text): Your own id for them, if set.
- `full_name` (text): The person's name.
- `id` (text): The employment's id, which the time off and leave actions take.
- `job_title` (text): Their job title.
- `login_email` (text): The email address they sign in to Remote with.
- `manager` (text): Their manager's name.
- `manager_email` (text): Their manager's email address.
- `manager_employment_id` (text): Their manager's employment id.
- `personal_details` (object): Personal details; fields vary by country.
- `personal_email` (text): Their personal email address.
- `probation_period_end_date` (text): When their probation ends.
- `provisional_start_date` (text): Their planned start date.
- `seniority_date` (text): The date their seniority counts from.
- `short_id` (text): Remote's short reference for them.
- `status` (text): e.g. active, invited, offboarding, archived.
- `termination_date` (text): Their last day, once offboarded.
- `type` (text): employee, contractor, direct_employee or global_payroll_employee.
- `updated_at` (text): When it last changed (ISO 8601).
- `user_status` (text): Their Remote account: active, invited, inactive, ...
- `work_email` (text): Their work email address.

**Example output**

```json
{
  "address_details": {},
  "company_id": "0c8b9a3e-7d1f-4b2a-9e6c-5f4d3c2b1a00",
  "contract_details": {},
  "country": {
    "code": "PRT",
    "name": "Portugal"
  },
  "created_at": "2025-01-10T09:00:00Z",
  "department": null,
  "department_id": null,
  "employment_lifecycle_stage": "onboarded",
  "employment_model": "eor",
  "external_id": null,
  "full_name": "Ana Silva",
  "id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "job_title": "Senior Engineer",
  "login_email": "ana.silva@example.com",
  "manager": "Jo Admin",
  "manager_email": "jo@example.com",
  "manager_employment_id": null,
  "personal_details": {},
  "personal_email": "ana@example.org",
  "probation_period_end_date": "2025-08-03",
  "provisional_start_date": "2025-02-03",
  "seniority_date": "2025-02-03",
  "short_id": "AB12CD",
  "status": "active",
  "termination_date": null,
  "type": "employee",
  "updated_at": "2026-09-01T12:00:00Z",
  "user_status": "active",
  "work_email": "ana.silva@example.com"
}
```

### Get expense

Get one expense: who, what for, how much and its status.

**Inputs**

- Expense (`expense_id`, text, required): The expense. Use one from an earlier step or List expenses.

**Outputs**

- `amount` (number): The amount, in cents.
- `amount_decimal` (number): The amount in the currency's main unit, e.g. 12.5.
- `category` (text): The legacy category, kept for old expenses.
- `converted_amount` (number): The amount in the company's billing currency, in cents.
- `converted_amount_decimal` (number): The amount in the billing currency's main unit.
- `converted_currency` (object): The currency.
- `currency` (object): The currency.
- `employment_id` (text): The employment it belongs to.
- `expense_category` (object): Its category.
- `expense_date` (text): When it was spent (YYYY-MM-DD).
- `id` (text): The expense's id.
- `invoice_period` (text): The payroll period it is paid in (YYYY-MM).
- `notes` (text): Notes.
- `reason` (text): Why it was declined.
- `reviewed_at` (text): When it was reviewed.
- `reviewer` (object): Who reviewed it.
- `status` (text): pending, approved, declined, processing, reimbursed, canceled, draft or archived.
- `tax_amount` (number): The tax part, in cents.
- `tax_amount_decimal` (number): The tax part in the currency's main unit.
- `title` (text): What it was for.

**Example output**

```json
{
  "amount": 4250,
  "amount_decimal": 42.5,
  "category": null,
  "converted_amount": 4600,
  "converted_amount_decimal": 46.0,
  "converted_currency": {
    "code": "USD",
    "name": "US Dollar",
    "symbol": "$"
  },
  "currency": {
    "code": "EUR",
    "name": "Euro",
    "symbol": "\u20ac"
  },
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "expense_category": {
    "code": "travel.transport",
    "slug": "transport",
    "title": "Transport"
  },
  "expense_date": "2026-09-20",
  "id": "e1d2c3b4-a5f6-4e7d-8c9b-0a1b2c3d4e5f",
  "invoice_period": null,
  "notes": null,
  "reason": null,
  "reviewed_at": null,
  "reviewer": null,
  "status": "pending",
  "tax_amount": 0,
  "tax_amount_decimal": 0.0,
  "title": "Train to client office"
}
```

### Get leave balances

Get how much leave an employee has left, has booked and has taken, for each of their leave policies.

**Inputs**

- Employee (`employment_id`, text, required): The employee. Pick one, or use an employment id from an earlier step.

**Outputs**

- `balances` (list): The balances, one per policy.
- `count` (number): How many balances, one per policy came back.
- `employment_id` (text): The employment.

**Example output**

```json
{
  "balances": [
    {
      "annual_balance": {
        "days": 18,
        "hours": 0,
        "type": "limited"
      },
      "annual_entitlement": {
        "days": 22,
        "hours": 0,
        "type": "limited"
      },
      "balance": {
        "days": 18,
        "hours": 0,
        "type": "limited"
      },
      "booked": {
        "days": 4,
        "hours": 0,
        "type": "limited"
      },
      "current_entitlement": {
        "days": 22,
        "hours": 0,
        "type": "limited"
      },
      "leave_policy": {
        "leave_policy_variant_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
        "leave_type": "paid_time_off",
        "name": "Paid time off",
        "unit": "days"
      },
      "pending_approval": {
        "days": 0,
        "hours": 0,
        "type": "limited"
      },
      "taken": {
        "days": 3,
        "hours": 0,
        "type": "limited"
      },
      "upcoming_approved": {
        "days": 1,
        "hours": 0,
        "type": "limited"
      },
      "upcoming_requested": {
        "days": 0,
        "hours": 0,
        "type": "limited"
      },
      "used": {
        "days": 4,
        "hours": 0,
        "type": "limited"
      },
      "working_hours_per_day": 8
    },
    {
      "annual_balance": {
        "type": "unlimited"
      },
      "annual_entitlement": {
        "type": "unlimited"
      },
      "balance": {
        "type": "unlimited"
      },
      "booked": {
        "days": 0,
        "hours": 0,
        "type": "limited"
      },
      "current_entitlement": {
        "type": "unlimited"
      },
      "leave_policy": {
        "leave_policy_variant_id": "sick_leave",
        "leave_type": "sick_leave",
        "name": "Sick leave",
        "unit": "unlimited"
      },
      "pending_approval": {
        "days": 0,
        "hours": 0,
        "type": "limited"
      },
      "taken": {
        "days": 0,
        "hours": 0,
        "type": "limited"
      },
      "upcoming_approved": {
        "days": 0,
        "hours": 0,
        "type": "limited"
      },
      "upcoming_requested": {
        "days": 0,
        "hours": 0,
        "type": "limited"
      },
      "used": {
        "days": 0,
        "hours": 0,
        "type": "limited"
      },
      "working_hours_per_day": 8
    }
  ],
  "count": 2,
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8"
}
```

### Get time off

Get one time off: who, when, what kind and its status.

**Inputs**

- Time off (`timeoff_id`, text, required): The time off. Use one from an earlier step or List time off.

**Outputs**

- `approved_at` (text): When it was approved (ISO 8601).
- `approver_id` (text): The user id of whoever approved it.
- `automatic` (true/false): True when Remote made it (e.g. a public holiday).
- `cancel_reason` (text): Why it was cancelled.
- `cancelled_at` (text): When it was cancelled.
- `employment_id` (text): The employment it belongs to.
- `end_date` (text): The last day (YYYY-MM-DD).
- `id` (text): The time off's id.
- `leave_policy` (object): The leave policy it is booked against.
- `leave_policy_variant_id` (text): The leave policy's id.
- `notes` (text): Notes on it.
- `start_date` (text): The first day (YYYY-MM-DD).
- `status` (text): requested, approved, taken, declined, cancelled or cancel_requested.
- `timeoff_days` (list): Each day, with the time taken that day.
- `timeoff_type` (text): The kind of leave, e.g. paid_time_off, sick_leave.
- `timezone` (text): The time zone the dates are in.
- `total_minutes` (number): The total time off, in minutes.

**Example output**

```json
{
  "approved_at": "2026-09-28T10:00:00Z",
  "approver_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
  "automatic": false,
  "cancel_reason": null,
  "cancelled_at": null,
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "end_date": "2026-10-05",
  "id": "9d8c7b6a-5f4e-4d3c-b2a1-0f9e8d7c6b5a",
  "leave_policy": {
    "leave_policy_variant_slug": "paid-time-off",
    "leave_type": "paid_time_off",
    "name": "Paid time off"
  },
  "leave_policy_variant_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
  "notes": "Dentist",
  "start_date": "2026-10-05",
  "status": "approved",
  "timeoff_days": [
    {
      "day": "2026-10-05",
      "hours": 8,
      "minutes": 480
    }
  ],
  "timeoff_type": "paid_time_off",
  "timezone": "Etc/UTC",
  "total_minutes": 480
}
```

### List company managers

Get everyone who manages the company in Remote (owners, admins and managers) with their user ids, which approvals are recorded under.

**Inputs**: None.

**Outputs**

- `count` (number): How many managers came back.
- `managers` (list): The managers.

**Example output**

```json
{
  "count": 1,
  "managers": [
    {
      "company_id": "0c8b9a3e-7d1f-4b2a-9e6c-5f4d3c2b1a00",
      "role": "admin",
      "user_email": "jo@example.com",
      "user_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
      "user_name": "Jo Admin"
    }
  ]
}
```

### List countries

Get every country Remote works in, with its three-letter code (what List country holidays takes), region and states or provinces.

**Inputs**: None.

**Outputs**

- `count` (number): How many countries came back.
- `countries` (list): The countries.

**Example output**

```json
{
  "count": 1,
  "countries": [
    {
      "alpha_2_code": "PT",
      "code": "PRT",
      "country_subdivisions": [],
      "eor_onboarding": true,
      "name": "Portugal",
      "region": "Europe",
      "subregion": "Southern Europe"
    }
  ]
}
```

### List country holidays

Get a country's public holidays in a year, optionally for one state or province.

**Inputs**

- Country (`country_code`, text, required): The country. Pick one, or give its three-letter code, e.g. PRT or USA.
- Year (`year`, number): The year. Leave it empty for this year. From 1900 to 2100.
- State or province (`country_subdivision_code`, text): Only for this state or province, by its ISO 3166-2 code, e.g. US-CA. List countries gives the codes.

**Outputs**

- `count` (number): How many holidays came back.
- `country_code` (text): The country's three-letter code.
- `holidays` (list): The holidays.
- `year` (number): The year.

**Example output**

```json
{
  "count": 1,
  "country_code": "PRT",
  "holidays": [
    {
      "day": "2026-12-25",
      "name": "Christmas Day",
      "note": null,
      "observed_day": null
    }
  ],
  "year": 2026
}
```

### List departments

Get every department in the company.

**Inputs**: None.

**Outputs**

- `count` (number): How many departments came back.
- `departments` (list): The departments.

**Example output**

```json
{
  "count": 1,
  "departments": [
    {
      "company_id": "0c8b9a3e-7d1f-4b2a-9e6c-5f4d3c2b1a00",
      "id": "2e4f6a8c-0b1d-4c3e-9f5a-7b9d1e3f5a7c",
      "name": "Engineering"
    }
  ]
}
```

### List employments

Find the company's people (employees and contractors), by name, email, status, type or model, a page at a time.

**Inputs**

- Name (`name`, text): Only people whose name contains these words.
- Email (`email`, text): Only the person with this email.
- Statuses (`statuses`, list): Only people in these statuses. Leave empty for all. One or more of: `active`, `created`, `pre_hire` (Pre-hire), `created_awaiting_reserve` (Created, awaiting reserve), `created_reserve_paid` (Created, reserve paid), `initiated`, `invited`, `pending`, `review` (In review), `job_title_review` (Job title review), and 5 more.
- Type (`employment_type`, text): Only employees, or only contractors, and so on. One of: `employee`, `contractor`, `direct_employee` (Direct employee), `global_payroll_employee` (Global Payroll employee).
- Employment model (`employment_model`, text): Only people employed this way. One of: `eor` (Employer of Record (EOR)), `peo`, `global_payroll` (Global Payroll).
- Page (`page`, number): Which page of people to get. Page 1 is the first. At least 1. Default: `1`.
- Per page (`page_size`, number): How many people per page, up to 100. From 1 to 100. Default: `20`.

**Outputs**

- `count` (number): How many employments came back.
- `current_page` (number): This page's number.
- `employments` (list): The employments.
- `total_count` (number): How many employments match, on every page.
- `total_pages` (number): How many pages there are.

**Example output**

```json
{
  "count": 1,
  "current_page": 1,
  "employments": [
    {
      "country": {
        "code": "PRT",
        "name": "Portugal"
      },
      "department": null,
      "department_id": null,
      "employment_lifecycle_stage": "onboarded",
      "employment_model": "eor",
      "external_id": null,
      "full_name": "Ana Silva",
      "id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
      "job_title": "Senior Engineer",
      "login_email": "ana.silva@example.com",
      "personal_email": "ana@example.org",
      "short_id": "AB12CD",
      "status": "active",
      "type": "employee",
      "work_email": "ana.silva@example.com"
    }
  ],
  "total_count": 1,
  "total_pages": 1
}
```

### List expenses

Find expenses employees submitted, newest first, optionally only those in one status (e.g. Pending, to review) or one person's. Amounts are in cents, with a decimal copy for display.

**Inputs**

- Status (`status`, text): Only in this status. One of: `pending`, `approved`, `declined`, `processing`, `reimbursed`, `canceled`, `draft`, `archived`.
- Employee (`employment_id`, text): Only this person's expenses.
- Maximum expenses (`limit`, number): How many expenses to get, up to 500. From 1 to 500. Default: `50`.

**Outputs**

- `count` (number): How many expenses came back.
- `expenses` (list): The expenses.
- `has_more` (true/false): True when more expenses match than came back.
- `total_count` (number): How many expenses the company has, before filtering.

**Example output**

```json
{
  "count": 1,
  "expenses": [
    {
      "amount": 4250,
      "amount_decimal": 42.5,
      "category": null,
      "converted_amount": 4600,
      "converted_amount_decimal": 46.0,
      "converted_currency": {
        "code": "USD",
        "name": "US Dollar",
        "symbol": "$"
      },
      "currency": {
        "code": "EUR",
        "name": "Euro",
        "symbol": "\u20ac"
      },
      "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
      "expense_category": {
        "code": "travel.transport",
        "slug": "transport",
        "title": "Transport"
      },
      "expense_date": "2026-09-20",
      "id": "e1d2c3b4-a5f6-4e7d-8c9b-0a1b2c3d4e5f",
      "invoice_period": null,
      "notes": null,
      "reason": null,
      "reviewed_at": null,
      "reviewer": null,
      "status": "pending",
      "tax_amount": 0,
      "tax_amount_decimal": 0.0,
      "title": "Train to client office"
    }
  ],
  "has_more": false,
  "total_count": 1
}
```

### List leave policies

Get the leave policies an employee can book time off against, with the ids Record approved time off takes.

**Inputs**

- Employee (`employment_id`, text, required): The employee. Pick one, or use an employment id from an earlier step.

**Outputs**

- `count` (number): How many leave policies came back.
- `employment_id` (text): The employment.
- `leave_policies` (list): The leave policies.

**Example output**

```json
{
  "count": 1,
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "leave_policies": [
    {
      "custom": false,
      "leave_policy_variant_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
      "name": "Paid time off",
      "uses_accrual_as_balance": false
    }
  ]
}
```

### List time off

Find time off across the company, or one person's, by status, type or dates. With both dates, you get time off that overlaps them.

**Inputs**

- Employee (`employment_id`, text): Only this person's time off.
- Status (`status`, text): Only in this status. One of: `requested`, `approved`, `taken`, `declined`, `cancelled`, `cancel_requested` (Cancellation requested).
- Type (`timeoff_type`, text): Only of this type. One of: `time_off` (Time off), `paid_time_off` (Paid time off), `sick_leave` (Sick leave), `public_holiday` (Public holiday), `unpaid_leave` (Unpaid leave), `extended_leave` (Extended leave), `in_lieu_time` (In lieu time), `maternity_leave` (Maternity leave), `paternity_leave` (Paternity leave), `parental_leave` (Parental leave), and 38 more.
- From (`start_date`, date): From this day.
- To (`end_date`, date): Up to this day.
- Sort by (`sort_by`, text): What to sort by. One of: `timeoff_type` (Type), `status`.
- Order (`order`, text): Sort order. One of: `desc` (Newest first), `asc` (Oldest first).
- Page (`page`, number): Which page of time off records to get. Page 1 is the first. At least 1. Default: `1`.
- Per page (`page_size`, number): How many time off records per page, up to 100. From 1 to 100. Default: `20`.

**Outputs**

- `count` (number): How many time off records came back.
- `current_page` (number): This page's number.
- `timeoffs` (list): The time off records.
- `total_count` (number): How many time off records match, on every page.
- `total_pages` (number): How many pages there are.

**Example output**

```json
{
  "count": 1,
  "current_page": 1,
  "timeoffs": [
    {
      "approved_at": "2026-09-28T10:00:00Z",
      "approver_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
      "automatic": false,
      "cancel_reason": null,
      "cancelled_at": null,
      "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
      "end_date": "2026-10-05",
      "id": "9d8c7b6a-5f4e-4d3c-b2a1-0f9e8d7c6b5a",
      "leave_policy": {
        "leave_policy_variant_slug": "paid-time-off",
        "leave_type": "paid_time_off",
        "name": "Paid time off"
      },
      "leave_policy_variant_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
      "notes": "Dentist",
      "start_date": "2026-10-05",
      "status": "approved",
      "timeoff_days": [
        {
          "day": "2026-10-05",
          "hours": 8,
          "minutes": 480
        }
      ],
      "timeoff_type": "paid_time_off",
      "timezone": "Etc/UTC",
      "total_minutes": 480
    }
  ],
  "total_count": 1,
  "total_pages": 1
}
```

### List time off types

Get the kinds of leave Remote knows, for employees or contractors, with what each is for.

**Inputs**

- For (`worker_type`, text): Whose types. One of: `full_time` (Employees), `contractor`. Default: `full_time`.

**Outputs**

- `count` (number): How many types came back.
- `timeoff_types` (list): The types.
- `worker_type` (text): full_time or contractor.

**Example output**

```json
{
  "count": 1,
  "timeoff_types": [
    {
      "description": "Time off when ill.",
      "name": "sick_leave"
    }
  ],
  "worker_type": "full_time"
}
```

### Record approved time off

Book time off for an employee that is already approved, e.g. leave agreed outside Remote. Remote's API can't create a time off request for someone to approve. Book it against one of the employee's leave policies, or by type for employees on older plans.

**Inputs**

- Employee (`employment_id`, text, required): The employee. Pick one, or use an employment id from an earlier step.
- First day (`start_date`, date, required): The first day off.
- Last day (`end_date`, date): The last day off. Leave it empty for a single day.
- Leave policy (`leave_policy`, text): The leave policy to book against. Pick one of the employee's, or leave it empty and pick a type.
- Type (`timeoff_type`, text): The kind of leave, for employees without leave policies. Leave it empty when you picked a leave policy. One of: `time_off` (Time off), `paid_time_off` (Paid time off), `sick_leave` (Sick leave), `public_holiday` (Public holiday), `unpaid_leave` (Unpaid leave), `extended_leave` (Extended leave), `in_lieu_time` (In lieu time), `maternity_leave` (Maternity leave), `paternity_leave` (Paternity leave), `parental_leave` (Parental leave), and 8 more.
- Hours per day (`hours_per_day`, number): Hours off on each day, e.g. 8 for full days or 4 for half days. From 1 to 24. Default: `8`.
- Skip weekends (`skip_weekends`, true/false): Count Saturdays and Sundays as zero hours. Default: `true`.
- Time zone (`timezone`, text): The time zone the days are in, e.g. Europe/Lisbon. Default: `Etc/UTC`.
- Notes (`notes`, text): A note on the time off.
- Approver (`approver_id`, text): The company manager the approval is recorded under. Leave it empty for the admin who made the API token.
- Approved at (`approved_at`, date and time): When it was approved. Leave it empty for now.

**Outputs**

- `approved_at` (text): When it was approved (ISO 8601).
- `approver_id` (text): The user id of whoever approved it.
- `automatic` (true/false): True when Remote made it (e.g. a public holiday).
- `cancel_reason` (text): Why it was cancelled.
- `cancelled_at` (text): When it was cancelled.
- `employment_id` (text): The employment it belongs to.
- `end_date` (text): The last day (YYYY-MM-DD).
- `id` (text): The time off's id.
- `leave_policy` (object): The leave policy it is booked against.
- `leave_policy_variant_id` (text): The leave policy's id.
- `notes` (text): Notes on it.
- `start_date` (text): The first day (YYYY-MM-DD).
- `status` (text): requested, approved, taken, declined, cancelled or cancel_requested.
- `timeoff_days` (list): Each day, with the time taken that day.
- `timeoff_type` (text): The kind of leave, e.g. paid_time_off, sick_leave.
- `timezone` (text): The time zone the dates are in.
- `total_minutes` (number): The total time off, in minutes.

**Example output**

```json
{
  "approved_at": "2026-09-28T10:00:00Z",
  "approver_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
  "automatic": false,
  "cancel_reason": null,
  "cancelled_at": null,
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "end_date": "2026-10-05",
  "id": "9d8c7b6a-5f4e-4d3c-b2a1-0f9e8d7c6b5a",
  "leave_policy": {
    "leave_policy_variant_slug": "paid-time-off",
    "leave_type": "paid_time_off",
    "name": "Paid time off"
  },
  "leave_policy_variant_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
  "notes": "Dentist",
  "start_date": "2026-10-05",
  "status": "approved",
  "timeoff_days": [
    {
      "day": "2026-10-05",
      "hours": 8,
      "minutes": 480
    }
  ],
  "timeoff_type": "paid_time_off",
  "timezone": "Etc/UTC",
  "total_minutes": 480
}
```

### Review expense

Approve or decline an expense an employee submitted. Only pending expenses can be reviewed; declining needs a reason, which the employee sees.

**Inputs**

- Expense (`expense_id`, text, required): The pending expense. Use one from an earlier step or List expenses.
- Decision (`decision`, text, required): Approve or decline it. One of: `approved` (Approve), `declined` (Decline).
- Reason (`reason`, text): Why it is declined. Required when declining.

**Outputs**

- `amount` (number): The amount, in cents.
- `amount_decimal` (number): The amount in the currency's main unit, e.g. 12.5.
- `category` (text): The legacy category, kept for old expenses.
- `converted_amount` (number): The amount in the company's billing currency, in cents.
- `converted_amount_decimal` (number): The amount in the billing currency's main unit.
- `converted_currency` (object): The currency.
- `currency` (object): The currency.
- `employment_id` (text): The employment it belongs to.
- `expense_category` (object): Its category.
- `expense_date` (text): When it was spent (YYYY-MM-DD).
- `id` (text): The expense's id.
- `invoice_period` (text): The payroll period it is paid in (YYYY-MM).
- `notes` (text): Notes.
- `reason` (text): Why it was declined.
- `reviewed_at` (text): When it was reviewed.
- `reviewer` (object): Who reviewed it.
- `status` (text): pending, approved, declined, processing, reimbursed, canceled, draft or archived.
- `tax_amount` (number): The tax part, in cents.
- `tax_amount_decimal` (number): The tax part in the currency's main unit.
- `title` (text): What it was for.

**Example output**

```json
{
  "amount": 4250,
  "amount_decimal": 42.5,
  "category": null,
  "converted_amount": 4600,
  "converted_amount_decimal": 46.0,
  "converted_currency": {
    "code": "USD",
    "name": "US Dollar",
    "symbol": "$"
  },
  "currency": {
    "code": "EUR",
    "name": "Euro",
    "symbol": "\u20ac"
  },
  "employment_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
  "expense_category": {
    "code": "travel.transport",
    "slug": "transport",
    "title": "Transport"
  },
  "expense_date": "2026-09-20",
  "id": "e1d2c3b4-a5f6-4e7d-8c9b-0a1b2c3d4e5f",
  "invoice_period": null,
  "notes": null,
  "reason": null,
  "reviewed_at": "2026-09-28",
  "reviewer": {
    "user_email": "jo@example.com",
    "user_id": "7b2d4f6a-1c3e-4a5b-8d9f-0e1a2b3c4d5e",
    "user_name": "Jo Admin"
  },
  "status": "approved",
  "tax_amount": 0,
  "tax_amount_decimal": 0.0,
  "title": "Train to client office"
}
```
