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

# Run Pipeline

> Parse one document (`config.step`), then run up to 10 more steps on the parse once it completes (`config.children`). A pipeline always runs async. Read its status at `GET /pipeline/{pipeline_id}`, each step's status at `GET /pipeline/{pipeline_id}/result`, and a completed step's output at its own endpoint. Each step costs what its endpoint costs, and the pipeline adds nothing. The pipeline and its steps expire together, counted from the pipeline's end.



## OpenAPI

````yaml /api-reference/v2/openapi.yml post /pipeline
openapi: 3.1.0
info:
  title: Pulse API
  description: >-
    Agentic document infrastructure for the enterprise. The Pulse API turns
    complex documents into AI-ready data, such as Markdown, structured JSON and
    bounding boxes.
  version: '2'
servers:
  - url: https://api.runpulse.com
    description: Default Pulse API base URL
security: []
tags:
  - name: Parse
    description: Parse a document's text, tables and figures.
  - name: Batch parse
    description: Parse many documents with one config.
  - name: Extract
    description: Extract structured data from a parsed document.
  - name: Split
    description: Find each topic's pages in a parsed document.
  - name: Tables
    description: Merge a parsed document's tables across pages.
  - name: Charts
    description: Read the charts in a parsed document.
  - name: Classify
    description: Sort a document into the categories you define.
  - name: Pipeline
    description: Run a parse and its follow-on steps as one job.
  - name: Usage
    description: Check the pages and credits your organization has used.
  - name: Webhook
    description: Get notified when your organization's jobs change status.
  - name: Organization settings
    description: Read and change your organization's name, address and default API version.
paths:
  /pipeline:
    post:
      tags:
        - Pipeline
      summary: Run Pipeline
      description: >-
        Parse one document (`config.step`), then run up to 10 more steps on the
        parse once it completes (`config.children`). A pipeline always runs
        async. Read its status at `GET /pipeline/{pipeline_id}`, each step's
        status at `GET /pipeline/{pipeline_id}/result`, and a completed step's
        output at its own endpoint. Each step costs what its endpoint costs, and
        the pipeline adds nothing. The pipeline and its steps expire together,
        counted from the pipeline's end.
      operationId: runPipeline
      parameters:
        - name: Pulse-Version
          in: header
          required: false
          schema:
            type: string
            default: '2'
            title: Pulse-Version
          examples:
            default:
              value: '2'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: A pipeline to run on one document. A pipeline always runs async.
              title: PipelineRequest
              oneOf:
                - title: Inline config
                  additionalProperties: false
                  type: object
                  properties:
                    file_url:
                      description: >-
                        The document's URL: a public `http(s)` URL, a public
                        `s3://` or `gs://` object, or an upload URL Pulse
                        issued.
                      minLength: 1
                      title: File Url
                      type: string
                    config:
                      $ref: '#/components/schemas/PipelineConfig'
                      description: This request's options.
                  required:
                    - file_url
                    - config
                - title: Saved config
                  additionalProperties: false
                  type: object
                  properties:
                    file_url:
                      description: >-
                        The document's URL: a public `http(s)` URL, a public
                        `s3://` or `gs://` object, or an upload URL Pulse
                        issued.
                      minLength: 1
                      title: File Url
                      type: string
                    config_id:
                      description: A saved config's id, sent in place of `config`.
                      title: Config Id
                      type: string
                  required:
                    - file_url
                    - config_id
          multipart/form-data:
            schema:
              oneOf:
                - title: Inline config
                  type: object
                  properties:
                    file:
                      type: string
                      format: binary
                    config:
                      $ref: '#/components/schemas/PipelineConfig'
                      description: This request's options.
                  required:
                    - file
                    - config
                - title: Saved config
                  type: object
                  properties:
                    file:
                      type: string
                      format: binary
                    config_id:
                      description: A saved config's id, sent in place of `config`.
                      title: Config Id
                      type: string
                  required:
                    - file
                    - config_id
            encoding:
              config:
                contentType: application/json
      responses:
        '202':
          description: >-
            The pipeline started. Check `GET /pipeline/{pipeline_id}` until it
            ends.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PipelineResponse'
        '400':
          description: >-
            The body is invalid
            ([`REQUEST_INVALID`](https://docs.runpulse.com/errors/request-invalid)):
            not JSON or a multipart form, an unknown or missing field, `file`
            and `file_url` both or neither, `config` and `config_id` both or
            neither, or more than 10 children. Or `page_range` is malformed or
            reaches past the document's last page
            ([`PAGE_RANGE_INVALID`](https://docs.runpulse.com/errors/page-range-invalid)),
            or a URL is not allowed
            ([`FILE_URL_INVALID`](https://docs.runpulse.com/errors/file-url-invalid)).
            `Pulse-Version` names a version this API doesn't serve
            ([`UNSUPPORTED_VERSION`](https://docs.runpulse.com/errors/unsupported-version)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - REQUEST_INVALID
            - PAGE_RANGE_INVALID
            - FILE_URL_INVALID
            - UNSUPPORTED_VERSION
        '401':
          description: >-
            No valid API key was sent
            ([`CREDENTIALS_INVALID`](https://docs.runpulse.com/errors/credentials-invalid)),
            or the key is inactive
            ([`API_KEY_INACTIVE`](https://docs.runpulse.com/errors/api-key-inactive)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - CREDENTIALS_INVALID
            - API_KEY_INACTIVE
        '402':
          description: >-
            Your organization's plan cannot cover the run: it pays per request,
            which API version 2 does not take
            ([`PAYMENT_REQUIRED`](https://docs.runpulse.com/errors/payment-required));
            its account is blocked by a failed payment
            ([`PAYMENT_FAILED`](https://docs.runpulse.com/errors/payment-failed)),
            a payment that needs authentication
            ([`PAYMENT_AUTHENTICATION_REQUIRED`](https://docs.runpulse.com/errors/payment-authentication-required))
            or a past-due subscription
            ([`SUBSCRIPTION_PAST_DUE`](https://docs.runpulse.com/errors/subscription-past-due));
            its free tier or plan's limit is reached
            ([`PLAN_LIMIT_REACHED`](https://docs.runpulse.com/errors/plan-limit-reached));
            the trial expired
            ([`TRIAL_EXPIRED`](https://docs.runpulse.com/errors/trial-expired)),
            the credit limit is exceeded
            ([`CREDIT_LIMIT_EXCEEDED`](https://docs.runpulse.com/errors/credit-limit-exceeded))
            or the subscription is canceled
            ([`SUBSCRIPTION_CANCELED`](https://docs.runpulse.com/errors/subscription-canceled));
            or a free-tier request turned storage off while your organization
            saves parses
            ([`PLAN_UPGRADE_REQUIRED`](https://docs.runpulse.com/errors/plan-upgrade-required)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - PAYMENT_REQUIRED
            - PAYMENT_FAILED
            - PAYMENT_AUTHENTICATION_REQUIRED
            - SUBSCRIPTION_PAST_DUE
            - PLAN_LIMIT_REACHED
            - TRIAL_EXPIRED
            - CREDIT_LIMIT_EXCEEDED
            - SUBSCRIPTION_CANCELED
            - PLAN_UPGRADE_REQUIRED
        '403':
          description: >-
            The account is suspended
            ([`ACCOUNT_SUSPENDED`](https://docs.runpulse.com/errors/account-suspended)),
            or a `file_url` in Pulse's storage is outside your organization
            ([`PERMISSION_DENIED`](https://docs.runpulse.com/errors/permission-denied)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - ACCOUNT_SUSPENDED
            - PERMISSION_DENIED
        '404':
          description: >-
            `config_id` names no saved pipeline config
            ([`RESOURCE_NOT_FOUND`](https://docs.runpulse.com/errors/resource-not-found);
            `errors` names the field). No endpoint answers this path
            ([`ROUTE_NOT_FOUND`](https://docs.runpulse.com/errors/route-not-found)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - RESOURCE_NOT_FOUND
            - ROUTE_NOT_FOUND
        '413':
          description: >-
            The document is too large
            ([`FILE_TOO_LARGE`](https://docs.runpulse.com/errors/file-too-large)):
            an upload over 100 MB (host it and send `file_url` instead), or more
            than the parse takes; or a form's text part is over 10 MB
            ([`FIELD_TOO_LARGE`](https://docs.runpulse.com/errors/field-too-large)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - FILE_TOO_LARGE
            - FIELD_TOO_LARGE
        '415':
          description: >-
            The document's type is not supported
            ([`FILE_TYPE_UNSUPPORTED`](https://docs.runpulse.com/errors/file-type-unsupported)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - FILE_TYPE_UNSUPPORTED
        '422':
          description: >-
            The document cannot be used: a corrupt
            ([`FILE_CORRUPT`](https://docs.runpulse.com/errors/file-corrupt)) or
            empty ([`FILE_EMPTY`](https://docs.runpulse.com/errors/file-empty))
            file, a download that failed
            ([`FILE_DOWNLOAD_FAILED`](https://docs.runpulse.com/errors/file-download-failed)),
            or a PDF whose active content could not be removed
            ([`FILE_UNSAFE`](https://docs.runpulse.com/errors/file-unsafe)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - FILE_CORRUPT
            - FILE_EMPTY
            - FILE_DOWNLOAD_FAILED
            - FILE_UNSAFE
        '500':
          description: >-
            The run failed on Pulse's side
            ([`SERVER_ERROR`](https://docs.runpulse.com/errors/server-error)),
            its parse could not be started
            ([`PROCESSING_FAILED`](https://docs.runpulse.com/errors/processing-failed)).
            [`JOB_UNREADABLE`](https://docs.runpulse.com/errors/job-unreadable):
            Pulse can't read this job right now; don't retry, contact support.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - SERVER_ERROR
            - PROCESSING_FAILED
            - JOB_UNREADABLE
        '503':
          description: >-
            A service was briefly unavailable
            ([`SERVICE_UNAVAILABLE`](https://docs.runpulse.com/errors/service-unavailable)):
            reading your API key or organization's retention settings, starting
            the pipeline or its parse, or extraction. Retry. Or processing is at
            capacity
            ([`CAPACITY_EXCEEDED`](https://docs.runpulse.com/errors/capacity-exceeded)),
            so the pipeline was canceled; retry after the seconds in
            `Retry-After`. On a self-hosted install that hasn't been activated
            yet,
            [`LICENSE_NOT_ACTIVATED`](https://docs.runpulse.com/errors/license-not-activated).
            On a self-hosted install whose license is invalid or expired,
            [`LICENSE_INVALID`](https://docs.runpulse.com/errors/license-invalid).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: string
          x-pulse-errors:
            - SERVICE_UNAVAILABLE
            - CAPACITY_EXCEEDED
            - LICENSE_NOT_ACTIVATED
            - LICENSE_INVALID
        '504':
          description: >-
            Downloading `file_url` timed out
            ([`FILE_DOWNLOAD_TIMEOUT`](https://docs.runpulse.com/errors/file-download-timeout)).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
          headers:
            X-Request-Id:
              description: The request's id; the problem's `request_id`.
              schema:
                type: string
          x-pulse-errors:
            - FILE_DOWNLOAD_TIMEOUT
      security:
        - ApiKey: []
components:
  schemas:
    PipelineConfig:
      additionalProperties: false
      description: 'The pipeline''s steps: a parse, and the steps that read it.'
      properties:
        step:
          $ref: '#/components/schemas/ParseStep'
          description: >-
            The parse of the document. The pipeline ends the way the parse does:
            `completed` if it completes, otherwise `failed` or `canceled`,
            whatever the other steps do.
        children:
          description: >-
            The steps that read the parse, started once it completes. A failed
            step doesn't stop the others or fail the pipeline. If the parse
            doesn't complete, every step is `skipped`.
          items:
            discriminator:
              mapping:
                charts: '#/components/schemas/ChartsStep'
                extract: '#/components/schemas/ExtractStep'
                split: '#/components/schemas/SplitStep'
                tables: '#/components/schemas/TablesStep'
              propertyName: type
            oneOf:
              - $ref: '#/components/schemas/ExtractStep'
              - $ref: '#/components/schemas/SplitStep'
              - $ref: '#/components/schemas/TablesStep'
              - $ref: '#/components/schemas/ChartsStep'
          maxItems: 10
          title: Children
          type: array
      required:
        - step
      title: PipelineConfig { step, children }
      type: object
    PipelineResponse:
      properties:
        pipeline_id:
          type: string
          title: Pipeline Id
          description: The pipeline's id, `pipeline-<uuid>`.
        created_at:
          type: string
          title: Created At
          description: When the job was created.
      additionalProperties: false
      type: object
      required:
        - pipeline_id
        - created_at
      title: PipelineResponse
      description: >-
        A pipeline that has started. Check `GET /pipeline/{pipeline_id}` until
        it ends.
    Problem:
      additionalProperties: false
      description: >-
        Why the request or the job failed. Branch on `code`; quote `request_id`
        to support.
      properties:
        type:
          description: 'This code''s page: what it means and what to do.'
          title: Type
          type: string
        title:
          description: A short summary of the code, the same for every occurrence.
          title: Title
          type: string
        status:
          description: The HTTP status the code answers with.
          title: Status
          type: integer
        detail:
          description: What happened this time.
          title: Detail
          type: string
        instance:
          description: 'This occurrence: the request''s URN, `urn:pulse:request:<id>`.'
          title: Instance
          type: string
        code:
          description: The stable error code, e.g. `REQUEST_INVALID`. Branch on it.
          title: Code
          type: string
        request_id:
          description: >-
            The request that failed, as `X-Request-Id` named it; for a failed
            job, the request that created it. Quote it to support.
          title: Request Id
          type: string
        retryable:
          description: Whether the same request may succeed if sent again.
          title: Retryable
          type: boolean
        retry_after:
          description: Seconds to wait before retrying, as `Retry-After` says.
          title: Retry After
          type: integer
        errors:
          description: Each refused part of the request.
          items:
            $ref: '#/components/schemas/FieldIssue'
          title: Errors
          type: array
        resource:
          description: 'What wasn''t found: `job`, `batch`, `webhook`, `config`, …'
          title: Resource
          type: string
        reason:
          description: The cause within the code.
          title: Reason
          type: string
        parse_id:
          description: The parse the request recorded.
          title: Parse Id
          type: string
        extract_id:
          description: The extraction it recorded.
          title: Extract Id
          type: string
        split_id:
          description: The split it recorded.
          title: Split Id
          type: string
        classify_id:
          description: The classification it recorded.
          title: Classify Id
          type: string
        tables_id:
          description: The tables job it recorded.
          title: Tables Id
          type: string
        charts_id:
          description: The charts job it recorded.
          title: Charts Id
          type: string
        pipeline_id:
          description: The pipeline it recorded.
          title: Pipeline Id
          type: string
        batch_id:
          description: The batch it recorded.
          title: Batch Id
          type: string
        filename:
          description: The file refused.
          title: Filename
          type: string
        declared_type:
          description: The type its name declared.
          title: Declared Type
          type: string
        detected:
          description: The type its contents are.
          title: Detected
          type: string
        supported_types:
          description: The types accepted.
          items:
            type: string
          title: Supported Types
          type: array
        supported:
          description: The values accepted.
          items:
            type: string
          title: Supported
          type: array
        max_size_mb:
          anyOf:
            - type: integer
            - type: number
          description: The largest size accepted.
          title: Max Size Mb
        file_size_mb:
          anyOf:
            - type: integer
            - type: number
          description: The file's size.
          title: File Size Mb
        plan_name:
          description: Your organization's plan.
          title: Plan Name
          type: string
        pages_used:
          anyOf:
            - type: integer
            - type: number
          description: Pages used this period.
          title: Pages Used
        page_allowance:
          anyOf:
            - type: integer
            - type: number
          description: Pages the plan allows.
          title: Page Allowance
        upgrade_url:
          description: Where to change your plan.
          title: Upgrade Url
          type: string
        action_required:
          description: What to do to continue.
          title: Action Required
          type: string
        billing_info:
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
          description: Your organization's billing state, as the gate read it.
          title: Billing Info
          type: object
      required:
        - type
        - title
        - status
        - code
        - retryable
      title: Problem
      type: object
    ParseStep:
      additionalProperties: false
      description: 'The pipeline''s first step: a parse of the document you send.'
      properties:
        type:
          const: parse
          description: Always `parse`. The first step is always a parse of the document.
          title: Type
          type: string
        config:
          $ref: '#/components/schemas/ParseConfig'
          description: >-
            The parse's options, as `POST /parse` takes them in `config`, sent
            inline only. The step is checked and billed as `POST /parse` is, at
            1 credit per page.
      required:
        - type
        - config
      title: ParseStep { type, config }
      type: object
    ChartsStep:
      additionalProperties: false
      description: A step that reads the charts in the pipeline's parse.
      properties:
        type:
          const: charts
          description: Always `charts`. The step runs `POST /charts` on the parse.
          title: Type
          type: string
        config:
          $ref: '#/components/schemas/ChartsConfig'
          description: >-
            The step's options, as `POST /charts` takes them in `config`, sent
            inline only.
      required:
        - type
        - config
      title: ChartsStep
      type: object
    ExtractStep:
      additionalProperties: false
      description: >-
        A step that extracts the fields of a JSON Schema from the pipeline's
        parse.
      properties:
        type:
          const: extract
          description: Always `extract`. The step runs `POST /extract` on the parse.
          title: Type
          type: string
        config:
          $ref: '#/components/schemas/ExtractConfig'
          description: >-
            The step's options, as `POST /extract` takes them in `config`, sent
            inline only.
      required:
        - type
        - config
      title: ExtractStep
      type: object
    SplitStep:
      additionalProperties: false
      description: >-
        A step that finds which of the parse's pages belong to each topic you
        name.
      properties:
        type:
          const: split
          description: Always `split`. The step runs `POST /split` on the parse.
          title: Type
          type: string
        config:
          $ref: '#/components/schemas/SplitConfig'
          description: >-
            The step's options, as `POST /split` takes them in `config`, sent
            inline only.
      required:
        - type
        - config
      title: SplitStep
      type: object
    TablesStep:
      additionalProperties: false
      description: A step that reads the tables in the pipeline's parse.
      properties:
        type:
          const: tables
          description: Always `tables`. The step runs `POST /tables` on the parse.
          title: Type
          type: string
        config:
          $ref: '#/components/schemas/TableConfig'
          description: >-
            The step's options, as `POST /tables` takes them in `config`, sent
            inline only.
      required:
        - type
        - config
      title: TablesStep
      type: object
    FieldIssue:
      additionalProperties: false
      description: One refused part of the request.
      properties:
        field:
          description: >-
            The part as sent: a body field's path
            (`config.enhancements.detect[1]`), or `query.<name>` /
            `header.<name>`.
          title: Field
          type: string
        pointer:
          description: >-
            A body field as a JSON Pointer (RFC 6901), e.g.
            `#/config/enhancements/detect/1`. Absent for a query parameter or
            header.
          title: Pointer
          type: string
        issue:
          description: What is wrong with it.
          title: Issue
          type: string
      required:
        - field
        - issue
      title: FieldIssue
      type: object
    JsonValue: {}
    ParseConfig:
      additionalProperties: false
      description: The options for a parse.
      properties:
        model:
          description: The model to parse with.
          enum:
            - ultra-2
          title: Model
          type: string
        storage:
          $ref: '#/components/schemas/Storage'
          description: Whether the result is saved, and where.
        page_range:
          description: >-
            The pages to parse, listed as numbers and ranges from 1, such as
            `1-3, 6, 8-end` (`end` is the last page). Defaults to every page. A
            spreadsheet's pages are its sheets, hidden ones included.
          pattern: ^ *[0-9]+ *(- *([0-9]+|end) *)?(, *[0-9]+ *(- *([0-9]+|end) *)?)*$
          title: Page Range
          type: string
        prompt:
          description: Extra instructions for reading the document, added to Pulse's own.
          minLength: 1
          title: Prompt
          type: string
        extensions:
          $ref: '#/components/schemas/Extensions'
          default:
            additional_formats: []
            footnotes: false
            document_metadata: false
            word_level_bounding_boxes: false
            chunking:
              strategies: []
          description: Extra outputs to add to the result.
        enhancements:
          $ref: '#/components/schemas/Enhancements'
          default:
            detect: []
            figures:
              describe: []
              include: false
              prompt: null
            refine:
              modes: []
            spreadsheet:
              cell_formatting: false
              include_hidden: []
              raw_values: false
              trim_empty: []
      required:
        - model
      title: ParseConfig { model, storage, page_range, 3 more }
      type: object
    ChartsConfig:
      additionalProperties: false
      description: How to read the parse's charts and which files to build from them.
      properties:
        page_range:
          description: >-
            The pages to read charts from, listed as numbers and ranges from 1,
            such as `1-3, 6, 8-end` (`end` is the last page). Defaults to every
            page. Pages are numbered as in the parse's result.
          pattern: ^ *[0-9]+ *(- *([0-9]+|end) *)?(, *[0-9]+ *(- *([0-9]+|end) *)?)*$
          title: Page Range
          type: string
        data_points:
          default: 20
          description: >-
            How many points to keep per series for a chart read from pixels. A
            spreadsheet chart returns every point the workbook holds.
          maximum: 500
          minimum: 2
          title: Data Points
          type: integer
        export_formats:
          anyOf:
            - const: all
              type: string
            - items:
                enum:
                  - excel
                  - csv
                  - las
                type: string
              type: array
          default:
            - excel
          description: >-
            `excel` builds one workbook of every chart, `csv` one file of every
            chart, and `las` one file per well-log chart. `all` builds all
            three.
          title: Export Formats
        enhancements:
          $ref: '#/components/schemas/ChartsEnhancements'
          default:
            zoom: false
          description: Extra reading steps.
      title: ChartsConfig { page_range, data_points, export_formats, 1 more }
      type: object
    ExtractConfig:
      additionalProperties: false
      description: Options for extracting structured data from a completed parse.
      properties:
        page_range:
          description: >-
            The pages to read, listed as numbers and ranges from 1, such as
            `1-3, 6, 8-end` (`end` is the last page). Defaults to every page.
            Pages are numbered as in the parse's result.
          pattern: ^ *[0-9]+ *(- *([0-9]+|end) *)?(, *[0-9]+ *(- *([0-9]+|end) *)?)*$
          title: Page Range
          type: string
        prompt:
          description: Extra instructions for filling in `input_schema`.
          minLength: 1
          title: Prompt
          type: string
        input_schema:
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
          description: >-
            The JSON Schema (Draft 7) to fill in, with an object root, at least
            one property and at most 5,000 properties in all.
          title: Input Schema
          type: object
        effort:
          default: low
          description: '`high` reads the parse more carefully, at an extra charge per page.'
          enum:
            - low
            - high
          title: Effort
          type: string
        confidence:
          default: standard
          description: >-
            `agentic` gives more reliable confidence scores, at an extra charge
            per page. It must be enabled for your organization.
          enum:
            - standard
            - agentic
          title: Confidence
          type: string
        format:
          anyOf:
            - const: all
              type: string
            - items:
                enum:
                  - enriched
                  - raw
                type: string
              type: array
          default:
            - enriched
          description: >-
            `enriched` returns values with citations and confidence, `raw`
            returns the values alone, and `all` returns both.
          title: Format
      required:
        - input_schema
      title: ExtractConfig { page_range, prompt, input_schema, 3 more }
      type: object
    SplitConfig:
      additionalProperties: false
      description: 'The options for a split: the topics to find and how carefully to read.'
      properties:
        topics:
          description: >-
            The topics to find, each named once. The result lists them in this
            order.
          items:
            $ref: '#/components/schemas/Topic'
          maxItems: 200
          minItems: 1
          title: Topics
          type: array
        effort:
          default: low
          description: >-
            How carefully the document is read. `low` costs 1 credit per page,
            and `high` costs 6.
          enum:
            - low
            - high
          title: Effort
          type: string
      required:
        - topics
      title: SplitConfig { topics, effort }
      type: object
    TableConfig:
      additionalProperties: false
      description: Options for merging a parse's tables.
      properties:
        format:
          anyOf:
            - const: all
              type: string
            - items:
                enum:
                  - html
                  - json
                  - md
                type: string
              type: array
          default:
            - html
          description: >-
            `html` returns the table's HTML, `json` its headers and rows as
            text, and `md` a Markdown table. `all` returns all three.
          title: Format
        page_range:
          description: >-
            The parse result's pages to take tables from, listed as numbers and
            ranges from 1, such as `1-3, 6, 8-end` (`end` is the last page).
            Defaults to every page. Tables merge only within these pages.
          pattern: ^ *[0-9]+ *(- *([0-9]+|end) *)?(, *[0-9]+ *(- *([0-9]+|end) *)?)*$
          title: Page Range
          type: string
      title: TableConfig { format, page_range }
      type: object
    Storage:
      additionalProperties: false
      description: >-
        Whether the result is saved to your organization's Pulse dashboard, and
        in which folder.
      properties:
        save:
          description: >-
            `true` saves the result, and `false` keeps it only until
            `expires_at`, 24 hours by default. If omitted, it's saved unless
            your organization turned saving off, which also overrides `true`.
            Free plans can't send `false`.
          title: Save
          type: boolean
        folder_id:
          description: >-
            The dashboard folder to save the result in. Sending it saves the
            result, so it's refused with `save: false`. Another organization's
            folder is ignored.
          minLength: 1
          title: Folder Id
          type: string
      title: Storage { save, folder_id }
      type: object
    Extensions:
      additionalProperties: false
      description: >-
        Extra outputs to add to the result, each under the result's
        `extensions`.
      properties:
        additional_formats:
          default: []
          description: >-
            Other formats to return the document in, under
            `extensions.additional_formats`. Choose from `html` (the Markdown as
            HTML), `xml` (the elements, by page) and `tagged_md` (the Markdown
            with element ids).
          items:
            enum:
              - html
              - xml
              - tagged_md
            type: string
          title: Additional Formats
          type: array
        footnotes:
          default: false
          description: >-
            Set to `true` to find the document's footnotes and link each one to
            the elements that cite it, in `extensions.footnotes`.
          title: Footnotes
          type: boolean
        document_metadata:
          default: false
          description: >-
            Set to `true` to return the metadata the file carries, such as its
            title, authors or a PDF's form fields, in
            `extensions.document_metadata`.
          title: Document Metadata
          type: boolean
        word_level_bounding_boxes:
          default: false
          description: >-
            Set to `true` to return every word with its outline, as `Word`
            elements in `extensions.word_level_bounding_boxes`. This option must
            be enabled for your organization.
          title: Word Level Bounding Boxes
          type: boolean
        chunking:
          $ref: '#/components/schemas/Chunking'
          default:
            strategies: []
      title: Extensions { additional_formats, footnotes, document_metadata, 2 more }
      type: object
    Enhancements:
      additionalProperties: false
      description: Optional passes that add to the parse or correct it.
      properties:
        detect:
          default: []
          description: >-
            Send `["selections"]` to detect checkboxes, radio buttons and
            similar controls, and mark each ticked one `selected: true`.
          items:
            const: selections
            type: string
          title: Detect
          type: array
        figures:
          $ref: '#/components/schemas/Figures'
          default:
            describe: []
            include: false
            prompt: null
          description: Descriptions and images of the document's figures.
        refine:
          $ref: '#/components/schemas/Refine'
          default:
            modes: []
          description: Passes that correct the parse.
        spreadsheet:
          $ref: '#/components/schemas/Spreadsheet'
          default:
            include_hidden: []
            trim_empty: []
            raw_values: false
            cell_formatting: false
          description: Options for spreadsheets.
      title: Enhancements { detect, figures, refine, 1 more }
      type: object
    ChartsEnhancements:
      additionalProperties: false
      description: Extra reading steps for charts in PDFs and images.
      properties:
        zoom:
          default: false
          description: >-
            Set to `true` to re-read small or dense regions of each chart up
            close. Values are more accurate, but the job is slower. Ignored for
            spreadsheet charts.
          title: Zoom
          type: boolean
      title: ChartsEnhancements
      type: object
    Topic:
      additionalProperties: false
      description: >-
        A topic to find in the document, named as you want it back in the
        result.
      properties:
        name:
          description: >-
            The topic's name in the result, such as `Balance sheet`. It needs at
            least one letter or digit. Names that differ only in case,
            punctuation or spacing count as the same topic and are refused.
          minLength: 1
          title: Name
          type: string
        description:
          description: >-
            What belongs to this topic, such as `Statement of operations and its
            notes`. Without it, the name alone decides which pages match.
          minLength: 1
          title: Description
          type: string
      required:
        - name
      title: Topic { name, description }
      type: object
    Chunking:
      additionalProperties: false
      properties:
        strategies:
          default: []
          items:
            $ref: '#/components/schemas/SemanticStrategy'
          title: Strategies
          type: array
      title: Chunking
      type: object
    Figures:
      additionalProperties: false
      description: >-
        What to return for the document's figures: its charts, diagrams, photos
        and other pictures.
      properties:
        describe:
          default: []
          description: >-
            Send `["all"]` to describe every figure in its `description`. A
            figure that can't be described gets none, with a
            `FIGURE_DESCRIPTIONS_SKIPPED` warning on the result.
          items:
            const: all
            type: string
          title: Describe
          type: array
        include:
          default: false
          description: >-
            Set to `true` to return each figure's image, base64-encoded, in its
            `figure_base64`.
          title: Include
          type: boolean
        prompt:
          description: >-
            Extra instructions for the figure descriptions. Used only with
            `describe`.
          minLength: 1
          title: Prompt
          type: string
      title: Figures { describe, include, prompt }
      type: object
    Refine:
      additionalProperties: false
      description: Passes that check the parse against the page images and correct it.
      properties:
        modes:
          default: []
          description: >-
            The passes to run, each mode at most once. A page they can't correct
            is returned as parsed, with a `REFINE_SKIPPED` warning on the
            result.
          items:
            $ref: '#/components/schemas/RefineMode'
          title: Modes
          type: array
      title: Refine
      type: object
    Spreadsheet:
      additionalProperties: false
      description: Options for spreadsheets. Other documents ignore them.
      properties:
        include_hidden:
          default: []
          description: >-
            The hidden `rows`, `columns` or `sheets` to read. By default, hidden
            parts are skipped.
          items:
            enum:
              - rows
              - columns
              - sheets
            type: string
          title: Include Hidden
          type: array
        trim_empty:
          default: []
          description: >-
            Send `rows`, `columns` or both to drop empty but formatted ones past
            a sheet's last value. Some exported workbooks carry thousands of
            them. Kept cells keep their addresses. Applies to `.xlsx` and
            `.xlsm` files only.
          items:
            enum:
              - rows
              - columns
            type: string
          title: Trim Empty
          type: array
        raw_values:
          default: false
          description: >-
            Set to `true` to add each cell's underlying value as its
            `raw_value`, such as `1201.67` where `content` shows `$1,202`.
          title: Raw Values
          type: boolean
        cell_formatting:
          default: false
          description: >-
            Set to `true` to add each cell's formatting (font, fill, borders and
            alignment) as its `style`.
          title: Cell Formatting
          type: boolean
      title: Spreadsheet { include_hidden, trim_empty, raw_values, 1 more }
      type: object
    SemanticStrategy:
      additionalProperties: false
      description: >-
        Chunks cut where the meaning of neighboring sentences drifts apart. A
        chunk longer than

        `max_characters` is cut again. Without `max_characters`, chunk length
        has no cap.
      properties:
        strategy:
          const: semantic
          title: Strategy
          type: string
        max_characters:
          maximum: 100000
          minimum: 20
          title: Max Characters
          type: integer
      required:
        - strategy
      title: SemanticStrategy { strategy, max_characters }
      type: object
    RefineMode:
      additionalProperties: false
      description: >-
        One pass that checks the parsed content against the page images and
        corrects it.
      properties:
        mode:
          description: >-
            `tables` fixes cells and structure. `formatting` fixes bold,
            headings, lists and math, not words. `text` fixes misread words and
            numbers, not formatting. `layout` fixes a figure or table read as
            the wrong kind.
          enum:
            - tables
            - formatting
            - text
            - layout
          title: Mode
          type: string
        prompt:
          description: >-
            Extra instructions for this pass. A prompt sent with `layout` is
            refused (`REQUEST_INVALID`).
          minLength: 1
          title: Prompt
          type: string
      required:
        - mode
      title: RefineMode { mode, prompt }
      type: object
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: x-api-key

````

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