Core API
Batch upload
Upload up to 10 documents in a single request.
Batch endpoint
POST/v1/invoices/batch
curl -X POST https://api.lumiparser.com/v1/invoices/batch \
-H "Authorization: Bearer inv_live_YOUR_KEY" \
-F "file=@invoice1.pdf" \
-F "file=@invoice2.pdf"By default every file in a batch is parsed as an invoice. Send an optional document_type field (one of invoice, receipt, purchase_order, bank_statement) to apply one type to the whole batch — it must come before the file parts in the request body. A single batch can only contain one document type.
curl -X POST https://api.lumiparser.com/v1/invoices/batch \
-H "Authorization: Bearer inv_live_YOUR_KEY" \
-F "document_type=receipt" \
-F "file=@receipt1.png" \
-F "file=@receipt2.png"Response
Returns 202 Accepted immediately with an array of job IDs:
{
"jobs": [
{ "invoice_id": "inv_a1b2c3d4e5f6g7h8", "file_name": "invoice1.pdf", "status": "pending" },
{ "invoice_id": "inv_b2c3d4e5f6g7h8i9", "file_name": "invoice2.pdf", "status": "pending" },
{ "invoice_id": "inv_c3d4e5f6g7h8i9j0", "file_name": "receipt.png", "status": "pending" }
]
}Each document is parsed in the background. Use webhooks to receive a notification per document as it completes, or poll each ID individually.
Limits
| Max files per request | 10 |
| Max file size per file | 5MB (free) / 25MB (paid) |
| Quota consumption | 1 credit per file (not per request) |
| Unsupported files | Silently skipped — check jobs array length |
Node.js example
const FormData = require('form-data');
const fs = require('fs');
const fetch = require('node-fetch');
const form = new FormData();
form.append('document_type', 'receipt'); // must be appended before the files
form.append('file', fs.createReadStream('./receipt1.png'));
form.append('file', fs.createReadStream('./receipt2.png'));
const res = await fetch('https://api.lumiparser.com/v1/invoices/batch', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.INVOICE_API_KEY}` },
body: form,
});
const { jobs } = await res.json();
console.log(`Queued ${jobs.length} documents`);
// jobs[0].invoice_id → poll or wait for webhook