Reject tenancy verification
Tenancy
Reject tenancy verification
Reject a tenancy verification with a required reason and flip the user to REJECTED. SUPER or MODERATOR only.
POST
Reject tenancy verification
Overview
Rejects a tenancy verification. Updates the verification row (reviewStatus = REJECTED, reviewedBy, reviewedAt, reviewNotes = reason) and flips users.tenancyStatus → REJECTED. A reason is required so the user has actionable feedback.
Idempotent: re-rejecting an already-REJECTED row is a no-op.
Authentication
Bearer <accessToken> with scope: 'admin' required (requireAdmin).
Path parameters
| Name | Type | Required | Notes | Example |
|---|---|---|---|---|
id | string | yes | Verification row ObjectId, 1..64 chars. | 66400a8f1c2b4d5e6f7ab000 |
Query parameters
None.Request body
| Field | Type | Required | Notes | Example |
|---|---|---|---|---|
reason | string | yes | 1..500 chars. Stored as reviewNotes and surfaced to the user. | Document is illegible — please re-upload a clear scan. |
Example payload
Response — 200 OK
Returns the updated tenancy verification row with reviewStatus: "REJECTED" and reviewNotes set.
Error responses
| Status | Code | Meaning |
|---|---|---|
| 400 | VALIDATION_FAILED | reason missing, empty, or over 500 chars. |
| 401 | UNAUTHENTICATED | Missing, malformed, expired, or non-admin-scope token. |
| 403 | FORBIDDEN | Caller is a FINANCE admin. |
| 404 | NOT_FOUND | No verification row with that id. |
| 409 | STATE_CONFLICT | Row is already APPROVED — cannot be flipped to rejected through this endpoint. |
Example error — 400 VALIDATION_FAILED
Side effects
- Verification row +
users.tenancyStatusupdated. - Audit-log row written (action
tenancy.reject).
See also
- Tenancy queue — find the row to reject.
- Approve tenancy — the opposite decision.
- Tenancy retention — the 30-day clock also starts at
reviewedAtfor rejected rows.
curl
Postman
Seedocs/postman/swappr.postman_collection.json → Admin Tenancy → Reject.