La API de la base de tramposos es la versión programática de la página Query User. Busca por ID de Discord y devuelve el perfil de la comunidad, la consulta de red externa y todos los escaneos de Ocean en los que apareció la cuenta.
Solo las cuentas con acceso a la base pueden crear una clave con el permiso db:query. El acceso sale de un plan DB Access activo, un asiento de base de un Enterprise asignado a ti, o un rol de staff. El permiso aparece deshabilitado en API Keys hasta que lo tengas.
El acceso se vuelve a comprobar en cada petición, no solo al crear la clave. Si el plan DB Access caduca, la clave sigue sirviendo para el resto de permisos, pero este endpoint empieza a responder 403.
URL base: https://api.anticheat.ac/v1
Autenticación: Se requiere una clave de API con el permiso db:query
Requiere: Licencia activa o membresía de Enterprise, más acceso a la base
Devuelve todo lo que la base tiene de un ID de Discord en tres fuentes independientes. Cualquiera puede venir en null si no hay registros.
/v1/db/query/:discordId| Nombre | Tipo | Descripción |
|---|---|---|
| discordId | string | El ID de Discord a buscar. Debe tener entre 5 y 25 dígitos |
| Cabecera | Obligatorio | Descripción |
|---|---|---|
| x-api-key | Sí | Tu clave de API |
| x-server-name | No | Una etiqueta del servidor que hace la llamada. Queda en el registro de uso para distinguir tus integraciones. Mira Registro de uso |
{
"discordId": "123456789012345678",
"botConfigured": true,
"botProfile": {
"username": "PlayerUsername",
"displayName": "Player",
"avatarUrl": "https://cdn.discordapp.com/avatars/...",
"firstSeen": "2024-03-02T18:41:00.000Z",
"lastSeen": "2026-08-11T22:05:00.000Z",
"perGameCounts": { "fivem": 12, "rust": 3 },
"totals": { "servers": 15, "roleChanges": 41, "messages": 208 },
"isConfirmedCheater": true,
"confirmedCheater": {
"reason": "Sold FiveM menus",
"caughtby": "OceanStaff",
"confirmedAt": "2025-11-30T14:02:00.000Z"
},
"roleHistory": [],
"messages": []
},
"networkLookup": {
"found": true,
"playerName": "Player",
"totalPlaytimeSeconds": 482910,
"identifiers": {
"discord": "123456789012345678",
"steam": "11000010aaaaaaa",
"all": ["discord:...", "steam:..."]
},
"servers": [
{
"serverName": "Some Roleplay",
"totalHours": 134,
"firstSeen": "2025-02-11T20:00:00.000Z",
"lastSeen": "2026-07-30T03:12:00.000Z"
}
],
"bans": { "total": 2, "activeCount": 1, "removedCount": 1, "active": [], "removed": [] },
"dangerousDiscords": { "count": 3, "guilds": [] },
"blacklist": { "listed": false }
},
"ocean": {
"scannedUser": {
"discordId": "123456789012345678",
"username": "PlayerUsername",
"overallStatus": "cheating",
"totalScans": 5,
"totalDetections": 3,
"allDetections": ["Generic Cheat Loader - Detection"],
"gamesScanned": ["FiveM"],
"firstSeenAt": "2025-01-10T08:00:00.000Z",
"lastSeenAt": "2026-08-20T15:45:00.000Z",
"relatedAccounts": [],
"scanHistory": []
},
"scanMatches": [
{
"discordIds": ["123456789012345678"],
"usernames": ["PlayerUsername"],
"cheating": "Yes",
"detects": ["Generic Cheat Loader - Detection"],
"suspicious": [],
"warning": [],
"country": "AR",
"scannedAt": "2026-08-20T15:45:00.000Z",
"matchType": "discord"
}
]
}
}| Campo | Tipo | Descripción |
|---|---|---|
| discordId | string | El ID de Discord que se buscó |
| botConfigured | boolean | Si el backend de la base de la comunidad responde. Si es false, botProfile siempre es null |
| botProfile | object | null | Perfil de la base de la comunidad: servidores, historial de roles, actividad de mensajes y si está confirmado como tramposo |
| networkLookup | object | null | Perfil de red externa: identificadores vinculados, tiempo de juego por servidor, historial de bans y estado de lista negra |
| ocean.scannedUser | object | null | Resumen de escaneos de Ocean: estado, detecciones, juegos, cuentas relacionadas e historial |
| ocean.scanMatches | array | Escaneos individuales en los que coincidió esta cuenta, por ID de Discord o por HWID compartido |
| Estado | Significado |
|---|---|
| 400 | Falta el ID de Discord o no tiene entre 5 y 25 dígitos |
| 401 | Falta la clave de API, está desactivada o caducó |
| 403 | La clave no tiene el permiso db:query, o la cuenta ya no tiene acceso a la base |
| 429 | Esta clave de API superó el límite de peticiones |
Un ID de Discord sin registros devuelve una respuesta válida con las fuentes vacías, no un 404. Los ID en lista blanca usan la misma forma, así que una cuenta en lista blanca no se distingue de una sin registros.
{
"discordId": "123456789012345678",
"botConfigured": true,
"botProfile": null,
"networkLookup": null,
"ocean": {
"scannedUser": null,
"scanMatches": []
}
}curl -X GET "https://api.anticheat.ac/v1/db/query/123456789012345678" \ -H "x-api-key: your_api_key_here" \ -H "x-server-name: Ocean RP | EU-1"
const response = await fetch(
'https://api.anticheat.ac/v1/db/query/123456789012345678',
{
headers: {
'x-api-key': 'your_api_key_here',
'x-server-name': 'Ocean RP | EU-1'
}
}
);
const data = await response.json();
if (data.botProfile?.isConfirmedCheater) {
console.log('Confirmed cheater:', data.botProfile.confirmedCheater.reason);
}
if (data.ocean.scannedUser) {
console.log('Ocean status:', data.ocean.scannedUser.overallStatus);
}
console.log('Active network bans:', data.networkLookup?.bans.activeCount ?? 0);import requests
headers = {
'x-api-key': 'your_api_key_here',
'x-server-name': 'Ocean RP | EU-1'
}
data = requests.get(
'https://api.anticheat.ac/v1/db/query/123456789012345678',
headers=headers
).json()
profile = data.get('botProfile')
if profile and profile['isConfirmedCheater']:
print(f"Confirmed cheater: {profile['confirmedCheater']['reason']}")
scanned = data['ocean']['scannedUser']
if scanned:
print(f"Ocean status: {scanned['overallStatus']}")Este endpoint sirve para revisar jugadores antes de dejarlos entrar a tu servidor, no para copiar la base. Cada llamada queda registrada con la clave, la IP y el nombre de servidor opcional. Enumerar o compartir la clave es motivo para quitar el acceso a la base.
Si varios servidores usan la misma clave, envía un x-server-name distinto desde cada uno. Es la forma más rápida de demostrar qué servidor hizo una llamada si se cuestiona el uso.