Multi scan (wizard)
These routes are not part of the Enterprise REST API (Bearer). They are for the web app: logged-in session and workspace in the URL.
Authentication: session cookie (signed-in user), same scope as single-card scan.
- POST /{workspace}/scan/chat-wizard/api/scan-multi-start — multipart: image file field. Creates the batch, stores the full photo, returns { batchId }. Call first so the URL and dashboard can show the batch before zone detection.
- POST /{workspace}/scan/chat-wizard/api/scan-multi-detect-regions — multipart: either image file field, or batchId field (use the stored batch image). JSON response: { regions: [ { x, y, width, height } ] } (normalized 0–1).
- POST /{workspace}/scan/chat-wizard/api/scan-multi — multipart: zones field (JSON string) required; either image file field, or batchId. Response: batchId, contacts[], blocked[], duplicateZones[] (zones with potential duplicates: token + candidates; confirm via POST …/api/scan-card/confirm), limit { current, max, remaining }. POST …/api/scan-card — preview; POST …/api/scan-card/confirm — persist (resolution: stop | create_new | merge).
- GET /{workspace}/scan/chat-wizard/api/batch-wizard-state/{batchId} — batch state for resume (contacts, image URL, status).
Monthly workspace quota caps created contacts; overflow regions are listed in blocked with reason scan.limit_reached.