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

# Get a job

Returns the current state of a job and a page of its results. Results are paginated with `skip` and `limit` query parameters (default limit 20, max 100).

Use the `pagination.next` URL from the response to fetch subsequent pages. The SDK clients do this automatically via `waitForJob()` and `getAllJobResults()`.

See [Async jobs](/home/concepts/async-jobs) for the full lifecycle and result shape.


## OpenAPI

````yaml openapi.json GET /v1/jobs/{id}
openapi: 3.1.0
info:
  title: Reader API
  version: 1.0.0
  description: >-
    Reader turns any URL into clean markdown for LLMs. One endpoint (`POST
    /v1/read`) handles scrape, batch, and crawl operations. See
    https://reader.dev/docs for concepts and guides.
servers:
  - url: https://api.reader.dev
    description: Production
security: []
tags:
  - name: Read
    description: Scrape, batch, and crawl operations
  - name: Jobs
    description: Async job management
  - name: Webhooks
    description: Event subscriptions
  - name: Account
    description: API keys, credits, and usage
paths:
  /v1/jobs/{id}:
    get:
      tags:
        - Jobs
      summary: Get job status and results
      parameters:
        - schema:
            type: string
          required: true
          name: id
          in: path
        - schema:
            type: integer
            minimum: 0
          required: false
          name: skip
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 100
          required: false
          name: limit
          in: query
      responses:
        '200':
          description: Job details with paginated results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
              example:
                success: false
                error:
                  code: unauthenticated
                  message: Missing or invalid API key
                  docsUrl: https://reader.dev/docs/home/concepts/errors#unauthenticated
              examples:
                unauthenticated:
                  summary: Unauthenticated
                  value:
                    success: false
                    error:
                      code: unauthenticated
                      message: Missing or invalid API key
                      docsUrl: >-
                        https://reader.dev/docs/home/concepts/errors#unauthenticated
        '404':
          description: Job not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
              example:
                success: false
                error:
                  code: not_found
                  message: Job not found
                  docsUrl: https://reader.dev/docs/home/concepts/errors#not-found
              examples:
                not_found:
                  summary: Job not found
                  value:
                    success: false
                    error:
                      code: not_found
                      message: Job not found
                      docsUrl: https://reader.dev/docs/home/concepts/errors#not-found
      security:
        - ApiKeyAuth: []
components:
  schemas:
    JobResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        data:
          $ref: '#/components/schemas/JobDetail'
        pagination:
          $ref: '#/components/schemas/Pagination'
      required:
        - success
        - data
        - pagination
    ErrorEnvelope:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - false
        error:
          type: object
          properties:
            code:
              $ref: '#/components/schemas/ErrorCode'
            message:
              type: string
            details:
              type: object
              additionalProperties: {}
            docsUrl:
              type: string
              format: uri
          required:
            - code
            - message
            - docsUrl
      required:
        - success
        - error
    JobDetail:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
          enum:
            - queued
            - processing
            - completed
            - failed
            - cancelled
        mode:
          type: string
          enum:
            - scrape
            - batch
            - crawl
        completed:
          type: integer
        total:
          type: integer
        creditsUsed:
          type: integer
        error:
          type:
            - string
            - 'null'
        results:
          type: array
          items:
            $ref: '#/components/schemas/JobResultEntry'
        startedAt:
          type:
            - string
            - 'null'
          format: date-time
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
      required:
        - id
        - status
        - mode
        - completed
        - total
        - creditsUsed
        - error
        - results
        - startedAt
        - completedAt
        - createdAt
    Pagination:
      type: object
      properties:
        total:
          type: integer
          example: 1234
        skip:
          type: integer
          example: 0
        limit:
          type: integer
          example: 20
        hasMore:
          type: boolean
          example: true
        next:
          type: string
          format: uri
          example: https://api.reader.dev/v1/jobs/abc?skip=20&limit=20
      required:
        - total
        - skip
        - limit
        - hasMore
    ErrorCode:
      type: string
      enum:
        - invalid_request
        - unauthenticated
        - insufficient_credits
        - url_blocked
        - not_found
        - conflict
        - rate_limited
        - concurrency_limited
        - internal_error
        - upstream_unavailable
        - scrape_timeout
    JobResultEntry:
      type: object
      properties:
        url:
          type: string
          format: uri
        markdown:
          type: string
        html:
          type: string
        screenshot:
          type: string
          description: Base64-encoded PNG screenshot.
        statusCode:
          type: integer
        proxyMode:
          $ref: '#/components/schemas/ResolvedProxyMode'
        credits:
          type: integer
        metadata:
          type: object
          additionalProperties: {}
        error:
          type: string
      required:
        - url
    ResolvedProxyMode:
      type: string
      enum:
        - standard
        - premium
      description: >-
        The proxy mode that actually ran: `standard` (datacenter) or `premium`
        (residential). Omitted on cache hits.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````