Sanctions and bans. Every route hangs off https://api.blixye.com/v1 and carries the key in the Authorization header (see Keys and scopes). This page is generated from the API's OpenAPI specification; if it is not here, the API does not do it.
Sanctions and bans. Every route hangs off https://api.blixye.com/v1 and carries the key in the Authorization header (see Keys and scopes). This page is generated from the API's OpenAPI specification; if it is not here, the API does not do it.
NOTE
Sanctions and bans. Every route hangs off https://api.blixye.com/v1 and carries the key in the Authorization header (see Keys and scopes). This page is generated from the API's OpenAPI specification; if it is not here, the API does not do it.
NOTE
GET /sanctions: List sanctions (moderation:read)
POST /sanctions: Issue a sanction (moderation:write)
GET /bans: List bans (moderation:read)
List sanctions
List sanctions
NOTE
List sanctions
GET /sanctions. Moderation sanctions. Scope: moderation:read.
GET /sanctions. Moderation sanctions. Scope: moderation:read.
NOTE
GET /sanctions. Moderation sanctions. Scope: moderation:read.
Parameters:
Parameters:
NOTE
Parameters:
NOTE
limit (query; integer, 1-100, default 25, optional): Page size (1-100).
cursor (query; string, optional): The meta.next_cursor of the previous page.
order (query; string, one of: desc, asc, default desc, optional): desc = newest first.
member_id (query; string, optional): Sanctioned member (usr_…).
status (query; string, optional): active, expired or revoked.
curl "https://api.blixye.com/v1/sanctions?limit=25" \
-H "Authorization: Bearer bx_live_…"
curl "https://api.blixye.com/v1/sanctions?limit=25" \
-H "Authorization: Bearer bx_live_…"
NOTE
curl "https://api.blixye.com/v1/sanctions?limit=25" \
-H "Authorization: Bearer bx_live_…"
Response 200: A page of sanctions.
Response 200: A page of sanctions.
NOTE
Response 200: A page of sanctions.
{
"data": [
{
"id": "san_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"character_id": "chr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type": "Warning",
"reason": "Random deathmatch",
"description": "Insulted another player in OOC chat.",
"notes": null,
"images": [
"string"
],
"warn_points": 1,
"is_ban": false,
"status": "active",
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"issued_by_name": "Admin",
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z"
}
],
"meta": {
"next_cursor": "cur_3tq0vJ1c9Ydl2Hk7WqPzEw"
}
}
{
"data": [
{
"id": "san_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"character_id": "chr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type": "Warning",
"reason": "Random deathmatch",
"description": "Insulted another player in OOC chat.",
"notes": null,
"images": [
"string"
],
"warn_points": 1,
"is_ban": false,
"status": "active",
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"issued_by_name": "Admin",
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z"
}
],
"meta": {
"next_cursor": "cur_3tq0vJ1c9Ydl2Hk7WqPzEw"
}
}
NOTE
{
"data": [
{
"id": "san_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"character_id": "chr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type": "Warning",
"reason": "Random deathmatch",
"description": "Insulted another player in OOC chat.",
"notes": null,
"images": [
"string"
],
"warn_points": 1,
"is_ban": false,
"status": "active",
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"issued_by_name": "Admin",
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z"
}
],
"meta": {
"next_cursor": "cur_3tq0vJ1c9Ydl2Hk7WqPzEw"
}
}
Errors (the format is in Errors):
Errors (the format is in Errors):
NOTE
Errors (the format is in Errors):
NOTE
400: Malformed request (invalid limit, cursor, JSON, Idempotency-Key, or an API key sent in the URL).
401: Missing, invalid, revoked or expired API key (codes missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: The key lacks a scope (missing_scope), the IP is not allowed (ip_not_allowed), the server's plan has no API (plan_required) or an MDT module is off (module_off).
404: Not found in this server. An id from another server is always a 404.
429: Too many requests for this API key (the limit is per key and per minute, by plan). Too many failed authentications from one IP also give a 429.
Issue a sanction
Issue a sanction
NOTE
Issue a sanction
POST /sanctions. Issues a sanction through the same logic as the moderation panel: the type's defaults apply unless you send the value, and the response says what the escalation policy recommends. If the server disables free-text reasons, send type_id. Scope: moderation:write.
POST /sanctions. Issues a sanction through the same logic as the moderation panel: the type's defaults apply unless you send the value, and the response says what the escalation policy recommends. If the server disables free-text reasons, send type_id. Scope: moderation:write.
NOTE
POST /sanctions. Issues a sanction through the same logic as the moderation panel: the type's defaults apply unless you send the value, and the response says what the escalation policy recommends. If the server disables free-text reasons, send type_id. Scope: moderation:write.
Parameters:
Parameters:
NOTE
Parameters:
NOTE
Idempotency-Key (header; string, optional): Makes the POST safe to retry: the same key returns the first response (with Idempotent-Replayed: true) for 24 h. The same key with a different body is a 422.
Body (JSON):
Body (JSON):
NOTE
Body (JSON):
NOTE
member_id (usr_… id, required): Member to sanction.
character_id (chr_… id, nullable, optional): One of that member's characters.
type_id (sty_… id, nullable, optional): Configured sanction type (send this or type_label).
type_label (string, max 80, nullable, optional): Free-text type (max 80).
reason (string, max 255, nullable, optional): Reason (max 255).
description (string, max 4000, nullable, optional): Description.
notes (string, max 4000, nullable, optional): Staff notes.
warn_points (integer, 0-1000, nullable, optional): Warning points (default: the type's).
expiry_days (integer, 0-3650, nullable, optional): Days until it expires, 0 = never (default: the type's).
is_ban (boolean, nullable, optional): It is a ban (default: the type's).
curl -X POST "https://api.blixye.com/v1/sanctions" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f7c1d2e-mi-reintento-1" \
-d '{"member_id":"usr_3tq0vJ1c9Ydl2Hk7WqPzEw","character_id":"chr_3tq0vJ1c9Ydl2Hk7WqPzEw","type_id":"sty_3tq0vJ1c9Ydl2Hk7WqPzEw"}'
curl -X POST "https://api.blixye.com/v1/sanctions" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f7c1d2e-mi-reintento-1" \
-d '{"member_id":"usr_3tq0vJ1c9Ydl2Hk7WqPzEw","character_id":"chr_3tq0vJ1c9Ydl2Hk7WqPzEw","type_id":"sty_3tq0vJ1c9Ydl2Hk7WqPzEw"}'
NOTE
curl -X POST "https://api.blixye.com/v1/sanctions" \
-H "Authorization: Bearer bx_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f7c1d2e-mi-reintento-1" \
-d '{"member_id":"usr_3tq0vJ1c9Ydl2Hk7WqPzEw","character_id":"chr_3tq0vJ1c9Ydl2Hk7WqPzEw","type_id":"sty_3tq0vJ1c9Ydl2Hk7WqPzEw"}'
Response 201: Created.
Response 201: Created.
NOTE
Response 201: Created.
{
"data": {
"id": "san_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"character_id": "chr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type": "Warning",
"reason": "Random deathmatch",
"description": "Insulted another player in OOC chat.",
"notes": null,
"images": [
"string"
],
"warn_points": 1,
"is_ban": false,
"status": "active",
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"issued_by_name": "Admin",
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z",
"policy": {
"step": 1,
"count": 1,
"within_days": 1,
"apply_type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"apply_type": "Temporary ban",
"ban_days": 1
}
}
}
{
"data": {
"id": "san_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"character_id": "chr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type": "Warning",
"reason": "Random deathmatch",
"description": "Insulted another player in OOC chat.",
"notes": null,
"images": [
"string"
],
"warn_points": 1,
"is_ban": false,
"status": "active",
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"issued_by_name": "Admin",
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z",
"policy": {
"step": 1,
"count": 1,
"within_days": 1,
"apply_type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"apply_type": "Temporary ban",
"ban_days": 1
}
}
}
NOTE
{
"data": {
"id": "san_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"character_id": "chr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"type": "Warning",
"reason": "Random deathmatch",
"description": "Insulted another player in OOC chat.",
"notes": null,
"images": [
"string"
],
"warn_points": 1,
"is_ban": false,
"status": "active",
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"issued_by_name": "Admin",
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z",
"policy": {
"step": 1,
"count": 1,
"within_days": 1,
"apply_type_id": "sty_3tq0vJ1c9Ydl2Hk7WqPzEw",
"apply_type": "Temporary ban",
"ban_days": 1
}
}
}
Errors (the format is in Errors):
Errors (the format is in Errors):
NOTE
Errors (the format is in Errors):
NOTE
400: Malformed request (invalid limit, cursor, JSON, Idempotency-Key, or an API key sent in the URL).
401: Missing, invalid, revoked or expired API key (codes missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: The key lacks a scope (missing_scope), the IP is not allowed (ip_not_allowed), the server's plan has no API (plan_required) or an MDT module is off (module_off).
404: Not found in this server. An id from another server is always a 404.
409: Conflict (for example, the same Idempotency-Key is still being processed, or a plan limit was reached).
422: A field is invalid (details.field says which).
429: Too many requests for this API key (the limit is per key and per minute, by plan). Too many failed authentications from one IP also give a 429.
List bans
List bans
NOTE
List bans
GET /bans. Server bans. Scope: moderation:read.
GET /bans. Server bans. Scope: moderation:read.
NOTE
GET /bans. Server bans. Scope: moderation:read.
Parameters:
Parameters:
NOTE
Parameters:
NOTE
limit (query; integer, 1-100, default 25, optional): Page size (1-100).
cursor (query; string, optional): The meta.next_cursor of the previous page.
order (query; string, one of: desc, asc, default desc, optional): desc = newest first.
member_id (query; string, optional): Banned member (usr_…).
active (query; boolean, optional): true = only bans in force.
curl "https://api.blixye.com/v1/bans?limit=25" \
-H "Authorization: Bearer bx_live_…"
curl "https://api.blixye.com/v1/bans?limit=25" \
-H "Authorization: Bearer bx_live_…"
NOTE
curl "https://api.blixye.com/v1/bans?limit=25" \
-H "Authorization: Bearer bx_live_…"
Response 200: A page of bans.
Response 200: A page of bans.
NOTE
Response 200: A page of bans.
{
"data": [
{
"id": "ban_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"reason": "Random deathmatch",
"is_active": true,
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"revoked": false,
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z"
}
],
"meta": {
"next_cursor": "cur_3tq0vJ1c9Ydl2Hk7WqPzEw"
}
}
{
"data": [
{
"id": "ban_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"reason": "Random deathmatch",
"is_active": true,
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"revoked": false,
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z"
}
],
"meta": {
"next_cursor": "cur_3tq0vJ1c9Ydl2Hk7WqPzEw"
}
}
NOTE
{
"data": [
{
"id": "ban_3tq0vJ1c9Ydl2Hk7WqPzEw",
"member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"reason": "Random deathmatch",
"is_active": true,
"expires_at": "2026-09-27T18:04:05Z",
"issued_by_member_id": "usr_3tq0vJ1c9Ydl2Hk7WqPzEw",
"revoked": false,
"revoked_at": null,
"revoked_reason": null,
"created_at": "2026-09-27T18:04:05Z"
}
],
"meta": {
"next_cursor": "cur_3tq0vJ1c9Ydl2Hk7WqPzEw"
}
}
Errors (the format is in Errors):
Errors (the format is in Errors):
NOTE
Errors (the format is in Errors):
NOTE
400: Malformed request (invalid limit, cursor, JSON, Idempotency-Key, or an API key sent in the URL).
401: Missing, invalid, revoked or expired API key (codes missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: The key lacks a scope (missing_scope), the IP is not allowed (ip_not_allowed), the server's plan has no API (plan_required) or an MDT module is off (module_off).
404: Not found in this server. An id from another server is always a 404.
429: Too many requests for this API key (the limit is per key and per minute, by plan). Too many failed authentications from one IP also give a 429.