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

# List jobs

> Lists jobs visible to the authenticated company.



## OpenAPI

````yaml api-reference/openapi.yaml get /api/v1/jobs
openapi: 3.1.0
info:
  title: Outhire Public API
  version: 0.1.0
  description: >
    OpenAPI description of the currently implemented public API under `/api/v1`.


    Authentication uses bearer API keys generated from the Outhire app settings
    UI.

    All resource access is scoped to the company that owns the API key.


    Notes about current implementation:

    - Cursor pagination is offset-based and the cursor is an opaque
    base64url-encoded object.

    - Duplicate candidate detection is implemented at the application layer and
    is not concurrency-safe yet.
servers:
  - url: https://app.outhire.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Jobs
  - name: Candidates
paths:
  /api/v1/jobs:
    get:
      tags:
        - Jobs
      summary: List jobs
      description: Lists jobs visible to the authenticated company.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Cursor'
        - name: active
          in: query
          required: false
          description: Filter by active state. Defaults to `true`.
          schema:
            type: boolean
            default: true
        - name: department_id
          in: query
          required: false
          description: Filter by department id.
          schema:
            type: integer
            minimum: 1
      responses:
        '200':
          description: Jobs list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobsListResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  parameters:
    Limit:
      name: limit
      in: query
      required: false
      description: Page size. Defaults to `25`. Maximum `100`.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
    Cursor:
      name: cursor
      in: query
      required: false
      description: Opaque cursor returned by the previous page.
      schema:
        type: string
  schemas:
    JobsListResponse:
      description: Job list response with pagination metadata.
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Job'
        pagination:
          $ref: '#/components/schemas/Pagination'
    Job:
      description: Public representation of a job post.
      type: object
      required:
        - id
        - title
        - department_id
        - is_active
        - is_public
        - locations
        - location_type
        - salary
        - apply_url
        - screening_questions
        - created_at
        - updated_at
      properties:
        id:
          type: integer
          description: Internal numeric job id.
          example: 40
        title:
          type:
            - string
            - 'null'
          description: Job title.
          example: Senior Engineer
        department_id:
          type:
            - integer
            - 'null'
          description: Department id for the job, if set.
          example: 1
        is_active:
          type:
            - boolean
            - 'null'
          description: Whether the job is currently active.
          example: true
        is_public:
          type: boolean
          description: Whether the job is publicly visible in Outhire.
          example: false
        locations:
          type: array
          description: Flattened location labels parsed from the job post payload.
          items:
            type: string
          example:
            - Sydney, Australia
            - Melbourne, Australia
        location_type:
          type:
            - string
            - 'null'
          description: Location mode parsed from the job post payload.
          example: remote
        salary:
          description: Salary information parsed from the job post payload, if present.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/JobSalary'
        apply_url:
          type: string
          description: >-
            External apply URL if set, otherwise an Outhire-generated fallback
            URL.
          example: https://app.outhire.ai/jobs/abc123
        screening_questions:
          type: array
          description: Raw screening questions array from the job post payload.
          items: {}
          example: []
        created_at:
          type: string
          format: date-time
          description: Job creation timestamp.
          example: '2026-03-11T10:21:54.289003Z'
        updated_at:
          type: string
          format: date-time
          description: Job last update timestamp.
          example: '2026-03-11T10:21:54.544000Z'
      example:
        id: 40
        title: Senior Engineer
        department_id: 1
        is_active: true
        is_public: false
        locations:
          - Sydney, Australia
        location_type: remote
        salary:
          min: 120000
          max: 160000
          currency: AUD
        apply_url: https://app.outhire.ai/jobs/abc123
        screening_questions: []
        created_at: '2026-03-11T10:21:54.289003Z'
        updated_at: '2026-03-11T10:21:54.544000Z'
    Pagination:
      description: Cursor pagination metadata returned by list endpoints.
      type: object
      required:
        - has_more
        - next_cursor
      properties:
        has_more:
          type: boolean
          description: Whether another page of results is available.
          example: true
        next_cursor:
          type:
            - string
            - 'null'
          description: >
            Opaque cursor to pass back on the next request. Null when there is
            no

            next page.
          example: eyJvZmZzZXQiOjI1fQ
    ErrorResponse:
      description: Top-level API error response.
      type: object
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
      example:
        error:
          code: validation_error
          message: Request validation failed.
          details:
            - field: email
              message: Invalid email
    JobSalary:
      description: Salary range parsed from the job post payload.
      type: object
      required:
        - min
        - max
        - currency
      properties:
        min:
          type:
            - number
            - 'null'
          description: Minimum salary value.
          example: 120000
        max:
          type:
            - number
            - 'null'
          description: Maximum salary value.
          example: 160000
        currency:
          type:
            - string
            - 'null'
          description: ISO-like currency code stored on the job post.
          example: AUD
    ErrorBody:
      description: Standard error envelope payload.
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: Stable machine-readable error code.
          enum:
            - validation_error
            - bad_request
            - unauthorized
            - not_found
            - conflict
            - unprocessable_entity
            - internal_error
        message:
          type: string
          description: Human-readable description of the error.
          example: Request validation failed.
        details:
          type: array
          description: Optional field-level validation details.
          items:
            $ref: '#/components/schemas/ErrorDetail'
    ErrorDetail:
      description: Validation detail for a specific request field.
      type: object
      required:
        - field
        - message
      properties:
        field:
          type: string
          description: Request field path that failed validation.
          example: email
        message:
          type: string
          description: Human-readable validation message.
          example: Invalid email
  responses:
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: unauthorized
              message: Missing or invalid API key.
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key

````