Submits up to 100 invoice XML files in a single multipart request and imports them asynchronously, using the same per-file pipeline as the web-UI bulk upload.
Processing is always asynchronous. This endpoint returns 202 Accepted immediately with the batch ID and processing status. Use the GET /accounts/{account}/invoices/imports/{id} endpoint to poll for per-file outcomes, or subscribe to the invoice_import.finished webhook event to be notified when the whole batch finishes.
Per-file deduplication: files whose SHA-256 digest is already present in the project are recorded with error_message: duplicated_document instead of being re-imported. Two files in the same batch with the same digest also collide — the second receives the same dedup marker.
Filename correlation: the results[].filename field echoes the multipart filename for items that have not yet been imported. Once an item is imported, the polymorphic association on the wrapper row swaps from the original Attachment to the resulting Invoice and the filename is no longer accessible. Clients correlate imported items by the explicit results[].index (zero-based position in the original upload, always present) or by invoice_id.
Webhook payload note: the invoice_import.finished webhook carries only the batch summary (batch_id, status, summary, status_url). Per-file results are not included to keep the payload under the web_hook_calls.data 65535-byte cap — fetch them via the status_url GET endpoint.
Limits: Maximum 100 files per batch.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
