---
title: "List extractions"
method: GET
path: "/extractions"
tags: ["Extractions"]
---

# List extractions

`GET /extractions`

## Request

- Base URL: `https://api.invoicedataextraction.com/v1`
- URL: `https://api.invoicedataextraction.com/v1/extractions`
- Auth: HTTP bearer

Your extractions, newest first, as slim summary items with cursor pagination. For the
full record of one extraction use `getExtractionDetails`; for its rows,
`getExtractionResults`.

Rate limit: 60 requests per minute per API key.

## Query parameters

- `status` 'processing' | 'input_required' | 'completed' | 'failed' | 'cancelled'
- `submission_method` 'api' | 'web_app'
- `created_after` string, date-time
- `created_before` string, date-time
- `scope` 'own' | 'team'
- `limit` integer
- `cursor` string

## Response `200`

One page of extractions.

- ListExtractionsResponse
  - `success` true, required
  - `extractions` ExtractionListItem[], required
    - `extraction_id` string, uuid, required
    - `submission_id` string, nullable, required: `null` for extractions submitted from the web dashboard.
    - `task_name` string, nullable, required
    - `status` 'processing' | 'input_required' | 'completed' | 'failed' | 'cancelled', required
    - `created_at` string, date-time, required
    - `submission_method` 'api' | 'web_app', required
    - `file_count` integer, required
    - `file_names_preview` string[], required: Up to the first five file names.
    - `file_names_truncated` boolean, required
    - `output_structure` 'automatic' | 'per_invoice' | 'per_line_item' | 'null', nullable, required
    - `credits_deducted` integer, nullable
    - `available_outputs` string[]
    - `output_expires_at` string, date-time
    - `progress` integer
    - `answer_by` string, date-time
    - `cancellation_reason` 'user' | 'unanswered' | 'answers_rejected': `user`: cancelled from the dashboard or with `cancelExtraction`. `unanswered`: a question was not answered by `answer_by`. `answers_rejected`: three answers were refused.
    - `error` object
      - `code` 'INSUFFICIENT_CREDITS' | 'FILE_PAGE_LIMIT_EXCEEDED' | 'ENCRYPTED_FILE' | 'CONCURRENT_TASK_LIMIT' | 'NO_PAGES_FOUND' | 'VALIDATION_FAILED' | 'PROMPT_REJECTED' | 'PROMPT_UNCLEAR' | 'FILE_SIZE_LIMIT_EXCEEDED' | 'PROCESSING_FILE_SIZE_LIMIT_EXCEEDED' | 'SUBMISSION_STALLED' | 'INTERNAL_ERROR', required: Why an extraction failed. Retryable codes may succeed when submitted again with a new `submission_id`: `CONCURRENT_TASK_LIMIT` (as many extractions running as the account allows, 15 by default and more on request, counting those started in the web app), `SUBMISSION_STALLED`, `INTERNAL_ERROR`. The others need a change first: `INSUFFICIENT_CREDITS` (details: `credits_required`, `credits_balance`, `credits_reserved`), `FILE_PAGE_LIMIT_EXCEEDED` and `ENCRYPTED_FILE` (details: `file_names`), `NO_PAGES_FOUND`, `VALIDATION_FAILED`, `PROMPT_REJECTED`, `PROMPT_UNCLEAR`, `FILE_SIZE_LIMIT_EXCEEDED`, `PROCESSING_FILE_SIZE_LIMIT_EXCEEDED`.
      - `retryable` boolean, required
    - `submitted_by` SubmittedBy
      - `email` string, nullable, required
  - `has_more` boolean, required
  - `next_cursor` string, nullable, required

## Other responses

- `400`: `INVALID_INPUT`: the request does not match the contract; `details.issues` lists each problem with its `path`.
- `401`: `UNAUTHENTICATED`, `API_KEY_EXPIRED` or `API_KEY_REVOKED`.
- `403`: `FORBIDDEN`: `scope=team` from a caller who is not a team admin.
- `429`: `RATE_LIMITED`: wait `details.retry_after_seconds` (also the `Retry-After` header), then retry.
- `500`: `INTERNAL_ERROR`: retry after a short delay.

---

[API](https://skmtc.dev/invoicedataextraction/apis/invoice-data-extraction-api.md) · [All operations](https://skmtc.dev/invoicedataextraction/apis/invoice-data-extraction-api/llms.txt) · [OpenAPI document](https://skmtc.dev/invoicedataextraction/apis/invoice-data-extraction-api/revisions/16d920350483?raw)
