> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corsair.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# API

> API reference for Workable: every `workable.api.*` operation with input and output types.

Every `workable.api.*` operation is listed below with parameter shapes and return types from the plugin Zod schemas.

> [!NOTE]
>
> **New to Corsair?** See [API access](https://docs.corsair.dev/concepts/api.md), [authentication](https://docs.corsair.dev/concepts/auth.md), and [error handling](https://docs.corsair.dev/concepts/error-handling).

## Accounts

### get

`accounts.get`

Get account metadata by subdomain

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.accounts.get({ subdomain: 'acme' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `subdomain` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `name` | `string` | No | — |
| `subdomain` | `string` | No | — |
| `description` | `string` | No | — |
| `summary` | `string` | No | — |
| `website_url` | `string` | No | — |

***

### list

`accounts.list`

List all Workable accounts accessible to the authenticated token

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.accounts.list({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `accounts` | `object[]` | Yes | — |

> [accordion] accounts full type
>
> ```ts theme={null}
> {
>   id?: string,
>   name?: string | null,
>   subdomain?: string | null,
>   description?: string | null,
>   summary?: string | null,
>   website_url?: string | null
> }[]
> ```

***

## Candidates

### list

`candidates.list`

List candidates across all jobs

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.candidates.list({ shortcode: 'GROOV003', stage: 'interview', limit: 50 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `email` | `string` | No | — |
| `shortcode` | `string` | No | — |
| `stage` | `string` | No | — |
| `limit` | `number` | No | — |
| `since_id` | `string` | No | — |
| `max_id` | `string` | No | — |
| `created_after` | `string` | No | — |
| `updated_after` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `candidates` | `object[]` | Yes | — |
| `paging` | `object` | No | — |

> [accordion] candidates full type
>
> ```ts theme={null}
> {
>   id?: string,
>   name?: string | null,
>   firstname?: string | null,
>   lastname?: string | null,
>   email?: string | null,
>   job?: {
>     shortcode?: string | null,
>     title?: string | null
>   } | null,
>   stage?: string | null,
>   disqualified?: boolean | null,
>   created_at?: Date | null,
>   updated_at?: Date | null
> }[]
> ```

> [accordion] paging full type
>
> ```ts theme={null}
> {
>   next?: string
> }
> ```

***

## Custom Attributes

### list

`customAttributes.list`

List custom attributes configured on the account

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.customAttributes.list({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `custom_attributes` | `object[]` | Yes | — |

> [accordion] custom\_attributes full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Departments

### create

`departments.create`

Create a department

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.departments.create({ name: 'Engineering', parent_id: '3ff4d64b' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `name` | `string` | Yes | — |
| `parent_id` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `name` | `string` | No | — |
| `parent_id` | `string` | No | — |

***

### delete

`departments.delete`

Delete a department

**Risk:** `destructive`

```ts theme={null}
await corsair.workable.api.departments.delete({ id: '3ff4d641', force: true });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `force` | `boolean` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `message` | `string` | No | — |
| `success` | `boolean` | No | — |

***

### list

`departments.list`

List all departments

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.departments.list({});
```

**Input:** *empty object*

**Output:** `object[]`

> [accordion] Output full type
>
> ```ts theme={null}
> {
>   id?: string,
>   name?: string | null,
>   parent_id?: string | null
> }[]
> ```

***

### merge

`departments.merge`

Merge a department into another department

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.departments.merge({ id: '3ff4d641', target_department_id: '3ff4d64b', force: true });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `target_department_id` | `string` | Yes | — |
| `force` | `boolean` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `name` | `string` | No | — |
| `parent_id` | `string` | No | — |

***

### update

`departments.update`

Update a department's name or parent

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.departments.update({ id: '3ff4d641', name: 'Platform Engineering', parent_id: null });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `name` | `string` | Yes | — |
| `parent_id` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `name` | `string` | No | — |
| `parent_id` | `string` | No | — |

***

## Disqualification Reasons

### list

`disqualificationReasons.list`

List disqualification reasons

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.disqualificationReasons.list({});
```

**Input:** *empty object*

**Output:** `object[]`

> [accordion] Output full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Employee Fields

### list

`employeeFields.list`

List employee field definitions

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.employeeFields.list({});
```

**Input:** *empty object*

**Output:** `object[]`

> [accordion] Output full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Employees

### create

`employees.create`

Create an employee in draft or published state

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.employees.create({ state: 'draft', employee: { firstname: 'Jordan', lastname: 'Lee', work_email: 'jordan@acme.com', start_date: '2026-12-01T00:00:00.000Z' } });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `state` | `draft \| published` | Yes | — |
| `member_id` | `string` | No | — |
| `employee` | `object` | Yes | — |

> [accordion] employee full type
>
> ```ts theme={null}
> {
> }
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `firstname` | `string` | No | — |
| `lastname` | `string` | No | — |
| `email` | `string` | No | — |
| `state` | `draft \| published \| string` | No | — |
| `job_title` | `string` | No | — |
| `department_id` | `string` | No | — |
| `manager_id` | `string` | No | — |

***

### get

`employees.get`

Get a specific employee by ID

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.employees.get({ id: '375b' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `member_id` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `firstname` | `string` | No | — |
| `lastname` | `string` | No | — |
| `email` | `string` | No | — |
| `state` | `draft \| published \| string` | No | — |
| `job_title` | `string` | No | — |
| `department_id` | `string` | No | — |
| `manager_id` | `string` | No | — |

***

### list

`employees.list`

List/search employees

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.employees.list({ query: 'doe', limit: 50, offset: 0 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `limit` | `10 \| 20 \| 50 \| 100` | No | — |
| `offset` | `number` | No | — |
| `query` | `string` | No | — |
| `order_by` | `string` | No | — |
| `member_id` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `employees` | `object[]` | Yes | — |
| `total_count` | `number` | No | — |
| `totalCount` | `number` | No | — |

> [accordion] employees full type
>
> ```ts theme={null}
> {
>   id?: string,
>   firstname?: string | null,
>   lastname?: string | null,
>   email?: string | null,
>   state?: draft | published | string | null,
>   job_title?: string | null,
>   department_id?: string | null,
>   manager_id?: string | null
> }[]
> ```

***

### update

`employees.update`

Update an employee's details

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.employees.update({ id: '375b', employee: { job_title: 'Account Manager' } });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `member_id` | `string` | No | — |
| `employee` | `object` | Yes | — |

> [accordion] employee full type
>
> ```ts theme={null}
> {
> }
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `firstname` | `string` | No | — |
| `lastname` | `string` | No | — |
| `email` | `string` | No | — |
| `state` | `draft \| published \| string` | No | — |
| `job_title` | `string` | No | — |
| `department_id` | `string` | No | — |
| `manager_id` | `string` | No | — |

***

### uploadDocuments

`employees.uploadDocuments`

Upload documents for an employee

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.employees.uploadDocuments({ id: '375b', documents: [{ url: 'https://files.acme.com/signed/offer.pdf', name: 'Offer letter' }] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `member_id` | `string` | No | — |
| `documents` | `object[]` | Yes | — |

> [accordion] documents full type
>
> ```ts theme={null}
> {
>   url: string,
>   name: string
> }[]
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `message` | `string` | No | — |
| `success` | `boolean` | No | — |

***

## Events

### list

`events.list`

List scheduled events

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.events.list({ type: 'interview', start_date: '2026-11-01', limit: 50 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `type` | `call \| interview \| meeting` | No | — |
| `limit` | `number` | No | — |
| `start_date` | `string` | No | — |
| `end_date` | `string` | No | — |
| `candidate_id` | `string` | No | — |
| `shortcode` | `string` | No | — |
| `member_id` | `string` | No | — |
| `context` | `user \| team \| all` | No | — |
| `include_cancelled` | `boolean` | No | — |
| `since_id` | `string` | No | — |
| `max_id` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `events` | `object[]` | Yes | — |

> [accordion] events full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Jobs

### list

`jobs.list`

List jobs

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.jobs.list({ state: 'published', limit: 50 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `limit` | `number` | No | — |
| `state` | `draft \| published \| archived \| closed` | No | — |
| `created_after` | `string` | No | — |
| `updated_after` | `string` | No | — |
| `since_id` | `string` | No | — |
| `max_id` | `string` | No | — |
| `include_fields` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `jobs` | `object[]` | Yes | — |
| `paging` | `object` | No | — |

> [accordion] jobs full type
>
> ```ts theme={null}
> {
>   id?: string,
>   title?: string | null,
>   shortcode?: string | null,
>   state?: draft | published | closed | archived | string | null,
>   department?: string | null,
>   url?: string | null,
>   created_at?: Date | null,
>   updated_at?: Date | null
> }[]
> ```

> [accordion] paging full type
>
> ```ts theme={null}
> {
>   next?: string
> }
> ```

***

## Legal Entities

### list

`legalEntities.list`

List account legal entities

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.legalEntities.list({});
```

**Input:** *empty object*

**Output:** `object[]`

> [accordion] Output full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Members

### enable

`members.enable`

Reactivate a deactivated member

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.members.enable({ id: '3dae63e5' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `message` | `string` | No | — |
| `success` | `boolean` | No | — |

***

### invite

`members.invite`

Invite a new member by email

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.members.invite({ email: 'jordan@acme.com', roles: ['ats.simple'] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `email` | `string` | Yes | — |
| `roles` | `ats.admin \| ats.simple \| ats.reviewer \| hris.admin \| hris.employee \| hris.limited \| workable.superadmin[]` | Yes | — |
| `member_id` | `string` | No | — |
| `collaboration_rules` | `object[]` | No | — |

> [accordion] collaboration\_rules full type
>
> ```ts theme={null}
> {
> }[]
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `name` | `string` | No | — |
| `headline` | `string` | No | — |
| `email` | `string` | No | — |
| `roles` | `string[]` | No | — |
| `active` | `boolean` | No | — |
| `collaboration_rules` | `any[]` | No | — |

***

### list

`members.list`

List account members

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.members.list({ status: 'active', limit: 50 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `limit` | `number` | No | — |
| `since_id` | `string` | No | — |
| `max_id` | `string` | No | — |
| `role` | `string` | No | — |
| `shortcode` | `string` | No | — |
| `email` | `string` | No | — |
| `name` | `string` | No | — |
| `status` | `active \| inactive \| all` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `members` | `object[]` | Yes | — |

> [accordion] members full type
>
> ```ts theme={null}
> {
>   id?: string,
>   name?: string | null,
>   headline?: string | null,
>   email?: string | null,
>   roles?: string[] | null,
>   active?: boolean | null,
>   collaboration_rules?: any[]
> }[]
> ```

***

### update

`members.update`

Update a member's roles or collaboration rules

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.members.update({ id: '3dae63e5', roles: ['ats.admin'] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `roles` | `ats.admin \| ats.simple \| ats.reviewer \| hris.admin \| hris.employee \| hris.limited \| workable.superadmin[]` | Yes | — |
| `collaboration_rules` | `object[]` | No | — |

> [accordion] collaboration\_rules full type
>
> ```ts theme={null}
> {
> }[]
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | No | — |
| `name` | `string` | No | — |
| `headline` | `string` | No | — |
| `email` | `string` | No | — |
| `roles` | `string[]` | No | — |
| `active` | `boolean` | No | — |
| `collaboration_rules` | `any[]` | No | — |

***

## Permission Sets

### list

`permissionSets.list`

List permission sets

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.permissionSets.list({});
```

**Input:** *empty object*

**Output:** `object[]`

> [accordion] Output full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Public Jobs

### list

`publicJobs.list`

List an account's public job postings (no authentication required)

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.publicJobs.list({ subdomain: 'acme', details: true });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `subdomain` | `string` | No | — |
| `details` | `boolean` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `name` | `string` | No | — |
| `description` | `string` | No | — |
| `jobs` | `object[]` | No | — |

> [accordion] jobs full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Public Locations

### list

`publicLocations.list`

List the locations of an account's public jobs with per-country counts (no authentication required)

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.publicLocations.list({ subdomain: 'acme' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `subdomain` | `string` | No | — |

**Output:** `object[]`

> [accordion] Output full type
>
> ```ts theme={null}
> {
>   code?: string | null,
>   name?: string | null,
>   count?: number | null,
>   url?: string | null
> }[]
> ```

***

## Recruiters

### list

`recruiters.list`

List external recruiters

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.recruiters.list({});
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `shortcode` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `recruiters` | `object[]` | Yes | — |

> [accordion] recruiters full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Requisitions

### list

`requisitions.list`

List requisitions

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.requisitions.list({ limit: 50 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `limit` | `number` | No | — |
| `since_id` | `string` | No | — |
| `max_id` | `string` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `requisitions` | `object[]` | Yes | — |
| `paging` | `object` | No | — |

> [accordion] requisitions full type
>
> ```ts theme={null}
> {
> }[]
> ```

> [accordion] paging full type
>
> ```ts theme={null}
> {
>   next?: string
> }
> ```

***

## Stages

### list

`stages.list`

List recruitment pipeline stages

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.stages.list({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `stages` | `object[]` | Yes | — |

> [accordion] stages full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Subscriptions

### create

`subscriptions.create`

Subscribe to a candidate or employee webhook event

**Risk:** `write`

```ts theme={null}
await corsair.workable.api.subscriptions.create({ target: 'https://example.com/workable/webhooks', event: 'candidate_created' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `target` | `string` | Yes | — |
| `event` | `candidate_created \| candidate_moved \| employee_created \| employee_updated \| employee_published \| onboarding_completed \| timeoff_updated` | Yes | — |
| `args` | `object` | No | — |

> [accordion] args full type
>
> ```ts theme={null}
> {
>   account_id?: string,
>   job_shortcode?: string,
>   stage_slug?: string
> }
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `number \| string` | No | — |

***

### delete

`subscriptions.delete`

Delete a webhook subscription

**Risk:** `destructive`

```ts theme={null}
await corsair.workable.api.subscriptions.delete({ id: '42' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `message` | `string` | No | — |
| `success` | `boolean` | No | — |

***

### list

`subscriptions.list`

List webhook subscriptions

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.subscriptions.list({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `subscriptions` | `object[]` | Yes | — |

> [accordion] subscriptions full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Timeoff Balances

### list

`timeoffBalances.list`

List employee time-off balances

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.timeoffBalances.list({ employee_id: '375b' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `employee_id` | `string` | No | The employee whose balances to read. Required with an account token; a user token defaults to its own employee. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `balances` | `object[]` | Yes | — |

> [accordion] balances full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Timeoff Categories

### list

`timeoffCategories.list`

List time-off categories

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.timeoffCategories.list({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `categories` | `object[]` | Yes | — |

> [accordion] categories full type
>
> ```ts theme={null}
> {
> }[]
> ```

***

## Work Schedules

### list

`workSchedules.list`

List work schedules

**Risk:** `read`

```ts theme={null}
await corsair.workable.api.workSchedules.list({});
```

**Input:** *empty object*

**Output:** `object[]`

> [accordion] Output full type
>
> ```ts theme={null}
> {
> }[]
> ```

***


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.