Skip to main content

Overview

The batch endpoints let you run any step of the Pulse pipeline across many documents at once. Each batch call is fully asynchronous — it returns immediately with an ID to poll, and orchestrates parallel workers behind the scenes. /batch/schema, /batch/tables, and /batch/split always return a batch_job_id, polled via GET /job/batch_job_id for real-time progress including per-item completion status and individual child job IDs. /batch/extract returns one of two different ID fields depending on which request shape you use — see below.
Batch endpoints mirror the individual pipeline steps. Each child call goes through the exact same code path as calling the individual endpoint directly — batch is orchestration, not a separate implementation.
POST /batch/extract accepts two request shapes at the same path, and Pulse picks the right one automatically based on your request body:
  • Source and destinationinput/output/extract_options/workers. Returns batch_job_id; poll via GET /job/{'{'}id{'}'}.
  • URL list — a top-level urls array. Backed by a durable, distributed queue built for very large batches (up to ~1,000,000 documents). Returns batch_id; poll via GET /batch/{'{'}id{'}'} for O(1) status, with pagination, cancellation, and a downloadable result manifest.
/batch/schema, /batch/tables, and /batch/split accept a batch_job_id from either shape via batch_extract_id.

Pipeline

Batch endpoints can be chained together, just like their single-document counterparts: Each step takes the output of a previous step as input, either via a batch_extract_id / batch_split_id that references the parent batch job, or via an explicit list of individual IDs.

Workers

Workers process items in parallel. You can control concurrency with the workers parameter on every batch endpoint.

Batch Extract

Enumerate files from an input source and extract content from each one. POST /batch/extract accepts either request shape below at the same path. A top-level urls array selects URL-list processing; input and output select source/destination processing.
See Extract for details on extract_options (pages, figure processing, extensions, etc.).

Source and destination request

POST /batch/extract Multipart file uploads (-F "file=@...") are also accepted at this same path instead of a JSON body — see Input Sources.

Source and destination response (202)

The batch_job_id from a batch extract can be used in two ways:
  • Batch Schema — Pass it as batch_extract_id to POST /batch/schema to apply the same schema to each document independently (one result per document).
  • Multi-Extraction — Pass it as extraction_id to POST /schema to combine all documents and apply the schema to the composite (one merged result). See Multi-Extraction Mode.

URL-list request

POST /batch/extract Built for very large batches (up to ~1,000,000 documents) via a durable, distributed queue rather than in-process workers. URL-only — no S3 prefix, inline base64, or multipart upload input. There is no separate output field for this shape — results are managed by Pulse and retrieved via the result manifest (see URL-list batch status below), not written to a caller-specified destination.

URL-list response (202)

Example — S3 Source

Example — Upload Files from Folder

Example — URL list (large batches)

A top-level urls array selects URL-list processing automatically. Shown here as curl; check the SDK changelog for native urls= support in your language.

Batch Schema

Apply the same schema to each document independently, producing one result per extraction. Supports two modes, inferred from input:
  • Single mode — Provide extraction_ids or batch_extract_id with schema_config
  • Split mode — Provide split_ids or batch_split_id with split_schema_config
Batch Schema vs Multi-Extraction — these solve different problems:
  • Batch Schema (POST /batch/schema) applies the same schema to each document separately — you get N results for N documents.
  • Multi-Extraction (POST /schema with a batch extract ID or extraction_ids) combines all documents into one composite and applies the schema once — you get a single result with data merged from all sources.
If you need to pull data that spans across multiple files (e.g., loss data in one file + exposure data in another), use Multi-Extraction instead.
See Schema for details on schema_config, split_schema_config, and the difference between single and split modes.

Request — POST /batch/schema

Response (202)

Example — Single Mode

Example — Split Mode


Batch Tables

Extract tables from multiple existing extractions.
See Tables for details on tables_config (merge, table format, etc.).

Request — POST /batch/tables

Response (202)

Example


Batch Split

Split multiple extractions into topics.
See Split for details on split_config (topic definitions with names and descriptions).

Request — POST /batch/split

Response (202)

Example


Input and Output

Input Sources

Batch Extract accepts one of the following input sources via JSON body: Alternatively, you can upload files directly via multipart form data instead of a JSON body:
All other batch endpoints reference prior results via IDs rather than raw files.

Output Destinations

Every batch endpoint writes results to an output destination. You can specify one or both:

Source/destination batch status

Use this flow for a source/destination request that returned batch_job_id. For a URL-list request, use URL-list batch status instead. GET /job/{'{'}id{'}'} does not accept a batch_id.
Poll GET /job/batch_job_id to monitor a batch job. The response includes a result object with structured progress:
Each child job_id can be polled individually for detailed results.

Polling Example


URL-list batch status

For batches created with a URL-list request, status is O(1) regardless of batch size — no need to page through per-item results just to check overall progress.

GET /batch/{'{'}batch_id{'}'}

curl

GET /batch/{'{'}batch_id{'}'}/jobs?status=&cursor=

Paginated per-document drill-down (100 per page). status optionally filters to one of pending, processing, completed, failed, canceled. Keep following next_cursor until it’s null.
curl

Cancellation

Use DELETE /job/{'{'}batch_job_id{'}'} for source/destination batches. Use POST /batch/{'{'}batch_id{'}'}/cancel for URL-list batches.
Cancel a batch job with DELETE /job/batch_job_id. This cascades to all child jobs that are still pending or processing.

POST /batch/{'{'}batch_id{'}'}/cancel (URL list)

Pending children are canceled outright; children already processing run to natural completion rather than being force-killed.
curl

Full Pipeline Example

Process a folder of SEC filings: extract all files, apply a schema, extract tables, split by topic, and apply per-topic schemas.

Extract

Individual file extraction — config options apply to Batch Extract

Schema

Single/split schema extraction — config options apply to Batch Schema

Tables

Table extraction — config options apply to Batch Tables

Split

Topic splitting — config options apply to Batch Split

Poll Job

Poll batch job progress

Cancel Job

Cancel a batch job and all child jobs