Skip to main content
POST
Submit an asynchronous extraction job
Deprecated: This endpoint is deprecated. Use /extract with async: true instead.

Overview

The asynchronous extraction endpoint accepts the same input parameters as the synchronous /extract endpoint but returns immediately with a job identifier. Use this endpoint for:
  • Large documents that may take longer to process
  • Batch processing workflows
  • Non-blocking integrations

Migration

Replace calls to /extract_async with /extract and add async: true:
The response format is identical.

Request

Document Source

Provide the document using one of these methods:

Extraction Options

Figure Processing

Settings under figure_processing control how figures (images, charts, diagrams) and embedded visuals are processed. Applies to both PDFs/images (figures detected from layout) and spreadsheets (charts and embedded images read directly from the workbook). Affects the markdown output and the bounding_boxes.Images[] array.
For spreadsheets specifically, show_images: true collects every embedded chart and image in the workbook and emits one entry per visual under bounding_boxes.Images, with chart-specific fields like chart_type, chart_title, and source_ranges populated. See Bounding Boxes for the full field list.

Spreadsheet Options

Settings under spreadsheet control how Excel workbooks (.xlsx, .xlsm, .xls) are processed. By default, hidden rows, columns, and sheets are excluded from extraction output, cell values are rendered the way Excel displays them, and table cell metadata is included. Phantom-cell trimming is opt-in. Spreadsheet responses are returned as full-result URLs by default because workbook cell_data can make the payload large even for modest .xlsx files.
These settings accept both camelCase (includeHiddenRows, onlyDataRows, cellData) and snake_case (include_hidden_rows, only_data_rows, cell_data) formats.

Phantom-cell trimming (only_data_rows / only_data_cols)

Excel files exported from claims systems, ERPs, and other automated pipelines routinely declare a “used range” that extends hundreds of thousands of rows past where the data actually ends. A typical case: a 57 MB workbook with only ~500 rows of real data, where the other ~1,000,000 rows are empty cells that exist only because they were once selected and styled. These phantom cells inflate file size by orders of magnitude and can exhaust parser memory on the extraction pipeline. Set only_data_rows: true and only_data_cols: true to have Pulse scan each sheet once before parsing, find the largest row and column containing a value or formula, and ignore everything beyond that extent. Surviving cells keep their original A1 coordinates (e.g., a value at B7 in the source is still B7 in the output), so any citation or bounding box that references a specific cell remains stable. The trim only kicks in on large sheets (≥5 MB of XML per sheet), so small, well-formed workbooks pay no overhead either way. Both flags default to false.

Pulse Ultra 2 Options

These options are available only when model: pulse-ultra-2 is set. Passing any of them with the default model returns a 400 error listing the offending fields.

Selection mark detection

Use detect_selections: true with model: pulse-ultra-2 when a document contains forms, checkboxes, radio buttons, handwritten selection marks, or other marked-choice controls. Pulse runs a specialized detection pass for these marks so selected/unselected states are less likely to be missed or confused with nearby text, boxes, or handwriting. When available, the detected state is returned on the relevant bounding-box items as selected.

Markdown output additions

When extract_figure or figure_description is enabled, figures in response.markdown include additional tags:
When refine (or refine_options) is set, markdown content is post-processed page-by-page; output is cleaner but typically grows ~1.5–3x in size for dense documents. No new tags are introduced.

Extensions

Settings under extensions enable additional processing passes or alternate output formats. Each enabled extension produces a corresponding output field under response.extensions.*. For example, enabling extensions.chunking produces response.extensions.chunking, and enabling extensions.alt_outputs.return_html produces response.extensions.alt_outputs.html.

Storage Options

Control whether extractions are saved to your extraction library:

Deprecated Fields

The following input fields are deprecated and will be removed in a future version. They are still accepted for backward compatibility.
When legacy input fields are used, the API returns a deprecation warning in the warnings array directing you to the updated field names. See the latest documentation for details.

Response

When you submit a document for async extraction, you’ll receive a response containing the job metadata:

Response Fields

Retrieving Results

After submitting an async extraction, poll the job status endpoint to retrieve results:
The job status endpoint will return the extraction results once the job is completed. See the Poll Job documentation for details on the response structure.
For detailed information on the extraction output format (markdown, bounding boxes, chunks, etc.), see the Extract documentation.

Example Usage

Submit Async Extraction

With Structured Output

Cancel a Job

Authorizations

x-api-key
string
header
required

Body

multipart/form-data

Input schema for extraction requests. Provide either file (direct upload) or fileUrl (remote URL).

file
file

Document to upload directly. Required unless fileUrl is provided.

fileUrl
string<uri>

Public or pre-signed URL that Pulse will download and extract. Required unless file is provided.

model
enum<string>

Extraction model to use. When set to pulse-ultra-2, routes the request through Pulse Ultra 2 (self-hosted VPC model) instead of the default cloud-based service. If omitted or set to default, the default model is used.

Available options:
default,
pulse-ultra-2
detectSelections
boolean

Pulse Ultra 2 only. Enables a specialized selection-mark detection pass that improves selected/unselected state accuracy for forms, checkboxes, radio buttons, handwritten checkmarks, X marks, and similar controls. Enabled by default when model is pulse-ultra-2; set to false to skip this pass. Passing true without model: pulse-ultra-2 returns a validation error.

extractionConfigId
string<uuid>

UUID of a saved extraction configuration (a "preset"). When provided, the server loads the saved configuration and applies its options on top of any inline parameters supplied in this request. Inline parameters always take precedence over preset values for the same field. Saved configs are managed via the platform UI or the input_extractions admin endpoints.

pages
string

Page range filter supporting segments such as 1-2 or mixed ranges like 1-2,5.

Pattern: ^[0-9]+(-[0-9]+)?(,[0-9]+(-[0-9]+)?)*$
forceUrl
boolean
default:false

When true, return the complete extraction result as a URL even if it is small. Spreadsheet extractions use URL delivery by default; set force_url: false to request inline spreadsheet output. URL delivery changes only the transport, not the result shape.

figureProcessing
object

Settings that control how figures and embedded visuals are processed. Applies to both PDFs/images (where figures are detected from layout) and spreadsheets (where charts and embedded images are read directly from the workbook). These options affect the markdown output and the bounding_boxes.Images[] array; they do not produce additional output fields elsewhere in the response.

extensions
object

Settings that enable additional processing passes or alternate output formats. Each enabled extension produces a corresponding output field under response.extensions.*.

spreadsheet
object

Settings for Excel/spreadsheet extraction. Controls handling of hidden rows, columns, and sheets, whether numeric cells are rendered using their display format or underlying raw value, whether table cell metadata is captured, and optional trimming of empty phantom rows/columns past the last data-bearing cell. Applies to .xlsx, .xlsm, and .xls files. Accepts both camelCase and snake_case field names.

storage
object

Options for persisting extraction artifacts. When enabled (default), artifacts are saved to storage and a database record is created.

async
boolean
default:false

If true, returns immediately with a job_id for polling via GET /job/{jobId}. Otherwise processes synchronously.

structuredOutput
object
deprecated

⚠️ DEPRECATED — Use the /schema endpoint after extraction instead. Pass the extraction_id from the extract response to /schema with your schema_config. This parameter still works for backward compatibility but will be removed in a future version.

schema
deprecated

(Deprecated) JSON schema describing structured data to extract. Use structuredOutput instead. Accepts either a JSON object or a stringified JSON representation.

schemaPrompt
string
deprecated

(Deprecated) Natural language prompt for schema-guided extraction. Use structuredOutput.schemaPrompt instead.

customPrompt
string
deprecated

(Deprecated) Custom instructions that augment the default extraction behaviour. Use figureProcessing or extensions instead.

chunking
string
deprecated

⚠️ DEPRECATED — Use extensions.chunking.chunkTypes instead. Comma-separated list of chunking strategies to apply (for example semantic,header,page,recursive). Still accepted for backward compatibility.

chunkSize
integer
deprecated

⚠️ DEPRECATED — Use extensions.chunking.chunkSize instead. Override for maximum characters per chunk when chunking is enabled.

Required range: x >= 1
extractFigure
boolean
default:false
deprecated

⚠️ DEPRECATED — Toggle to enable figure extraction in results.

figureDescription
boolean
default:false
deprecated

⚠️ DEPRECATED — Use figureProcessing.description instead. Toggle to generate descriptive captions for extracted figures.

showImages
boolean
default:false
deprecated

⚠️ DEPRECATED — Use figureProcessing.showImages instead. Embed base64-encoded images inline in figure tags in the output. Increases response size.

returnHtml
boolean
default:false
deprecated

⚠️ DEPRECATED — Use extensions.altOutputs.returnHtml instead. Whether to include HTML representation alongside markdown in the response.

thinking
boolean
default:false
deprecated

(Deprecated) Enables expanded rationale output for debugging.

Response

Asynchronous extraction job accepted

Acknowledgement returned when a request is submitted for asynchronous processing. Poll GET /job/{job_id} to check status and retrieve results.

job_id
string
required

Identifier assigned to the asynchronous job.

status
enum<string>
required

Initial status reported by the server.

Available options:
pending,
processing,
completed,
failed,
canceled
message
string

Human-readable description of the accepted job.

queuedAt
string<date-time>
deprecated

Deprecated — Timestamp indicating when the job was accepted. Retained for backward compatibility. Use GET /job/{jobId} for timing details.

credits_used
number<float> | null

Number of credits consumed by this request. Only present when the organization has the credit billing system enabled.