# Build a QR batch acceptance manifest

> A batch acceptance manifest maps each source row to its exact payload, exported filename and verification result. Keep generation errors distinct from decode mismatches and destination failures. UseQR bulk exports default to full readback and provide row-level JSON/CSV reports. A faster sample mode is available and marks unchecked rows explicitly.

Source: https://useqr.app/docs/developers/qr-batch-acceptance-manifest · Last reviewed 2026-10-02 · UseQR is free forever, no signup.

---

## Preserve the row-to-file relationship

Start with a stable identifier, not a spreadsheet row number alone. Rows move when someone sorts a sheet. Store the source ID, exact resolved payload, output filename and generation status. Add a checksum of the output file if your workflow needs to detect later changes.

A useful manifest has these columns:

```csv
id,payload,filename,generation,decode,destination,approved
asset-001,https://example.com/assets/a1,asset-001.svg,ok,pending,pending,no
```

Keep this manifest in your own environment. UseQR exports generation, decode and export status as JSON or CSV. ZIP downloads include both reports and reusable settings. Add your own stable source ID, destination checks and human approvals to complete the operational record.

## Distinguish three checks

**Generation** asks whether the renderer produced an image. **Decode** asks whether the image reads back to the exact expected text. **Destination acceptance** asks whether the resulting workflow works for its intended user.

A URL can decode perfectly and return a login screen that customers cannot use. An asset token can decode correctly and still be missing from the inventory database. Record these failures separately so the right owner can fix them.

## Know the current batch limits

The browser bulk tool accepts up to 5,000 rows and defaults to reading back every generated code. A faster sample mode randomly checks 5 percent, rounded up, capped at 20 items. Sample reports mark unchecked rows explicitly. Cancel at any stage to stop the run before download. Generation failures are recorded; the remaining codes can export if readback passes. A failed readback blocks the entire export. Use Download failed rows to create a retry CSV and reload it after correcting the issue.

The API allows 1,000 items in URL-output mode, 100 rendered items, or 50 items when verification is requested. URL-output mode returns generation URLs rather than rendering and inspecting all the images immediately. For full decode acceptance, request rendered SVG batches with verification:

```json
{"output":"svg","verify":true,"items":[{"id":"asset-001","data":"https://example.com/assets/a1"}]}
```

Send this JSON to `POST /api/v1/qr/batch`. Inspect each result, including its verification outcome. Chunk larger inputs, persist completed results and retry failed items deliberately. API requests send payloads to the server; use a local pipeline for sensitive data.

## Release only the accepted set

Make missing statuses a failure, rather than treating an empty field as success. Reconcile the expected item count with the number of accepted files before printing. Then test physical proofs from the final layout. Full digital readback still does not replace print acceptance.

## FAQ

### Does a passing bulk sample prove the whole batch works?
No. It establishes the sampled results only. Per-item acceptance requires per-item checks.

### What should I retain for a reprint?
Keep the source data, resolved payloads, exported files, generation settings and acceptance manifest together.

## Try it

- https://useqr.app/bulk
- https://useqr.app/validate
