Skip to content

Admin move an abuse report

POST
/api/v1/admin/abuse-reports/{id}/status
curl --request POST \
--url https://api.deploybase.eu/api/v1/api/v1/admin/abuse-reports/example/status \
--header 'Authorization: <Authorization>' \
--header 'Content-Type: application/json' \
--data '{ "resolution": "example", "status": "example", "team_id": "example" }'

Moves a notice: new to reviewing, then reviewing to actioned or rejected. Terminal statuses are final and closing a notice starts its 12-month retention clock. The resolution text is the raw material for the Article 17 statement of reasons sent to the affected customer, so it should name the acceptable-use clause that was breached, or say plainly why the notice was rejected.

id
required
string

Abuse report ID

The requested transition

Media type application/json
object
resolution

Resolution is what we did and why. Written on every transition, so an operator can record a finding while still reviewing rather than only at closure.

string
status
string
team_id

TeamID is the team the notice turned out to be about. An outcome of triage, never an access-control key.

string
Example generated
{
"resolution": "example",
"status": "example",
"team_id": "example"
}

OK

Media type application/json
object
data
meta
object
request_id
string
timestamp
string
trace_id
string
data
object
category
string
closed_at

ClosedAt is set exactly when Status is terminal (a CHECK constraint enforces the pair) and starts the 12-month retention clock.

string
created_at
string
description
string
good_faith_declared

GoodFaithDeclared is the Art. 16(2)(d) declaration. Always true on a stored row, kept so the record shows the declaration was actually made rather than assumed.

boolean
handled_at
string
handled_by

HandledBy is the Zitadel subject of the admin who last moved the row. Text, not uuid: there is no users table (same reasoning as notices.created_by).

string
id
string
reported_urls

ReportedURLs are the flagged URLs, 1 to 10, deduplicated case-insensitively at submission. NEVER fetched by us — see the service’s validation comment. The admin UI renders them as plain text, never as links.

Array<string>
reporter_email

ReporterEmail is where the acknowledgement and the statement of reasons go. Personal data: it is never written to a log line.

string
reporter_name

ReporterName is optional and empty when not given: Art. 16(2)(c) requires a name only for notices that are not about certain offences, so a blank is a lawful notice.

string
resolution

Resolution is what we did and why, in the operator’s own words. It is the raw material for the Art. 17 statement of reasons, so it should name the acceptable-use clause that was breached, or say plainly why the notice was rejected.

string
resolved_team_id

ResolvedTeamID is the team the notice turned out to be about. ON DELETE SET NULL in the schema: an account erasure must neither be blocked by this record nor destroy it.

string
status
string
Example generated
{
"data": {
"category": "example",
"closed_at": "example",
"created_at": "example",
"description": "example",
"good_faith_declared": true,
"handled_at": "example",
"handled_by": "example",
"id": "example",
"reported_urls": [
"example"
],
"reporter_email": "example",
"reporter_name": "example",
"resolution": "example",
"resolved_team_id": "example",
"status": "example"
},
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Bad Request

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Unauthorized

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Forbidden

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Not Found

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

The transition is not allowed, or the report moved while you were working on it

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Internal Server Error

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Service Unavailable

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}