Przejdź do głównej treści

API bazy oszustów

GET /v1/db/query/:discordId

API bazy oszustów to programowa wersja strony Query User. Przeszukuje bazę oszustów po ID Discord i zwraca profil społeczności, zewnętrzne wyszukiwanie w sieci oraz każde skanowanie Ocean, w którym pojawiło się to konto.

Wymaga DB Access

Tylko konta z dostępem do bazy mogą tworzyć klucz API z uprawnieniem db:query. DB Access pochodzi z aktywnego planu DB Access, przypisanego Ci miejsca w bazie Enterprise lub roli staff. Uprawnienie jest wyszarzone w zakładce API Keys, dopóki go nie masz.

Dostęp jest sprawdzany ponownie przy każdym żądaniu, nie tylko przy tworzeniu klucza. Jeśli plan DB Access wygaśnie, klucz nadal działa dla pozostałych uprawnień, ale ten endpoint zaczyna odpowiadać 403.

Bazowy URL
https://api.anticheat.ac/v1
Uwierzytelnianie
Wymagany klucz API z uprawnieniem db:query
Wymaga
Aktywna licencja lub członkostwo w Enterprise oraz dostęp do bazy

Przeszukaj bazę po ID Discord

Zwraca wszystko, co baza zawiera o danym ID Discord, z trzech niezależnych źródeł. Każde z nich może zwrócić null, gdy brak zapisów.

GET/v1/db/query/:discordId

Parametry

NazwaTypOpis
discordIdstringID użytkownika Discord do wyszukania. Musi mieć od 5 do 25 cyfr

Nagłówki

NagłówekWymaganeOpis
x-api-keyTakTwój klucz API
x-server-nameNieEtykieta serwera wykonującego wywołanie. Zapisywana w logu użycia, abyś mógł rozróżniać własne integracje. Zobacz Logowanie użycia

Odpowiedź

{
  "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"
      }
    ]
  }
}

Pola odpowiedzi

PoleTypOpis
discordIdstringWyszukiwane ID Discord
botConfiguredbooleanCzy backend bazy społeczności jest osiągalny. Gdy false, botProfile jest zawsze null
botProfileobject | nullProfil z bazy społeczności: serwery, w których był widziany, historia ról, aktywność wiadomości i status potwierdzonego oszusta
networkLookupobject | nullProfil z sieci zewnętrznej: powiązane identyfikatory, czas gry na serwerach, historia banów i status czarnej listy
ocean.scannedUserobject | nullPodsumowanie skanowań Ocean: status, wykrycia, gry, powiązane konta i historia skanowań
ocean.scanMatchesarrayPojedyncze skanowania, do których to konto pasowało, po ID Discord lub wspólnym HWID

Błędy

StatusZnaczenie
400Brakuje ID Discord lub nie ma ono od 5 do 25 cyfr
401Klucz API nie istnieje, jest wyłączony lub wygasł
403Klucz nie ma uprawnienia db:query lub konto nie ma już dostępu do bazy
429Przekroczono limit żądań dla tego klucza API

Puste wyniki

ID Discord bez zapisów zwraca poprawną odpowiedź z pustymi źródłami zamiast 404. ID Discord z białej listy zwracają ten sam kształt, więc konta z białej listy nie da się odróżnić od konta bez zapisów.

{
  "discordId": "123456789012345678",
  "botConfigured": true,
  "botProfile": null,
  "networkLookup": null,
  "ocean": {
    "scannedUser": null,
    "scanMatches": []
  }
}

Przykład użycia

cURL

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"

JavaScript/Node.js

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);

Python

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']}")

Uczciwe użycie

Nie eksportuj bazy hurtowo

Ten endpoint służy do sprawdzania graczy, których zamierzasz wpuścić na swój serwer, a nie do kopiowania bazy. Każde wywołanie jest logowane z kluczem, IP i opcjonalną nazwą serwera. Wzorce enumeracji i współdzielenie klucza są podstawą do cofnięcia dostępu do bazy.

Wysyłaj x-server-name

Jeśli kilka serwerów korzysta z jednego klucza, wysyłaj z każdego inny x-server-name. To najszybszy sposób, by udowodnić, który z Twoich serwerów wykonał wywołanie, jeśli użycie zostanie zakwestionowane.