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

# List Workforce Job Categories

> List the distinct employment categories used across the organization and its descendants

[← Own Workforce API](/api-reference/own-workforce/overview)

Return the distinct `employment_category` values that appear on the workforce contracts of the header organization **and its descendants**.

<Note>
  Employment category is free text, captured exactly as it was imported. Expect the same role to appear under several spellings across subsidiaries — this endpoint reports what is stored, it does not normalize. If you need a clean breakdown, group on the `job_category` dimension of the [own-workforce datasets](/api-reference/datasets/query) instead.
</Note>

Like [List Workforce Countries](/api-reference/own-workforce/countries), this endpoint always spans the organization tree; there is no `consolidate_group` switch.

## Request

### Headers

<ParamField header="x-api-key" type="string" required>
  Your API key for authentication

  **Example:** `sk_live_1234567890abcdef`
</ParamField>

<ParamField header="x-organization-id" type="string" required>
  Your organization UUID

  **Example:** `a8315ef3-dd50-43f8-b7ce-d839e68d51fa`
</ParamField>

## Response

A bare JSON array of employment category strings, not an object.

## Example

<CodeGroup>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl -X GET "https://api.dcycle.io/v1/own_workforces/job-categories" \
    -H "x-api-key: ${DCYCLE_API_KEY}" \
    -H "x-organization-id: ${DCYCLE_ORG_ID}"
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
  import os

  import requests

  headers = {
      "x-api-key": os.getenv("DCYCLE_API_KEY"),
      "x-organization-id": os.getenv("DCYCLE_ORG_ID"),
  }

  response = requests.get(
      "https://api.dcycle.io/v1/own_workforces/job-categories",
      headers=headers,
  )

  for category in response.json():
      print(category)
  ```

  ```javascript JavaScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  const axios = require('axios');

  const headers = {
    'x-api-key': process.env.DCYCLE_API_KEY,
    'x-organization-id': process.env.DCYCLE_ORG_ID
  };

  axios.get('https://api.dcycle.io/v1/own_workforces/job-categories', { headers })
    .then(response => response.data.forEach(category => console.log(category)))
    .catch(error => console.error(error));
  ```
</CodeGroup>

### Successful Response

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
["Engineer", "Operations", "Sales", "Plant operator"]
```

## Common Errors

### 401 Unauthorized

**Cause:** the key is invalid, or it does not belong to the organization in `x-organization-id` — the two are looked up as a pair. A request carrying no credentials at all answers `AUTH_REQUIRED` instead.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "detail": "Invalid API key for organization",
  "code": "INVALID_API_KEY"
}
```

### 403 Forbidden

**Cause:** the key's owner is not an enabled member of the organization in `x-organization-id`.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "detail": "Logged User is not Member of Organization",
  "code": "LOGGED_USER_NOT_MEMBER"
}
```

## Related Endpoints

<CardGroup cols={2}>
  <Card title="List countries" icon="earth-europe" href="/api-reference/own-workforce/countries">
    The same treatment for work locations
  </Card>

  <Card title="List employees" icon="users" href="/api-reference/own-workforce/list">
    Each row carries its employment category
  </Card>
</CardGroup>
