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

# List occupations

> The occupation taxonomy every job's `occupation` comes from:
categories, then subcategories, then occupations. It lists the values
the search filters take: a category's `name` for `job_categories`, a
subcategory's `name` for `job_subcategories`, and an occupation's `id`
for `occupation_ids`.

Filter on occupation `id`s, never on names: ids are stable, while
names can improve between releases. `version` changes when occupations
or the hierarchy change; display names can improve without a new
`version`, so refetch now and then rather than caching by `version`
alone. The whole taxonomy (about 3,000 occupations)
comes back in one response, with no paging.

Free — this endpoint never charges the wallet. It still counts toward
your account's request rate limit, in the `Default` group.

Occupations come from the ESCO classification (European Commission)
and O\*NET-SOC codes from the O\*NET database (USDOL/ETA), both under
CC BY 4.0. See [Data sources & attribution](/data-sources).




## OpenAPI

````yaml /openapi.yaml get /api/occupations
openapi: 3.0.3
info:
  title: Jobo Enterprise API
  description: >
    The Jobo Enterprise API provides programmatic access to job listings,
    intelligent search,

    incremental feeds, geocoding services, and callback-driven job applications.

    Auto Apply is coming soon as a generally available product; today it is an

    invite-only beta, and accounts without access receive 403

    auto_apply_not_enabled from create.
  version: '2026-08-31'
  contact:
    name: Jobo Support
    url: https://jobo.world
    email: support@jobo.world
  license:
    name: Proprietary — see terms of service
    url: https://jobo.world/terms
  termsOfService: https://jobo.world/terms
servers:
  - url: https://connect.jobo.world
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Jobs
    description: Search and retrieve job listings
  - name: Feed
    description: Bulk job feeds and expiration tracking
  - name: Companies
    description: Company profiles and company-scoped job listings
  - name: Auto Apply
    description: >-
      Submit job applications through Jobo: a blocking create returns the form's
      typed fields, answers are validated and filled synchronously, and the call
      returns the next step or the result.
  - name: Locations
    description: Geocoding and location services
  - name: Occupations
    description: The occupation taxonomy jobs are classified into
paths:
  /api/occupations:
    get:
      tags:
        - Occupations
      summary: List occupations
      description: |
        The occupation taxonomy every job's `occupation` comes from:
        categories, then subcategories, then occupations. It lists the values
        the search filters take: a category's `name` for `job_categories`, a
        subcategory's `name` for `job_subcategories`, and an occupation's `id`
        for `occupation_ids`.

        Filter on occupation `id`s, never on names: ids are stable, while
        names can improve between releases. `version` changes when occupations
        or the hierarchy change; display names can improve without a new
        `version`, so refetch now and then rather than caching by `version`
        alone. The whole taxonomy (about 3,000 occupations)
        comes back in one response, with no paging.

        Free — this endpoint never charges the wallet. It still counts toward
        your account's request rate limit, in the `Default` group.

        Occupations come from the ESCO classification (European Commission)
        and O\*NET-SOC codes from the O\*NET database (USDOL/ETA), both under
        CC BY 4.0. See [Data sources & attribution](/data-sources).
      operationId: listOccupations
      responses:
        '200':
          description: The occupation taxonomy
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OccupationTaxonomyResponse'
              example:
                version: bc3b8e92359c22b8
                categories:
                  - name: Healthcare
                    subcategories:
                      - name: Nursing
                        occupations:
                          - id: jobo:licensed-practical-nurse
                            name: Licensed Practical Nurse
                            isco_code: '3221'
                            onet_soc_codes: []
                          - id: esco:8d3e8aaa-791b-4c75-a465-f3f827028f50
                            name: Registered Nurse
                            isco_code: '2221'
                            onet_soc_codes:
                              - 29-1141.00
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: cURL
          source: |
            curl "https://connect.jobo.world/api/occupations" \
              -H "X-Api-Key: $JOBO_API_KEY"
components:
  schemas:
    OccupationTaxonomyResponse:
      type: object
      description: The occupation taxonomy, categories first.
      required:
        - version
        - categories
      properties:
        version:
          type: string
          description: >-
            Changes when occupations or the hierarchy change. Display names can
            improve without a new version.
          example: bc3b8e92359c22b8
        categories:
          type: array
          items:
            $ref: '#/components/schemas/OccupationCategoryDto'
    OccupationCategoryDto:
      type: object
      required:
        - name
        - subcategories
      properties:
        name:
          type: string
          description: >-
            The value `job_categories` filters on, and a job's
            `occupation.category`.
          example: Healthcare
        subcategories:
          type: array
          items:
            $ref: '#/components/schemas/OccupationSubcategoryDto'
    ProblemDetails:
      type: object
      description: Problem Details object returned for error responses.
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
        code:
          type: string
          nullable: true
          description: Stable machine-readable code for Auto Apply domain errors.
        api_version:
          $ref: '#/components/schemas/AutoApplyApiVersion'
    ApiRateLimitError:
      type: object
      description: API-key request-window rejection returned by rate-limit middleware.
      required:
        - error
        - detail
        - group
        - retry_after_seconds
      properties:
        error:
          type: string
          example: Rate limit exceeded
        detail:
          type: string
        group:
          type: string
          example: AutoApply
        retry_after_seconds:
          type: integer
          minimum: 0
          nullable: true
    OccupationSubcategoryDto:
      type: object
      required:
        - name
        - occupations
      properties:
        name:
          type: string
          description: >-
            The value `job_subcategories` filters on, and a job's
            `occupation.subcategory`.
          example: Nursing
        occupations:
          type: array
          items:
            $ref: '#/components/schemas/OccupationListItemDto'
    AutoApplyApiVersion:
      type: string
      description: Version of the profileless Auto Apply API contract.
      enum:
        - '2026-08-31'
      example: '2026-08-31'
    OccupationListItemDto:
      type: object
      required:
        - id
        - name
        - isco_code
        - onet_soc_codes
      properties:
        id:
          type: string
          description: |
            Stable id (`esco:<uuid>` or `jobo:<slug>`): the value
            `occupation_ids` filters on, and a job's `occupation.id`.
          example: esco:8d3e8aaa-791b-4c75-a465-f3f827028f50
        name:
          type: string
          description: Display name. May improve over time.
          example: Registered Nurse
        isco_code:
          type: string
          nullable: true
          description: ISCO-08 unit group.
          example: '2221'
        onet_soc_codes:
          type: array
          items:
            type: string
          description: O\*NET-SOC 2019 codes. Empty when O\*NET has no equivalent.
          example:
            - 29-1141.00
  responses:
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    TooManyRequests:
      description: Rate limit exceeded.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 0
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
        application/json:
          schema:
            $ref: '#/components/schemas/ApiRateLimitError'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: API key provided by Jobo

````

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