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



## OpenAPI

````yaml /openapi.yaml get /api/jobs/expired
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/expired:
    get:
      tags:
        - Feed
      summary: List expired jobs
      operationId: getExpiredJobIds
      parameters:
        - name: expired_since
          in: query
          required: false
          schema:
            type: string
            format: date-time
            nullable: true
          description: |
            Return jobs that expired after this UTC timestamp (ISO 8601).
            Optional — defaults to **24 hours ago** when omitted. Maximum
            lookback is 7 days.
        - name: cursor
          in: query
          schema:
            type: string
          description: Cursor for pagination
        - name: batch_size
          in: query
          schema:
            type: integer
            default: 1000
            minimum: 1
            maximum: 10000
          description: Number of IDs per batch (default 1000)
      responses:
        '200':
          description: Batch of expired job IDs
          headers:
            X-Has-More:
              schema:
                type: boolean
              description: Duplicates response body `has_more` for quick checks.
            Cache-Control:
              schema:
                type: string
              description: Always `private, max-age=30` — short TTL for aggressive pollers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpiredJobIdsFeedResponse'
        '400':
          description: |
            Invalid query parameter — `expired_since` older than 7 days, in the
            future, or `batch_size` out of range.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
      x-codeSamples:
        - lang: cURL
          source: |
            curl -G "https://connect.jobo.world/api/jobs/expired" \
              -H "X-Api-Key: $JOBO_API_KEY" \
              --data-urlencode "expired_since=2026-07-25T00:00:00Z" \
              --data-urlencode "batch_size=10000"
        - lang: Python
          source: |
            import datetime as dt
            from jobo_enterprise import JoboClient

            since = dt.datetime.now(dt.timezone.utc) - dt.timedelta(days=1)

            with JoboClient(api_key="YOUR_API_KEY") as client:
                for job_id in client.feed.iter_expired_job_ids(expired_since=since):
                    mark_expired(job_id)
components:
  schemas:
    ExpiredJobIdsFeedResponse:
      type: object
      required:
        - job_ids
        - next_cursor
        - has_more
      properties:
        job_ids:
          type: array
          items:
            type: string
            format: uuid
        next_cursor:
          type: string
          nullable: true
        has_more:
          type: boolean
    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'
    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
  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'
    ServerError:
      description: Unexpected server error.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: API key provided by Jobo

````