> ## 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 jobs

> Search active jobs with query-string filters. Input filter values use
lowercase canonical keys; job objects return human-readable display
values. Use `POST /api/jobs/search` for multiple queries, multiple
locations, or include/exclude filters.




## OpenAPI

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

    real-time feeds, geocoding services, and a contract preview for
    callback-driven

    job applications. Auto Apply is coming soon and is not available in beta or
    production.
  version: '2026-07-21'
  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: >-
      Coming soon: profileless applications answered through signed, typed HTTPS
      callbacks
  - name: Locations
    description: Geocoding and location services
paths:
  /api/jobs:
    get:
      tags:
        - Jobs
      summary: List jobs
      description: |
        Search active jobs with query-string filters. Input filter values use
        lowercase canonical keys; job objects return human-readable display
        values. Use `POST /api/jobs/search` for multiple queries, multiple
        locations, or include/exclude filters.
      operationId: searchJobsGet
      parameters:
        - name: q
          in: query
          schema:
            type: string
          description: >-
            Free-text search query. By default it matches broadly against the
            job title, company name, popular skills, and summary with typo
            tolerance. Wrap the value in double quotes (e.g. `q="Quantitative
            Developer"`) for an exact, contiguous phrase match restricted to the
            job title only.
        - name: search_description
          in: query
          schema:
            type: boolean
            default: true
          description: >
            When true, search title, alternative titles, company, popular
            skills,

            and summary. When false, restrict matching to titles and curated

            alternative titles. A double-quoted query always matches an exact

            contiguous phrase in the literal title.
        - name: location
          in: query
          schema:
            type: string
          description: Location filter (city, region, or country)
        - name: sources
          in: query
          schema:
            type: string
          description: Comma-separated source identifiers
        - name: work_model
          in: query
          schema:
            type: string
          description: Comma-separated work models (remote, hybrid, onsite)
        - name: employment_type
          in: query
          schema:
            type: string
          description: >-
            Comma-separated employment types (full-time, part-time, contract,
            internship, freelance, temporary)
        - name: experience_level
          in: query
          schema:
            type: string
          description: >
            Comma-separated experience levels. Canonical values: `intern`,
            `entry`,

            `mid`, `senior`, `lead`, `executive`.
        - name: posted_after
          in: query
          schema:
            type: string
            format: date-time
          description: >-
            Only return jobs whose employer posting date is on or after this
            date
        - name: posted_before
          in: query
          schema:
            type: string
            format: date-time
          description: >-
            Only return jobs whose employer posting date is on or before this
            date
        - name: min_salary_usd
          in: query
          schema:
            type: integer
            minimum: 0
          description: Minimum annual salary in USD
        - name: max_salary_usd
          in: query
          schema:
            type: integer
            minimum: 0
          description: Maximum annual salary in USD
        - name: skills
          in: query
          schema:
            type: string
          description: Comma-separated skill names
        - name: industries
          in: query
          schema:
            type: string
          description: >-
            Comma-separated company-industry names. A job matches any supplied
            value.
        - name: discovered_after
          in: query
          schema:
            type: string
            format: date-time
          description: Only return jobs first indexed on or after this UTC timestamp
        - name: discovered_before
          in: query
          schema:
            type: string
            format: date-time
          description: Only return jobs first indexed on or before this UTC timestamp
        - name: page
          in: query
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number (1-indexed)
        - name: page_size
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
            maximum: 100
          description: Number of results per page (max 100)
        - name: include_fields
          in: query
          schema:
            type: string
          description: >
            Comma-separated list of the heavy, non-core fields to include:

            `description`, `summary`, `qualifications`, `responsibilities`,

            `benefits`. **Omit** for the full job (every field, the default).

            Pass a subset to keep only those non-core fields alongside the

            always-present core fields (id, title, company, locations,

            compensation, dates, …). Pass an **empty value**
            (`?include_fields=`)

            for core fields only. Unknown names are ignored; excluded non-core

            fields come back empty (`""` / `[]`).
        - name: include_facets
          in: query
          schema:
            type: string
          description: |
            Comma-separated facets to compute: `work_model`,
            `experience_level`, `employment_type`, `sources`, `industries`,
            and `skills`. Omit for the default low-cardinality subset; pass an
            empty value to skip facets.
      responses:
        '200':
          description: Paginated list of matching jobs
          headers:
            X-Total-Count:
              schema:
                type: integer
                format: int64
              description: Total number of matching jobs across all pages.
            X-Total-Pages:
              schema:
                type: integer
              description: Total number of pages available.
            X-Page:
              schema:
                type: integer
              description: Current page number.
            X-Page-Size:
              schema:
                type: integer
              description: Page size used for this request.
            X-Credits-Deducted:
              schema:
                type: integer
              description: >-
                Credits deducted for the delivered search results. Omitted when
                no wallet debit occurs.
            X-Credits-Balance:
              schema:
                type: integer
              description: >-
                Remaining credit balance after the deduction. Omitted when no
                credits were deducted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSearchResponse'
        '400':
          description: Invalid query parameters
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          description: Server error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      x-codeSamples:
        - lang: cURL
          source: |
            curl -G "https://connect.jobo.world/api/jobs" \
              -H "X-Api-Key: $JOBO_API_KEY" \
              --data-urlencode "q=software engineer" \
              --data-urlencode "work_model=remote" \
              --data-urlencode "page_size=25"
        - lang: Python
          source: |
            from jobo_enterprise import JoboClient

            with JoboClient(api_key="YOUR_API_KEY") as client:
                results = client.search.search(
                    q="software engineer",
                    work_model="remote",
                    page_size=25,
                )
                print(results.total)
                for job in results.jobs:
                    print(job.title, job.company.name)
components:
  schemas:
    JobSearchResponse:
      type: object
      required:
        - jobs
        - total
        - page
        - page_size
        - total_pages
        - facets
      properties:
        jobs:
          type: array
          items:
            $ref: '#/components/schemas/JobDto'
        total:
          type: integer
          format: int64
        page:
          type: integer
        page_size:
          type: integer
        total_pages:
          type: integer
        facets:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/JobFacetDto'
    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'
    JobDto:
      type: object
      required:
        - id
        - title
        - normalized_title
        - company
        - description
        - summary
        - listing_url
        - apply_url
        - locations
        - compensation
        - employment_type
        - workplace_type
        - experience_level
        - source
        - created_at
        - updated_at
        - date_posted
        - valid_through
        - qualifications
        - responsibilities
        - benefits
        - is_work_auth_required
        - is_h1b_sponsor
        - is_clearance_required
      properties:
        id:
          type: string
          format: uuid
        title:
          type: string
        normalized_title:
          type: string
          nullable: true
        company:
          $ref: '#/components/schemas/JobCompanyDto'
        description:
          type: string
        summary:
          type: string
          nullable: true
        listing_url:
          type: string
        apply_url:
          type: string
        locations:
          type: array
          items:
            $ref: '#/components/schemas/JobLocationDto'
        compensation:
          type: object
          allOf:
            - $ref: '#/components/schemas/JobCompensationDto'
          nullable: true
          description: |
            Compensation as published by the employer. USD annualization is
            used for salary filters but is not returned in this object.
        employment_type:
          type: string
          nullable: true
          enum:
            - Full-time
            - Part-time
            - Contract
            - Internship
            - Freelance
            - Temporary
        workplace_type:
          type: string
          nullable: true
          enum:
            - Remote
            - Hybrid
            - On-site
        experience_level:
          type: string
          nullable: true
          enum:
            - Intern
            - Entry Level
            - Mid Level
            - Senior
            - Lead
            - Executive
        source:
          type: string
          example: greenhouse
          description: |
            ATS provider identifier. This remains an open string so newly
            supported providers do not break generated clients.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        date_posted:
          type: string
          format: date-time
          nullable: true
        valid_through:
          type: string
          format: date-time
          nullable: true
        qualifications:
          $ref: '#/components/schemas/JobQualificationsDto'
        responsibilities:
          type: array
          items:
            type: string
        benefits:
          type: array
          items:
            type: string
        is_work_auth_required:
          type: boolean
          nullable: true
        is_h1b_sponsor:
          type: boolean
          nullable: true
        is_clearance_required:
          type: boolean
          nullable: true
    JobFacetDto:
      type: object
      required:
        - key
        - count
      properties:
        key:
          type: string
        count:
          type: integer
          format: int64
    AutoApplyApiVersion:
      type: string
      description: Version of the profileless Auto Apply API contract.
      enum:
        - '2026-07-21'
      example: '2026-07-21'
    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
    JobCompanyDto:
      type: object
      required:
        - id
        - name
        - website
        - logo_url
        - summary
        - industries
        - categories
        - linkedin_url
        - crunchbase_url
        - details_url
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        website:
          type: string
          nullable: true
        logo_url:
          type: string
          nullable: true
        summary:
          type: string
          nullable: true
        industries:
          type: array
          items:
            type: string
          description: Industry tags describing what the company does.
        categories:
          type: array
          items:
            type: string
          description: Business-model bucket tags (b2b / b2c / saas / service-provider).
        linkedin_url:
          type: string
          nullable: true
        crunchbase_url:
          type: string
          nullable: true
        details_url:
          type: string
          nullable: true
          description: >
            Direct Jobo API URL to the full company profile endpoint

            (`GET https://connect.jobo.world/api/companies/{id}`).

            RapidAPI consumers should rebuild `/api/companies/{id}` on their

            marketplace gateway instead of following this URL with a RapidAPI
            key.
    JobLocationDto:
      type: object
      required:
        - location
        - city
        - region
        - country
        - latitude
        - longitude
      properties:
        location:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        region:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
        latitude:
          type: number
          format: double
          nullable: true
        longitude:
          type: number
          format: double
          nullable: true
    JobCompensationDto:
      type: object
      required:
        - min
        - max
        - currency
        - period
      properties:
        min:
          type: number
          format: decimal
          nullable: true
        max:
          type: number
          format: decimal
          nullable: true
        currency:
          type: string
          nullable: true
        period:
          type: string
          nullable: true
          enum:
            - hourly
            - daily
            - weekly
            - monthly
            - yearly
            - per-diem
    JobQualificationsDto:
      type: object
      required:
        - must_have
        - preferred
      properties:
        must_have:
          $ref: '#/components/schemas/QualificationBucketDto'
        preferred:
          $ref: '#/components/schemas/QualificationBucketDto'
    QualificationBucketDto:
      type: object
      required:
        - education
        - certifications
        - skills
      properties:
        education:
          type: array
          items:
            type: string
        certifications:
          type: array
          items:
            type: string
        skills:
          type: array
          items:
            $ref: '#/components/schemas/QualificationSkillDto'
    QualificationSkillDto:
      type: object
      required:
        - name
        - type
      properties:
        name:
          type: string
        type:
          type: string
          default: hard
  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

````