CLEMA protocol

Reports

report.create tells the service's staff of one thing that breaks its rules: a message the reporter can see (msg_id), a person (user_id), or a group or a channel they are in (conversation_id), for a reason — spam, scam, abuse, adult, impersonation, violence or other — and in their own words, comment, up to 500 characters of text — line breaks and tabs included, other control characters not — if they like. It answers with no data: the reporter is told nothing more of it.

{"id":"report-1","type":"report.create","data":{"msg_id":"1042","reason":"spam","comment":"Sends this to everybody"}}
{"id":"report-1","type":"report.create","ok":true}

Staff see a message reported as it was then, whatever becomes of it after. Reports of the same thing gather in one while staff have not decided it, and reporting a thing again changes nothing. A thing that cannot be reported is invalid_state: one's own message, oneself, one's own group or channel, one of the service's own accounts, or a direct conversation, whose person is reported instead. One the reporter cannot see is not_found; reporting too much is rate_limited.