Imports & onboarding
Bulk resident imports and invite-based onboarding.
Overview
Property managers onboard residents via invites and bulk imports (CSVBox, CSV upload). Both surfaces are admin-only under /api/admin/.
Runbook: docs/IMPORTS_CSVBOX_SETUP.md.
Onboarding invites
Base path: /api/admin/onboarding
| Method | Path | Description |
|---|---|---|
GET | /invites | List invites (filter by tenant, unit, status) |
POST | /invite | Create invite for a unit |
GET | /invite/:inviteId | Fetch invite |
POST | /invite/:inviteId/dispatch | Send invite email/SMS |
POST | /invite/:inviteId/resend | Resend invite |
POST | /invite/:inviteId/redeem | Mark redeemed (admin override) |
Unit-level invites also available at GET /api/admin/units/:unitId/invites.
Import batches
Base path: /api/admin/imports
| Method | Path | Description |
|---|---|---|
GET | / | List import batches |
GET | /:id | Batch status |
GET | /:id/preview | Preview parsed rows |
POST | /residents/dry-run | Validate without commit |
POST | /:id/commit | Commit import (async via pg-boss) |
POST | /:id/rollback | Roll back committed batch |
GET | /unmatched-units | Residents without unit assignment |
POST | /unmatched-units/:userId/assign | Assign to existing unit |
POST | /unmatched-units/:userId/create-unit | Create unit and assign |
POST | /unmatched-units/:userId/skip | Skip unmatched row |
ImportBatch model
| Field | Values |
|---|---|
source | csvbox, csv, api, manual |
kind | residents, staff, properties, units |
status | pending, preview, processing, complete, partial, failed, rolled_back |
Related
Last verified: 2026-06-21 (commit 293c4a7)