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

# List Job Facets

> Retrieve marketplace facet counts for building job search filters.

Aggregate counts across the open marketplace — categories, languages, countries, and pay types, each with the number of matching jobs. Use these to populate filter dropdowns or to discover valid filter values for [`GET /jobs`](/docs/developers/api-reference/jobs/search) instead of guessing strings.

Tokenless, CORS-enabled, and edge-cached the same way as the search endpoint.

**Requirements:** none — no token, no scope, no feature flag. Rate limited to 120 requests/minute per IP.

## Request

No parameters. `OPTIONS` returns `204` (CORS preflight).

## Response

<ResponseField name="totalJobs" type="number">
  Total open jobs in the marketplace.
</ResponseField>

<ResponseField name="categories" type="object[]">
  `{value, count}` pairs, sorted by `count` descending.
</ResponseField>

<ResponseField name="languages" type="object[]">
  `{value, count}` pairs, sorted by `count` descending.
</ResponseField>

<ResponseField name="countries" type="object[]">
  `{value, count}` pairs, sorted by `count` descending.
</ResponseField>

<ResponseField name="payTypes" type="object[]">
  `{value, count}` pairs — values are `PAY_PER_HOUR`, `FIXED_PRICE`, `PAY_PER_LABEL`.
</ResponseField>

<ResponseField name="generatedAt" type="string">
  ISO timestamp when the counts were computed.
</ResponseField>

## Errors

| Status | `code`         | Meaning                              |
| ------ | -------------- | ------------------------------------ |
| `429`  | `RATE_LIMITED` | Over 120 requests/minute from one IP |

<RequestExample>
  ```bash curl theme={null}
  curl -sS https://app.opentrain.ai/api/public/v1/jobs/facets
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "totalJobs": 184,
    "categories": [
      { "value": "Text Annotation", "count": 62 },
      { "value": "Audio Annotation", "count": 41 },
      { "value": "Image Annotation", "count": 35 }
    ],
    "languages": [
      { "value": "English", "count": 120 },
      { "value": "Spanish", "count": 28 }
    ],
    "countries": [
      { "value": "US", "count": 44 },
      { "value": "IN", "count": 31 }
    ],
    "payTypes": [
      { "value": "PAY_PER_HOUR", "count": 97 },
      { "value": "PAY_PER_LABEL", "count": 52 },
      { "value": "FIXED_PRICE", "count": 35 }
    ],
    "generatedAt": "2026-06-12T08:00:00.000Z"
  }
  ```
</ResponseExample>
