Submit a text report
POST /api/v1/msg
Every Guardyn report contains one required text value. The studio decides what its reporting interface collects and sends:
- Reported message: Put the specific filtered chat or in-game text being reported in
text. You may also include up to two messages before and two messages after it incontext. - Written report: Put the player's complete written description in
textand omitcontext. This is still one text report; do not split the statement into artificial chat messages.
In both cases, scoped_user_id identifies the player being reported. Guardyn receives only the fields that the studio's server chooses to submit.
Reported message example
{
"game_id": "game_ab12cd34",
"client_report_id": "8e894f17-73e4-4f2a-9d5e-038b52527698",
"scoped_user_id": "51028391",
"text": "reported filtered chat message",
"context": [
{ "position": "before-1", "text": "earlier filtered message" },
{ "position": "after-1", "text": "later filtered message" }
],
"priority": "normal",
"roblox_prompt_status": "shown"
}
Written report example
If the interface simply asks a player to write what happened, send that answer as the single text value:
{
"game_id": "game_ab12cd34",
"client_report_id": "d8185287-b044-432d-a22a-130839515822",
"scoped_user_id": "51028391",
"text": "This player repeatedly followed me between rooms and continued insulting me after I asked them to stop.",
"priority": "normal",
"roblox_prompt_status": "shown"
}
No context array is needed for this type of report.
Fields
| Field | Required | Notes |
|---|---|---|
game_id | Yes | Guardyn game ID, not the Roblox universe ID |
client_report_id | Recommended | 1-128 URL-safe characters; makes retries idempotent |
scoped_user_id | Yes | Identifier from Player.User.Id in this game |
text | Yes | One filtered text value, 1-1,000 characters: either the reported message or the reporter's written statement |
context | No | Up to four related chat messages; omit this for a standalone written report. Guardyn stores every context participant as Redacted |
priority | No | normal or high; defaults to normal |
roblox_prompt_status | No | shown, accepted, or dismissed; defaults to shown |
Guardyn does not accept or store the reporter's scoped identifier because it is not needed to review the submitted report text.
Accepted response
{
"case_id": "GDN-2026-000184",
"status": "accepted",
"roblox_report_prompt": "required_in_game"
}
During the three-day grace period, status is collected_view_only.
Idempotent retry
Reusing the same client_report_id for the same workspace and game returns the original case without creating another report:
{
"case_id": "GDN-2026-000184",
"status": "accepted",
"duplicate": true,
"roblox_report_prompt": "required_in_game"
}