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

# Firecrawl Batch Scrape

> Scrape many URLs in one asynchronous job — submit a list, then poll the job for status and results.

Scrape many URLs in a single **asynchronous job**. Provide a list of URLs; the batch runs in the background and you poll it for status and results.

**Lifecycle**

1. **Submit** — `POST /apis/v1/firecrawl/batch-scrape` with the batch body and a required `Idempotency-Key` header. On success you get back `202 Accepted`, a `Location` header pointing at the job resource (`/apis/v1/firecrawl/batch-scrape/{jobId}`), and a job object whose `status` starts as `queued`.
2. **Poll** — `GET /apis/v1/firecrawl/batch-scrape/{jobId}` and repeat until `status` is terminal: `completed`, `failed`, or `cancelled`. When `completed`, the scraped documents are in `output`.
3. **List** — `GET /apis/v1/firecrawl/batch-scrape` (optional `limit`, `status`, `cursor` query params).
4. **Cancel** — `POST /apis/v1/firecrawl/batch-scrape/{jobId}/cancel`.

Every URL must be a unique HTTPS URL and must not be a PDF; you can submit 1 to 1000 URLs per job. Billing is metered per Firecrawl credit — 1 credit per page scraped — so total cost scales with the pages actually processed. To follow links from a single root instead of listing URLs, use [`post_firecrawl-crawl`](/docs/api-reference/search/post_firecrawl-crawl).


## OpenAPI

````yaml openapi/firecrawl.json POST /firecrawl/batch-scrape
openapi: 3.0.0
info:
  title: Firecrawl API
  version: 1.0.0
  description: >-
    Unified API documentation for Firecrawl endpoints including Scrape, Search,
    Map, Parse, Crawl, and Batch Scrape. Scrape, Search, Map, and Parse are
    synchronous. Crawl and Batch Scrape are asynchronous: the caller submits a
    job and then polls the returned job resource for status and results.


    Billing is metered per Firecrawl credit consumed rather than a flat
    per-request price, so total cost scales with the number of pages, links, or
    results the job produces. Approximate credit usage: Scrape = 1 credit per
    page, Map = 1 credit per page, Search = about 2 credits per 10 results,
    Crawl = 1 credit per page, Batch Scrape = 1 credit per page. The USD rate
    per credit depends on your tier (normal $0.005, vip $0.004, svip $0.0034).
servers:
  - url: https://api.aisa.one/apis/v1
security:
  - bearerAuth: []
paths:
  /firecrawl/batch-scrape:
    post:
      tags:
        - https://docs.firecrawl.dev/api-reference/endpoint/batch-scrape
      summary: Submit an asynchronous batch scrape job.
      description: >-
        Asynchronous. Scrape many URLs in one background job.


        Lifecycle:

        1. Submit — POST /firecrawl/batch-scrape with the batch body and a
        required `Idempotency-Key` header. On success the API returns HTTP 202
        Accepted, a `Location` header pointing at the job resource
        (`/apis/v1/firecrawl/batch-scrape/{jobId}`), and an
        integration_async_job body with `status` = queued.

        2. Poll — GET /apis/v1/firecrawl/batch-scrape/{jobId} until `status` is
        terminal (completed, failed, or cancelled). When completed, the scraped
        documents are in `output`.

        3. List — GET /apis/v1/firecrawl/batch-scrape (optional `limit`,
        `status`, `cursor` query params).

        4. Cancel — POST /apis/v1/firecrawl/batch-scrape/{jobId}/cancel.


        Every URL must be a unique HTTPS URL and must not be a PDF; 1 to 1000
        URLs per job. Billed at 1 Firecrawl credit per page scraped; total cost
        scales with the pages actually processed.
      parameters:
        - in: header
          name: Idempotency-Key
          required: true
          schema:
            type: string
            maxLength: 191
          description: >-
            Unique key (1 to 191 characters) that makes the submit idempotent.
            Re-submitting with the same key returns the original job.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                urls:
                  type: array
                  items:
                    type: string
                    format: uri
                  minItems: 1
                  maxItems: 1000
                  description: >-
                    1 to 1000 unique HTTPS URLs to scrape. PDF URLs are not
                    supported.
                  example:
                    - https://docs.firecrawl.dev
                    - https://docs.firecrawl.dev/introduction
                maxConcurrency:
                  type: integer
                  minimum: 1
                  maximum: 20
                  description: Maximum number of concurrent scrapes (1 to 20).
                onlyMainContent:
                  type: boolean
                  description: Return only the main content of each page.
                  default: true
                includeTags:
                  type: array
                  items:
                    type: string
                    maxLength: 128
                  maxItems: 50
                  description: HTML tags/selectors to keep.
                excludeTags:
                  type: array
                  items:
                    type: string
                    maxLength: 128
                  maxItems: 50
                  description: HTML tags/selectors to drop.
                maxAge:
                  type: integer
                  minimum: 0
                  maximum: 31536000000
                  description: Maximum acceptable cache age in milliseconds.
                minAge:
                  type: integer
                  minimum: 0
                  maximum: 31536000000
                  description: >-
                    Minimum cache age in milliseconds before a page is
                    refetched.
                timeout:
                  type: integer
                  minimum: 1000
                  maximum: 300000
                  description: Per-page timeout in milliseconds.
              required:
                - urls
      responses:
        '202':
          description: >-
            Batch scrape job accepted. The Location header points at the job
            resource; poll it until terminal.
          headers:
            Location:
              schema:
                type: string
              description: >-
                Path of the created job resource, e.g.
                /apis/v1/firecrawl/batch-scrape/{jobId}.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncJob'
components:
  schemas:
    AsyncJob:
      type: object
      description: >-
        An asynchronous integration job. Returned by the submit call (HTTP 202)
        and by the poll/detail call. Poll the job by its id until status is a
        terminal value (completed, failed, or cancelled).
      properties:
        id:
          type: string
          description: Unique AIsa job identifier. Use it to poll, list, or cancel the job.
          example: iaj_01HZY8Q2M4K7N9V3T6W1X0B2C3
        object:
          type: string
          description: Always "integration_async_job".
          example: integration_async_job
        endpoint:
          type: string
          description: The submit endpoint this job belongs to.
          example: /apis/v1/firecrawl/crawl
        status:
          type: string
          enum:
            - queued
            - running
            - completed
            - failed
            - cancelled
          description: >-
            Customer-facing lifecycle status. queued and running are
            non-terminal; completed, failed, and cancelled are terminal.
        createdAt:
          type: string
          format: date-time
          description: When the job was accepted.
        completedAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            When the job reached a terminal status. Null while the job is still
            queued or running.
        pricing:
          type: object
          properties:
            currency:
              type: string
              example: USD
            authorizedMicrosUSD:
              type: integer
              description: >-
                Amount authorized (held) when the job was admitted, in
                micro-USD. Metered jobs settle to the actual credits consumed.
            finalMicrosUSD:
              type: integer
              nullable: true
              description: >-
                Final settled cost in micro-USD once the job is terminal. Null
                until settlement.
            billingMode:
              type: string
              description: Billing mode for the job.
              example: metered_result
        output:
          description: >-
            Job result payload. Present only once status is completed. For crawl
            this is the array of scraped pages; for batch scrape it is the array
            of scraped documents.
          nullable: true
        outputExpired:
          type: boolean
          description: >-
            True when the result has been retained past its retention window and
            is no longer retrievable.
        error:
          type: object
          nullable: true
          description: Present when status is failed. Null otherwise.
          properties:
            code:
              type: string
              description: Machine-readable error code.
            message:
              type: string
              description: Human-readable error message.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````