Blixye API

Documentacion completa de la API de Blixye (SkyWings RP). Todas las rutas aceptan GET y POST. Las rutas legacy .php funcionan como alias.

Base URL: https://api.blixye.com

Autenticacion

La mayoria de endpoints requieren un apikey valido. Se envia como parametro en el body o query string.

MetodoDescripcionDonde se usa
apikeyAPI key del usuario (sk_...). Se obtiene al vincular Roblox.Todos los endpoints de servidor
X-MDT-Internal-KeyHeader con la clave interna del servidor. Para endpoints bot-to-API./users (internal), /server_bot

Formato apikey: /^sk_[A-Za-z0-9_]{20,80}$/

Errores globales

Todas las respuestas error siguen el formato:

{
  "ok": false,
  "error": "Mensaje en espanol",
  "error_code": "codigo_en_ingles"
}

Los error_code se inyectan automaticamente por el middleware. Son consistentes en toda la API.

Codigos HTTP comunes

CodigoSignificado
200OK
201Creado
400Parametros invalidos o validacion fallida
401API key invalida o no proporcionada
403Sin permisos (rol insuficiente)
404Recurso no encontrado
409Conflicto (ya existe, duplicado)
423Bloqueado (PIN locked)
429Rate limit excedido

Error Codes

Tabla completa de error_code que el middleware inyecta automaticamente:

error_codeSignificado
insufficient_balanceSaldo insuficiente (banco o wallet)
last_cardNo puedes eliminar la ultima tarjeta
max_cardsLimite de tarjetas alcanzado
card_not_foundTarjeta no encontrada
card_disabledTarjeta desactivada o invalida
card_expiredTarjeta expirada o archivada
card_type_not_allowedTipo de tarjeta no permitido en este server
already_existsYa existe (cuenta, recurso duplicado)
limit_exceededLimite maximo excedido
account_not_foundCuenta bancaria no encontrada
account_disabledCuenta no activa (congelada)
account_closedCuenta cerrada
main_account_readonlyLa cuenta principal no puede modificarse/cerrarse
balance_not_zeroLa cuenta debe tener saldo 0 para cerrar
cannot_remove_ownerNo puedes eliminar/cambiar permisos del dueno
member_not_foundNo es miembro de la cuenta
already_memberYa es miembro
self_transferNo puedes transferir a la misma cuenta/persona
pin_lockedPIN bloqueado por intentos fallidos
invalid_pinPIN incorrecto o formato invalido
no_pin_setNo tiene PIN configurado
pin_requiredSe requiere PIN para esta operacion
invalid_cvvCVV incorrecto o no proporcionado
debt_not_foundDeuda no encontrada
not_signedDeuda no firmada
already_paidYa pagada
already_cancelledYa cancelada
already_signedYa firmada
loan_not_foundPrestamo no encontrado
already_processedYa procesado (prestamo/solicitud)
request_not_foundSolicitud de pago no encontrada
expiredExpirado
destination_not_foundDestino no encontrado (personaje/titular)
character_not_foundPersonaje no encontrado
no_bank_accountNo tiene cuenta bancaria
invalid_amountCantidad invalida
forbiddenSin permisos
not_foundNo encontrado (generico)
errorError no categorizado

Rate Limits

GrupoLimiteRutas
Users / OAuth30/min/users
Servers / Game300/minTodos los /server_*
Bot (internal)180/min/server_bot

Users — OAuth

Ruta: POST /users (alias: /users.php). Parametro de accion: action.

ANY /users?action=roblox_oauth_start

Inicia el flujo OAuth de Roblox. Tras autorizar, el navegador vuelve a http://127.0.0.1:<loopback_port>/blixye-oauth?code=… y la app remata con check_oauth_status + finish.

Parametros

ParamTipoReqDescripcion
loopback_portintSiPuerto de 127.0.0.1 donde la app espera la vuelta del navegador (RFC 8252). Sin el: 426 update_required

Respuesta OK (200)

{
  "ok": true,
  "url": "https://authorize.roblox.com/?...",
  "session_token": "abc123..."
}
ANY /users?action=discord_oauth_start

Inicia el flujo OAuth de Discord. Requiere apikey. Scope: identify guilds.

Parametros

ParamTipoReqDescripcion
apikeystringSiAPI key del usuario
loopback_portintSiPuerto de 127.0.0.1 donde la app espera la vuelta del navegador (RFC 8252). Sin el: 426 update_required

Respuesta OK (200)

{
  "ok": true,
  "url": "https://discord.com/oauth2/authorize?...",
  "session_token": "abc123..."
}
ANY /users?action=check_oauth_status

Remata el flujo OAuth. Sin finish devuelve siempre pending: la cuenta solo se entrega (y Discord solo se vincula) con el codigo que llego a la app por 127.0.0.1.

Parametros

ParamTipoReqDescripcion
session_tokenstringSiToken del *_oauth_start
finishstringSiEl code que recibio la app en su puerto de 127.0.0.1

Respuesta pendiente

{ "ok": true, "status": "pending" }

Respuesta completa (Roblox)

{
  "ok": true,
  "status": "complete",
  "roblox_id": "727083479",
  "roblox_username": "bielarano",
  "apikey": "sk_...",
  "user_id": 1
}

Respuesta completa (Discord)

{
  "ok": true,
  "status": "complete",
  "result": "success|already_linked|limit_reached",
  "discord_id": "123456789012345678",
  "discord_username": "user#1234",
  "admin_guilds": [
    { "id": "999...", "name": "Mi Server", "icon": "hash..." }
  ]
}
ANY /users?action=roblox_oauth_callback

Callback de Roblox (automatico). Devuelve HTML. No llamar manualmente.

ANY /users?action=discord_oauth_callback

Callback de Discord (automatico). Devuelve HTML. No llamar manualmente.

Users — Perfil

ANY /users?action=get_user_by_key

Obtiene perfil completo del usuario: Roblox, Discord accounts, servidores.

Parametros

ParamTipoReqDescripcion
apikeystringSiAPI key del usuario

Respuesta OK (200)

{
  "ok": true,
  "user_id": 1,
  "roblox_id": "727083479",
  "roblox_username": "bielarano",
  "discord_accounts": [
    { "discord_id": "123...", "discord_username": "user#1234" }
  ],
  "servers": [
    {
      "server_id": 8,
      "server_name": "Mi Server",
      "server_type": "voice",
      "logo_url": null,
      "role": "owner"
    }
  ]
}
ANY /users?action=get_discord_by_apikey

Devuelve solo las cuentas de Discord vinculadas.

Parametros

ParamTipoReqDescripcion
apikeystringSiAPI key del usuario

Respuesta OK (200)

{
  "ok": true,
  "user_id": 1,
  "discord_accounts": [
    { "discord_id": "123...", "discord_username": "user#1234" }
  ]
}
ANY /users?action=check_if_roblox_group

Devuelve texto plano "si" o "no".

ParamTipoReqDescripcion
roblox_idstringSiID numerico de Roblox

Que version de los Terminos del servicio (terms) y de la Politica de privacidad (privacy) rige y cual ha aceptado la cuenta. Las versiones en vigor salen de config/blixye.php (legal_versions); cada aceptacion queda en legal_acceptances (cuenta, documento, version, hora, IP y dispositivo), y se guardan todas, no solo la ultima. El backend no bloquea nada: pedirlas y no dejar seguir es cosa del cliente. Solo sesiones de la app: una sesion de juego (gs_) da 401.

ANY /users?action=legal_status Autenticado

Las versiones en vigor, las que ha aceptado la cuenta y si le falta alguna. accepted es, por documento, la version en vigor si la ha aceptado y si no la ultima que acepto (null si ninguna). pending es true si le falta aceptar la version en vigor de cualquiera de los dos.

Parametros

ParamTipoReqDescripcion
apikeystringSiAPI key del usuario (o cabecera X-Api-Key)

Respuesta OK (200)

{
  "ok": true,
  "current":  { "terms": "2026-09-26", "privacy": "2026-09-26" },
  "accepted": { "terms": null, "privacy": "2026-09-04" },
  "pending": true
}

Errores

400 sin apikey o con formato invalido · 401 apikey que no existe o ha caducado.

ANY /users?action=accept_legal Autenticado

Acepta las versiones LEIDAS de los dos documentos. Tienen que ser las dos en vigor: si alguna no lo es (cambio mientras se leia) o falta, 409 con las de ahora y no se apunta nada. Idempotente: aceptar otra vez lo mismo no escribe nada ni mueve la hora de la primera vez. Guarda la IP y el dispositivo (device si viene; si no, el de la sesion). Devuelve lo mismo que legal_status.

Parametros

ParamTipoReqDescripcion
apikeystringSiAPI key del usuario (o cabecera X-Api-Key)
terms_versionstringSiLa version de los Terminos que se ha ensenado (current.terms)
privacy_versionstringSiLa version de la Politica de privacidad que se ha ensenado (current.privacy)
devicestringNoNombre del dispositivo, como al entrar (se recorta a 80). Sin el se guarda el de la sesion

Respuesta OK (200)

{
  "ok": true,
  "current":  { "terms": "2026-09-26", "privacy": "2026-09-26" },
  "accepted": { "terms": "2026-09-26", "privacy": "2026-09-26" },
  "pending": false
}

Error 409 (version que ya no rige)

{
  "ok": false,
  "error_code": "stale_legal_version",
  "error": "The Terms of Service or the Privacy Policy changed while you were reading them. Read them again.",
  "current":  { "terms": "2026-09-26", "privacy": "2026-09-26" },
  "accepted": { "terms": null, "privacy": "2026-09-04" },
  "pending": true
}

Otros errores

400 / 401 como en legal_status · 503 si falta la migracion de legal_acceptances (mientras tanto legal_status contesta pending: false, para no pedir lo que no se puede apuntar).

ANY /users?action=legal_documents Publico

El texto de los documentos legales de un idioma, TAL CUAL lo publica la web (https://blixye.com/assets/blixye/legal.json, blixye.legal_source_url), con diez minutos de cache y la ultima copia buena de respaldo. Sin llave: se lee antes de entrar. De ahi salen tambien las versiones que piden legal_status y accept_legal (la configuracion solo es el respaldo).

Parametros

ParamTipoReqDescripcion
idiomastringNoes o en (por defecto en)

Respuesta OK (200)

{
  "ok": true,
  "idioma": "es",
  "versiones": { "terms": "2026-09-26", "privacy": "2026-09-26", "cookies": "2026-09-05", "...": "..." },
  "documentos": [ { "id": "terms", "titulo": "Términos del Servicio", "version": "2026-09-26", "secciones": [ "..." ] } ]
}

Errores

503 si la web no contesta y no hay copia guardada: el cliente enseña entonces la que lleva dentro.

Servers — CRUD

Ruta: POST /servers. Parametro de accion: action.

ANY /servers?action=create Autenticado

Crea un servidor nuevo. El creador se convierte en owner.

ParamTipoReqDescripcion
apikeystringSiAPI key
server_namestringSi1-100 caracteres
descriptionstringNoMax 500 caracteres
server_typestringNovoice o text (default: text)
language_tagstringNoMax 8 chars (default: es)
discord_urlstringNoURL valida
discord_guild_idstringNoSnowflake 17-20 digitos
logo_base64stringNoImagen en Base64
banner_base64stringNoImagen en Base64

Respuesta OK (201)

{
  "ok": true,
  "server": {
    "id": 8,
    "server_name": "Mi Server",
    "join_code": "ABCD1234",
    "is_public": true,
    "max_members": 50,
    "owner_user_id": 1,
    ...
  }
}
ANY /servers?action=get

Obtiene informacion de un servidor (incluye config, roles, economy).

ParamTipoReqDescripcion
apikeystringSiAPI key
server_idintSiID del servidor
ANY /servers?action=list_mine

Lista todos los servidores del usuario autenticado.

ParamTipoReqDescripcion
apikeystringSiAPI key
ANY /servers?action=discover

Busca servidores publicos. Paginado.

ParamTipoReqDescripcion
pageintNoDefault: 1
per_pageintNo1-50, default: 20
server_typestringNoFiltro: voice/text
language_tagstringNoFiltro por idioma
searchstringNoBusqueda por nombre
ANY /servers?action=update owner/admin

Actualiza datos del servidor. Campos opcionales, solo se actualizan los enviados.

ParamTipoReqDescripcion
server_idintSiID del servidor
server_namestringNo1-100 chars
descriptionstringNoMax 500
server_typestringNovoice/text
is_publicboolNoVisible en discover
max_membersintNo1-10000
ANY /servers?action=delete owner

Elimina el servidor y todos sus datos.

ParamTipoReqDescripcion
server_idintSiID del servidor
ANY /servers?action=join

Unirse a un servidor por codigo.

ParamTipoReqDescripcion
join_codestringSi4-12 caracteres alfanumericos

Respuesta

{ "ok": true, "joined": true, "server_id": 8, "server_name": "Mi Server" }
// ya miembro:
{ "ok": true, "joined": false, "reason": "already_member", "server_id": 8 }
ANY /servers?action=leave

Abandonar servidor. El owner no puede salir.

ParamTipoReqDescripcion
server_idintSiID del servidor
ANY /servers?action=regenerate_code owner

Regenera o establece un codigo de union personalizado.

ParamTipoReqDescripcion
server_idintSiID del servidor
join_codestringNoCodigo personalizado 4-12 chars. Si no se envia, genera aleatorio.

Servers — Miembros

ANY /servers?action=list_members member+

Lista miembros del servidor, paginado.

ParamTipoReqDescripcion
server_idintSiID del servidor
rolestringNoFiltro: owner/admin/mod/member
searchstringNoBuscar por roblox_username
pageintNoDefault: 1
per_pageintNo1-50, default: 20
ANY /servers?action=set_role owner/admin

Cambia el rol de un miembro. No puedes asignar un rol >= al tuyo.

ParamTipoReqDescripcion
server_idintSi
target_user_idintSiUsuario objetivo
new_rolestringSiadmin, mod, o member
ANY /servers?action=kick owner/admin

Expulsa a un miembro. Opcional: elimina sus personajes.

ParamTipoReqDescripcion
server_idintSi
target_user_idintSiUsuario a expulsar
delete_charactersboolNoEliminar personajes del expulsado

Nota: /server_members tambien ofrece list, kick, set_role con la misma logica.

Servers — Discord Guild

ANY /servers?action=link_discord_guild owner

Vincula un servidor Blixye a un guild de Discord.

ParamTipoReqDescripcion
server_idintSi
discord_guild_idstringSiSnowflake 17-20 digitos

Error 409 si el guild ya esta vinculado a otro servidor.

ANY /servers?action=unlink_discord_guild owner

Desvincula el guild de Discord del servidor.

ParamTipoReqDescripcion
server_idintSi

Server Config

Ruta: POST /server_config. Parametro: action.

ANY /server_config?action=get member+

Obtiene configuracion del servidor (moneda, items cash, app_names, etc).

ANY /server_config?action=update owner/admin

Actualiza config del servidor. Todos opcionales.

ParamTipoReqDescripcion
server_idintSi
currency_symbolstringNo1-8 chars (ej: "$")
currency_namestringNo1-32 chars
bill_typesJSONNoArray de denominaciones
app_namesJSONNoNombres personalizados de apps
role_limitsJSONNoLimites por rol
extra_configJSONNoConfiguracion extra libre

Limites de personajes por rol Discord

ANY /server_config?action=get_character_limits member+
ANY /server_config?action=set_character_limit owner/admin
ParamTipoReqDescripcion
discord_role_idstringSiSnowflake 17-20 digitos
max_charactersintSi1-100
ANY /server_config?action=delete_character_limit owner/admin
ANY /server_config?action=get_user_max_characters member+

Calcula max personajes para un usuario segun sus roles de Discord.

ParamTipoReqDescripcion
discord_role_idsarray/stringSiJSON array o comma-separated

DNI / Personajes

Ruta: POST /server_dni. Parametro: action.

ANY /server_dni?action=get_config member+

Configuracion del DNI: nombre documento, edad min/max, formato numero, campos, nacionalidades.

ANY /server_dni?action=update_config owner/admin/mod
ParamTipoReqDescripcion
document_namestringNoMax 32 chars
min_ageintNo1-255
max_ageintNo1-255
dni_number_formatstringNoMax 64 chars
name_fieldsintNo1-5
surname_fieldsintNo0-5
nationalitiesJSONNo[{name, enabled}]
custom_fieldsJSONNoCampos extra
ANY /server_dni?action=create member+

Crea un personaje con DNI. Valida limites de personajes, edad, nacionalidad, etc.

ParamTipoReqDescripcion
server_idintSi
namestringSi1-64 chars
surnamestring*Requerido si surname_fields > 0
nationalitystringNoDe la lista allowed
genderstringNoMax 16 chars
birthdatestringNoY-m-d o timestamp
birth_timestringNoHH:MM
image_urlstringNoMax 512
discord_idstringNoDebe pertenecer al usuario
discord_role_idsarrayNoPara calcular limite de personajes
custom_dataJSONNoDatos extra
ANY /server_dni?action=update member+ (propio) / mod+ (ajeno)
ParamTipoReqDescripcion
server_character_idintSi

Campos actualizables: name, surname, nationality, gender, birthdate, birth_time, image_url, custom_data.

ANY /server_dni?action=get
ParamTipoReqDescripcion
server_character_idintSi
ANY /server_dni?action=search

Busca personajes por nombre, apellido o DNI number. Max 50 resultados.

ParamTipoReqDescripcion
searchstringNoBusqueda LIKE

Items

Ruta: POST /server_items. Parametro: action.

ANY/server_items?action=list member+

Lista items. Filtrable por category_id y search.

ANY/server_items?action=get_shop member+

Items visibles en la tienda (shop_visible=true, con precio).

ANY/server_items?action=create owner/admin
ParamTipoReqDescripcion
namestringSi1-64 chars, unico por server
name_labelstringNoMax 64
priceintNoPrecio en tienda
category_idintNoDebe existir
image_urlstringNoMax 512
shop_visibleboolNoDefault: true
can_giftboolNoDefault: true
can_deleteboolNoDefault: true
can_confiscateboolNoDefault: true
can_searchboolNoDefault: true (visible en cacheo)
user_limitintNoMax por personaje
stock_modestringNoinfinite/limited/renewable
stock_quantityintNoStock actual
require_license_idintNoLicencia requerida para comprar
ANY/server_items?action=update owner/admin

Update parcial. Mismos campos que create + item_id.

ANY/server_items?action=delete owner/admin

Categorias de Items

Acciones: list_categories, create_category, update_category, delete_category

Params de create: name (1-64, unico), label (1-64), sort_order (int, optional).

Inventario

Ruta: POST /server_inventory. Parametro: action.

ANY/server_inventory?action=get

Inventario de un personaje. Miembros solo ven el propio.

ParamTipoReqDescripcion
server_character_idintSi
ANY/server_inventory?action=give owner/admin
ParamTipoReqDescripcion
server_character_idintSi
item_idintSi
quantityintSi> 0
ANY/server_inventory?action=take owner/admin

Mismos params que give.

ANY/server_inventory?action=transfer member+

Transferir item entre personajes. Item debe tener can_gift=true.

ParamTipoReqDescripcion
from_character_idintSiTu personaje
to_character_idintSiPersonaje destino
item_idintSi
quantityintSi> 0
ANY/server_inventory?action=delete_item member+

Eliminar item propio. Item debe tener can_delete=true.

Licencias

Ruta: POST /server_licenses. Parametro: action.

ANY/server_licenses?action=list member+
ANY/server_licenses?action=create owner/admin
ParamTipoReqDescripcion
namestringSi1-64, unico por server
typestringNodriving/weapon/custom (default: custom)
name_labelstringNoMax 64
priceintNoPara tienda
image_urlstringNoMax 512
shop_visibleboolNoDefault: true
max_pointsintNoSistema de puntos (null = sin puntos)
parent_license_idintNoLicencia padre
ANY/server_licenses?action=grant owner/admin

Otorga licencia a un personaje. Si estaba revocada, la reactiva con max_points.

ParamTipoReqDescripcion
server_character_idintSi
license_idintSi
ANY/server_licenses?action=revoke owner/admin

Revoca licencia. Guarda revoked_by="user#{user_id}".

ANY/server_licenses?action=deduct_points owner/admin

Resta puntos. Si llega a 0, auto-revoca con revoked_by='auto:points_depleted'.

ParamTipoReqDescripcion
pointsintSi> 0

Respuesta

{ "ok": true, "points_remaining": 3, "is_revoked": false }
ANY/server_licenses?action=get_character_licenses member+

Lista licencias de un personaje (con estado de revocacion y puntos).

Tienda

Ruta: POST /server_shop. Parametro: action.

ANY/server_shop?action=buy_items member+
ParamTipoReqDescripcion
server_character_idintSiTu personaje
itemsJSONSi[{"item_id": 1, "quantity": 2}]
payment_methodstringNowallet/bank/auto (default: auto)

Respuesta

{ "ok": true, "total_cost": 500, "payment_method": "wallet" }

Metodos de pago:

  • wallet: paga con billetes del wallet (algoritmo greedy, denominacion alta primero)
  • bank: debita de cuenta bancaria (v2 primero, fallback legacy)
  • auto: intenta wallet, si no alcanza, intenta bank
ANY/server_shop?action=buy_license member+

Compra una licencia de la tienda. Misma logica de pago.

ParamTipoReqDescripcion
license_idintSi
payment_methodstringNowallet/bank/auto

Economia Legacy

Ruta: POST /server_economy. Parametro: action.

Estos endpoints funcionan con el sistema legacy de bank + wallet con billetes fisicos.

ANY/server_economy?action=create_bank_account member+

Crea cuenta bancaria legacy + tarjeta para un personaje.

ParamTipoReqDescripcion
server_character_idintSiTu personaje
pinstringNoPIN (longitud segun config)

Respuesta

{ "ok": true, "account_id": 1, "card_number": "1234567890123456", "cvv": "123", "balance": 0 }
ANY/server_economy?action=get_bank

Info bancaria de un personaje (card_number, balance, has_pin, cvv si es propio).

ANY/server_economy?action=get_wallet

Billetes en el wallet con total_cash calculado.

ANY/server_economy?action=get_balance

Balance total: bank + wallet.

{ "ok": true, "bank_balance": 1000, "wallet_total": 250, "total": 1250, "has_bank": true }
ANY/server_economy?action=transfer

Transferencia entre cuentas (por card_number+cvv o character_id).

ParamTipoReqDescripcion
amountintSi> 0
from_card_number + from_cvvstring*O usar from_character_id
to_card_numberstring*O usar to_character_id
pinstringNoSi la cuenta tiene PIN
ANY/server_economy?action=withdraw

Retira dinero del banco al wallet (billetes).

ANY/server_economy?action=deposit

Deposita billetes del wallet al banco.

ANY/server_economy?action=get_registers

Historial de transacciones. Paginado.

ParamTipoReqDescripcion
pageintNoDefault: 1
per_pageintNo1-100, default: 50
typestringNoFiltro por tipo

Bill types: list_bill_types, create_bill_type, update_bill_type, delete_bill_type (owner/admin).

Bank v2 — Cuentas

Todas las acciones bank v2/v3 van por POST /server_economy.

ANY/server_economy?action=create_account
ParamTipoReqDescripcion
server_character_idintSi
account_typestringSipersonal/shared/business/custom/savings/vault
account_namestringNoMax 64 (no para personal)
pinstringNoSegun config
ANY/server_economy?action=list_accounts

Lista cuentas donde el personaje es miembro.

ANY/server_economy?action=get_account
ANY/server_economy?action=get_dashboard

Dashboard completo: cuentas, total_balance, tarjetas activas, deudas, prestamos, credit score.

ANY/server_economy?action=freeze_account owner/admin
ANY/server_economy?action=unfreeze_account owner/admin
ANY/server_economy?action=close_account

Solo el dueno. Balance debe ser 0. No puedes cerrar la cuenta personal ni la principal.

ANY/server_economy?action=internal_transfer

Transferencia entre tus propias cuentas.

ParamTipoReqDescripcion
from_account_idintSi
to_account_idintSi
amountintSi> 0

Bank v2 — Miembros de cuenta

Acciones: list_account_members, remove_account_member, update_member_perms

Permisos de cuenta: view_balance, view_movements, pay, approve_payments, transfer, create_cards, manage_cards, sign_debts, edit_settings, manage_members

Bank v2 — Tarjetas

ANY/server_economy?action=create_card
ParamTipoReqDescripcion
account_idintSi
server_character_idintSi
card_typestringSipermanent/temporary_time/temporary_uses/temporary_both
expires_atstring*ISO8601, requerido para temporary_time/both
max_usesint*Requerido para temporary_uses/both
discord_role_idsarrayNoPara limites por rol

Respuesta incluye cvv (solo se muestra en creacion).

ANY/server_economy?action=create_shared_card

Crea tarjeta compartida con otro personaje. Auto-agrega como miembro de cuenta.

ParamTipoReqDescripcion
holder_character_idintSiDebe ser diferente al tuyo
permissionsarray/JSONSiPermisos del titular

Otras acciones: list_cards, get_card, disable_card, enable_card, link_card, delete_card, rename_card (nickname max 50), update_card_limits (daily_limit, monthly_limit, per_transaction_limit), get_card_history.

Bank v2 — PIN

ANY/server_economy?action=set_pin

Establece o cambia PIN. Si ya tiene PIN, old_pin es requerido.

ANY/server_economy?action=reset_pin owner/admin

Reset forzado del PIN (admin).

ANY/server_economy?action=verify_pin

Verifica PIN. Se bloquea tras N intentos fallidos.

Respuesta OK

{ "ok": true, "has_pin": true, "verified": true }

Error 401 (incorrecto)

{ "ok": false, "error": "PIN incorrecto", "attempts_remaining": 2 }

Error 423 (bloqueado)

{ "ok": false, "error": "PIN bloqueado", "remaining_minutes": 15 }

Bank v2 — Configuracion bancaria

Acciones: get_bank_config, update_bank_config (owner/admin), get_card_role_limits, set_card_role_limits.

Config sections: cards_config, pin_config, payment_config, fines_config, transfers_config, subscriptions_config, debts_config, limits_config, rewards_config, modules, accounts_config, credit_config, inheritance_config, tax_config, loans_config, notifications_config.

Bank v2 — Transferencias

Ver transfer y internal_transfer arriba. Las transferencias usan DB::transaction + lockForUpdate para atomicidad.

Bank v2 — Payment Requests

Acciones: create_payment_request, list_payment_requests (filtro: direction=sent/received/all, status), approve_payment_request (requiere PIN si tiene), reject_payment_request, cancel_payment_request.

Bank v2 — Recompensas

Acciones: configure_reward (owner/admin), list_rewards, delete_reward, get_claimable, claim_rewards.

Las recompensas se depositan en la cuenta principal (is_main). Requiere modulo rewards habilitado.

Bank v2 — Deudas

Acciones: create_debt, get_debt, list_debts, sign_debt, pay_debt, cancel_debt.

Bank v2 — Transferencias programadas

Acciones: create_scheduled_transfer, list_scheduled_transfers, get_scheduled_transfer, cancel_scheduled_transfer, pause_scheduled_transfer, resume_scheduled_transfer.

Bank v2 — Suscripciones

Acciones: create_subscription, list_subscriptions, get_subscription, cancel_subscription, pause_subscription, resume_subscription.

Bank v2 — Analytics / Limites

Acciones: get_analytics, get_limits (owner/admin).

Bank v3 — Notificaciones

Acciones: list_notifications (filter: all/read/unread, paginado), mark_notification_read, mark_all_notifications_read, get_unread_count.

Bank v3 — Contactos

ANY/server_economy?action=add_contact
ParamTipoReqDescripcion
server_character_idintSi
aliasstringSi1-50 chars
contact_card_numberstring*O usar contact_character_id
contact_character_idint*O usar contact_card_number

Otras: list_contacts, remove_contact.

Bank v3 — Boveda

Acciones: deposit_vault_item (item_name requerido, 1-100 chars), withdraw_vault_item, list_vault_items, get_vault_info.

La boveda es una cuenta tipo vault. Puede tener max_items, access_fee y cooldown_hours.

Bank v3 — Credit Score

ANY/server_economy?action=get_credit_score

Respuesta

{
  "ok": true,
  "credit": {
    "score": 750,
    "tier": "excellent",
    "factors": {...},
    "min_score": 0,
    "max_score": 1000,
    "tiers": { "excellent": 800, "good": 650, "fair": 500, "poor": 0 }
  }
}

Bank v3 — Herencia

Acciones: set_beneficiary (percentage 1-100, total max 100%), list_beneficiaries, remove_beneficiary, execute_inheritance (owner/admin, aplica impuesto, cierra cuenta origen).

Bank v3 — Impuestos

ANY/server_economy?action=configure_tax owner/admin
ParamTipoReqDescripcion
namestringSi1-100 chars
tax_typestringSiincome/transfer/property/interest/inheritance/custom
ratefloatSi0-100

Otras: list_taxes, delete_tax, get_tax_history (paginado).

Bank v3 — Prestamos

ANY/server_economy?action=request_loan
ParamTipoReqDescripcion
account_idintSi
amountintSi> 0, <= max_loan_amount
installmentsintSi1-max
frequencystringNo1d/1w/2w/1mo (default: 1mo)

Puede auto-aprobarse segun config. Interes basado en credit score.

Otras: approve_loan (admin), reject_loan (admin), list_loans, get_loan, pay_loan, cancel_loan (admin).

Bank v3 — Ahorros

Accion: get_interest_history (paginado). Historial de intereses generados en cuentas de ahorro.

Vehiculos — Modelos

Ruta: POST /server_cars. Parametro: action.

ANY/server_cars?action=list_vehicle_models member+
ParamTipoReqDescripcion
active_onlyboolNoDefault: true
pageintNo
per_pageintNo1-100
ANY/server_cars?action=create_vehicle_model

Requiere permiso manage_vehicle_models.

ParamTipoReqDescripcion
brandstringSi1-64 chars
modelstringSi1-64 chars
priceintNoDefault: 0
doorsintNo
photo_urlstringNo

Otras: update_vehicle_model, delete_vehicle_model (falla 409 si hay vehiculos usandolo).

Vehiculos — Configuracion

ANY/server_cars?action=get_vehicle_config

Requiere permiso manage_vehicle_config.

ANY/server_cars?action=update_vehicle_config
ParamTipoReqDescripcion
plate_modestringNorandom/custom/sequential
plate_formatstringNo
plate_regexstringNo
plate_prefixstringNo
max_vehicles_per_charintNo1-255
ANY/server_cars?action=set_vehicle_role_limit
ParamTipoReqDescripcion
discord_role_idstringSi
max_vehiclesintSi1-255

Vehiculos — Admin

Requiere permiso manage_vehicles.

Acciones: admin_update_vehicle (plate, color), admin_remove_vehicle, search_vehicles (filtros: plate, character_id, model_id, paginado), get_vehicle_logs.

Vehiculos — Jugador

ANY/server_cars?action=buy_vehicle member+
ParamTipoReqDescripcion
server_character_idintSi
vehicle_model_idintSi
platestring*Custom plate (si plate_mode=custom)
colorstringNoDefault: #FFFFFF
payment_methodstringNoauto/bank/wallet

Otras: get_my_vehicles, get_vehicle, remove_vehicle (solo tu vehiculo).

Roles Custom

Ruta: POST /server_roles. Parametro: action.

Sistema de roles personalizados con jerarquia y permisos granulares.

ANY/server_roles?action=list_roles member+

Ordenados por hierarchy DESC.

ANY/server_roles?action=create_role

Requiere permiso manage_roles. Tu hierarchy debe ser > al del nuevo rol.

ParamTipoReqDescripcion
namestringSi1-64, unico por server
colorstringNo#RRGGBB (default: #99AAB5)
hierarchyintNo1-99 (100 = Owner, reservado)
permissionsarrayNoLista de permisos
max_membersintNo
ANY/server_roles?action=update_role

Requiere manage_roles y/o manage_role_permissions. Roles de sistema: solo se puede cambiar el color.

ANY/server_roles?action=delete_role

No se pueden borrar roles de sistema. Miembros se reasignan a "Member".

ANY/server_roles?action=transfer_server owner

Transfiere ownership a otro miembro. El owner actual baja a Admin.

ParamTipoReqDescripcion
target_discord_idstringSiDiscord ID del nuevo owner

Permisos disponibles

PermisoDescripcion
manage_rolesCrear, editar y eliminar roles
manage_role_permissionsEditar permisos de roles
assign_rolesAsignar roles a miembros
manage_membersGestionar miembros del servidor
manage_vehicle_modelsGestionar modelos de vehiculos
manage_vehicle_configConfigurar sistema de vehiculos
manage_vehiclesGestionar vehiculos de miembros
manage_bank_configConfigurar sistema bancario
approve_loansAprobar prestamos bancarios
view_bank_logsVer logs bancarios
execute_inheritanceEjecutar herencias
manage_taxesConfigurar impuestos
manage_itemsGestionar items del servidor
manage_licensesGestionar licencias
manage_dniGestionar DNIs/personajes
manage_shopGestionar tienda
view_logsVer logs de auditoria

Bot (server_bot)

Ruta: POST /server_bot. Requiere header X-MDT-Internal-Key, que solo tiene el bot de Discord de Blixye. Rate limit: 180/min.

Solo el vinculo de un servidor de Discord con su comunidad: discord_link_verify, discord_link_info, discord_link_unlink y discord_member_recognized. Resuelven por guild_id/codigo y por lo que el bot saca de Discord (dueno del gremio).

Dinero, objetos, CK y el resto de acciones de bot van por /discord_bot, con un token por servidor (X-Bot-Token) y el permiso del rol de quien actua comprobado en el servidor. Las nueve acciones que habia aqui y /server_bot_permissions se quitaron el 2026-09-23: se fiaban del server_id y de los roles que mandara quien llamase.

Cacheo / Search

Ruta: POST /server_cacheo. Sistema de registro/cacheo de personajes.

ANY/server_cacheo?action=start

Inicia sesion de cacheo. Devuelve items searchable del target.

ParamTipoReqDescripcion
searcher_character_idintSiTu personaje
target_character_idintSiPersonaje a cachear
ANY/server_cacheo?action=confirm_action

Decide item por item: confiscated o left.

ParamTipoReqDescripcion
session_idintSi
result_idintSi
item_actionstringSiconfiscated o left
ANY/server_cacheo?action=complete

Completa cacheo. Todos los items deben estar confirmados. Los confiscated se eliminan del inventario.

ANY/server_cacheo?action=cancel

Cancela sin aplicar confiscaciones.

ANY/server_cacheo?action=get_session

Audit Logs

Ruta: POST /server_logs. Parametro: action.

ANY/server_logs?action=query owner/admin
ParamTipoReqDescripcion
server_idintSi
domainstringNoFiltro: bank, inventory, vehicle, license, etc.
actionstringNoFiltro por tipo de accion
character_idintNoFiltro por personaje
searchstringNoBusqueda LIKE en note y action
date_fromstringNoFecha inicio
date_tostringNoFecha fin
pageintNoDefault: 1
per_pageintNo1-100, default: 50
Blixye API v2.5 — Generado el 2026-03-21
Parametro comun en todos los endpoints de server: server_id (int) + apikey (string)