Dismiss report
Reports
Dismiss report
Resolve an abuse report with no action against the accused. Transitions OPEN → DISMISSED. Idempotent.
POST
Dismiss report
Overview
Resolves an abuse report by dismissing it — the moderator has reviewed the case and decided no action is warranted. Transitions the report row fromOPEN → DISMISSED and stamps resolvedBy, resolvedAt, and (optionally) resolutionReason.
Idempotent: re-dismissing an already-DISMISSED report returns the existing row unchanged (no new audit row, no re-stamp). Calling this on a report whose status is WARNED or BANNED returns 409 STATE_CONFLICT — terminal states do not transition back.
See Admin reports feed for the queue this is acting on.
Authentication
Bearer <accessToken> with scope: 'admin' required.
Path parameters
| Field | Type | Required | Notes | Example |
|---|---|---|---|---|
id | string | yes | The report id from the list endpoint. 1..64 chars. | 665a3f1e9c2b0a0001a4d201 |
Query parameters
None.Request body
The body is optional — pass an empty body, or include a moderator note that is stored on the row asresolutionReason.
| Field | Type | Required | Notes | Example |
|---|---|---|---|---|
reason | string | no | Internal moderator note, 1..1000 chars. Stored on reports.resolutionReason. Not surfaced to the reporter or the accused. | Transcript shows the message was a joke between friends. |
Example payload
Response — 200 OK
Returns the full updated report row (same shape as list).
| Field | Type | Notes |
|---|---|---|
id | string | Report id. |
status | string | Always "DISMISSED" for a successful call. |
resolvedBy | string | The admin id (from the bearer token). |
resolvedAt | string (ISO 8601) | Server clock at the moment of resolution. |
resolutionReason | string | null | Echo of the request reason, or null if omitted. |
reporter, accused | object | null | Embedded user summaries. |
transcriptSnapshot | array | Immutable transcript captured at report time. Unchanged by this endpoint. |
Error responses
| Status | Code | Meaning |
|---|---|---|
| 400 | VALIDATION_FAILED | reason longer than 1000 chars, or body is not JSON. |
| 401 | UNAUTHENTICATED | Missing / malformed / expired admin token, or non-admin scope. |
| 403 | FORBIDDEN | Caller is a FINANCE admin. SUPER or MODERATOR required. |
| 404 | NOT_FOUND | No report exists with that id. |
| 409 | STATE_CONFLICT | Report is in WARNED or BANNED — terminal states never transition back. |
Example error — 409 STATE_CONFLICT
Side effects
- Report row updated:
status = DISMISSED,resolvedBy,resolvedAt,resolutionReasonset. - One admin audit row written (
action: report.dismiss,targetType: report,targetId: <reportId>). - No notification is sent to the reporter or the accused (dismissal is silent).
See also
- List reports — the queue feed.
- Warn user (from report) — escalate one step.
- Ban user (from report) — terminal escalation.
curl
Postman
Seedocs/postman/swappr.postman_collection.json → Admin Reports → Dismiss.