Sanciones y bans. Todas las rutas cuelgan de https://api.blixye.com/v1 y llevan la llave en la cabecera Authorization (ver Llaves y ámbitos). Esta página sale de la especificación OpenAPI de la API; lo que no esté aquí, la API no lo hace.
Sanciones y bans. Todas las rutas cuelgan de https://api.blixye.com/v1 y llevan la llave en la cabecera Authorization (ver Llaves y ámbitos). Esta página sale de la especificación OpenAPI de la API; lo que no esté aquí, la API no lo hace.
OJO
Sanciones y bans. Todas las rutas cuelgan de https://api.blixye.com/v1 y llevan la llave en la cabecera Authorization (ver Llaves y ámbitos). Esta página sale de la especificación OpenAPI de la API; lo que no esté aquí, la API no lo hace.
OJO
GET /sanctions: Lista de sanciones (moderation:read)
POST /sanctions: Poner una sanción (moderation:write)
GET /bans: Lista de bans (moderation:read)
Lista de sanciones
Lista de sanciones
OJO
Lista de sanciones
GET /sanctions. Sanciones de moderación. Ámbito: moderation:read.
GET /sanctions. Sanciones de moderación. Ámbito: moderation:read.
OJO
GET /sanctions. Sanciones de moderación. Ámbito: moderation:read.
Parámetros:
Parámetros:
OJO
Parámetros:
OJO
limit (consulta; entero, 1-100, por defecto 25, opcional): Tamaño de página (1-100).
cursor (consulta; texto, opcional): El meta.next_cursor de la página anterior.
order (consulta; texto, uno de: desc, asc, por defecto desc, opcional): desc = lo más nuevo primero.
member_id (consulta; texto, opcional): Miembro sancionado (usr_…).
status (consulta; texto, opcional): active, expired o 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_…"
OJO
curl "https://api.blixye.com/v1/sanctions?limit=25" \
-H "Authorization: Bearer bx_live_…"
Respuesta 200: Una página de sanciones.
Respuesta 200: Una página de sanciones.
OJO
Respuesta 200: Una página de sanciones.
{
"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"
}
}
OJO
{
"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"
}
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
404: No existe en este servidor. Un id de otro servidor es siempre un 404.
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.
Poner una sanción
Poner una sanción
OJO
Poner una sanción
POST /sanctions. Pone una sanción con la misma lógica que el panel de moderación: se aplican los valores del tipo salvo que mandes el valor, y la respuesta dice qué recomienda la política de escalado. Si el servidor tiene apagados los motivos libres, manda type_id. Ámbito: moderation:write.
POST /sanctions. Pone una sanción con la misma lógica que el panel de moderación: se aplican los valores del tipo salvo que mandes el valor, y la respuesta dice qué recomienda la política de escalado. Si el servidor tiene apagados los motivos libres, manda type_id. Ámbito: moderation:write.
OJO
POST /sanctions. Pone una sanción con la misma lógica que el panel de moderación: se aplican los valores del tipo salvo que mandes el valor, y la respuesta dice qué recomienda la política de escalado. Si el servidor tiene apagados los motivos libres, manda type_id. Ámbito: moderation:write.
Parámetros:
Parámetros:
OJO
Parámetros:
OJO
Idempotency-Key (cabecera; texto, opcional): Hace seguro reintentar el POST: la misma clave devuelve la primera respuesta (con Idempotent-Replayed: true) durante 24 h. La misma clave con otro cuerpo es un 422.
Cuerpo (JSON):
Cuerpo (JSON):
OJO
Cuerpo (JSON):
OJO
member_id (id usr_…, obligatorio): Miembro a sancionar.
character_id (id chr_…, admite null, opcional): Un personaje de ese miembro.
type_id (id sty_…, admite null, opcional): Tipo configurado (esto o type_label).
type_label (texto, máx. 80, admite null, opcional): Tipo libre (máx. 80).
reason (texto, máx. 255, admite null, opcional): Motivo (máx. 255).
description (texto, máx. 4000, admite null, opcional): Descripción.
notes (texto, máx. 4000, admite null, opcional): Notas del staff.
warn_points (entero, 0-1000, admite null, opcional): Puntos de aviso (por defecto, los del tipo).
expiry_days (entero, 0-3650, admite null, opcional): Días hasta que caduca, 0 = nunca (por defecto, los del tipo).
is_ban (booleano, admite null, opcional): Es un ban (por defecto, lo del tipo).
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"}'
OJO
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"}'
Respuesta 201: Creada.
Respuesta 201: Creada.
OJO
Respuesta 201: Creada.
{
"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
}
}
}
OJO
{
"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
}
}
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
404: No existe en este servidor. Un id de otro servidor es siempre un 404.
409: Conflicto (p. ej. la misma Idempotency-Key aún se está atendiendo, o se llegó al tope del plan).
422: Un campo no vale (details.field dice cuál).
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.
Lista de bans
Lista de bans
OJO
Lista de bans
GET /bans. Bans del servidor. Ámbito: moderation:read.
GET /bans. Bans del servidor. Ámbito: moderation:read.
OJO
GET /bans. Bans del servidor. Ámbito: moderation:read.
Parámetros:
Parámetros:
OJO
Parámetros:
OJO
limit (consulta; entero, 1-100, por defecto 25, opcional): Tamaño de página (1-100).
cursor (consulta; texto, opcional): El meta.next_cursor de la página anterior.
order (consulta; texto, uno de: desc, asc, por defecto desc, opcional): desc = lo más nuevo primero.
member_id (consulta; texto, opcional): Miembro baneado (usr_…).
active (consulta; booleano, opcional): true = solo los que están en vigor.
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_…"
OJO
curl "https://api.blixye.com/v1/bans?limit=25" \
-H "Authorization: Bearer bx_live_…"
Respuesta 200: Una página de bans.
Respuesta 200: Una página de bans.
OJO
Respuesta 200: Una página de 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"
}
}
OJO
{
"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"
}
}
Errores (el formato está en Errores):
Errores (el formato está en Errores):
OJO
Errores (el formato está en Errores):
OJO
400: Petición mal formada (limit, cursor, JSON o Idempotency-Key inválidos, o la llave en la URL).
401: Llave ausente, inválida, revocada o caducada (códigos missing_api_key, invalid_api_key, api_key_revoked, api_key_expired).
403: A la llave le falta un ámbito (missing_scope), la IP no está permitida (ip_not_allowed), el plan del servidor no tiene API (plan_required) o un módulo del MDT está apagado (module_off).
404: No existe en este servidor. Un id de otro servidor es siempre un 404.
429: Demasiadas peticiones con esta llave (el límite es por llave y por minuto, según el plan). Demasiados fallos de autenticación desde una IP también dan 429.