---
title: "Bulk Download Invoice Pdfs"
method: POST
path: "/v2/invoices/bulk/pdf"
tags: ["invoices"]
---

# Bulk Download Invoice Pdfs

`POST /v2/invoices/bulk/pdf`

## Request

- Base URL: `https://api.stuut.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stuut.ai/v2/invoices/bulk/pdf`
- Auth: HTTP bearer

Bulk Download Invoice PDFs

Enqueue an async export that downloads stored PDFs for up to 250 invoices, zips them,
uploads to S3, and emails you a download link when ready.

Poll `GET /v2/exports/{id}` for status and a presigned download URL once complete.

## Request body

- BulkPdfDownloadRequest: Request body for bulk invoice PDF async export (max 250 invoices).
  - `invoice_ids` string[], required

## Response `200`

Successful Response

- CreateExportResponse: Response from creating or deduplicating an export.
  - `export` ExportResponse, required: Response containing export details.
    - `id` string, required
    - `export_type` 'invoice' | 'partner' | 'payment' | 'analytics' | 'bank_transaction' | 'credit_memo' | 'customer_transaction' | 'invoice_pdf' | 'audit_log' | 'ask_stuut_table' | 'journal_entry' | 'ar_aging' | 'collections_readiness', required
    - `status` 'pending' | 'processing' | 'completed' | 'failed', required
    - `filters` object, nullable, required
    - `format` 'csv' | 'json', nullable, required
    - `error_code` 'limit_exceeded' | 'timed_out' | 'generation_failed', required
    - `record_count` integer, nullable, required: Number of rows included in the export. Journal exports in both CSV and JSON skip events without accounting snapshots and can complete with those events omitted. The response does not include a skipped-event count.
    - `download_url` string, nullable, required
    - `created_at` string, date-time, required
    - `started_at` string, date-time, required
    - `completed_at` string, date-time, required
    - `requested_by` ExportUserRef, required: Reference to the user who requested the export.
      - `id` string, required
      - `name` string, required
      - `email` string, required
    - `report_config_id` string, nullable, required: The report config this export was sent for, when it is a report send.
  - `was_existing` boolean, required: True if an existing pending export was returned instead of creating new

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/stuut/apis/stuut-api.md) - [All operations](https://skmtc.dev/stuut/apis/stuut-api/llms.txt) - [OpenAPI document](https://skmtc.dev/stuut/apis/stuut-api/revisions/ff0ad16a55ff?raw)
