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
| Nazwa | Typ | Opis |
|---|---|---|
| discordId | string | ID użytkownika Discord do wyszukania. Musi mieć od 5 do 25 cyfr |
Nagłówki
| Nagłówek | Wymagane | Opis |
|---|---|---|
| x-api-key | Tak | Twój klucz API |
| x-server-name | Nie | Etykieta 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
| Pole | Typ | Opis |
|---|---|---|
| discordId | string | Wyszukiwane ID Discord |
| botConfigured | boolean | Czy backend bazy społeczności jest osiągalny. Gdy false, botProfile jest zawsze null |
| botProfile | object | null | Profil z bazy społeczności: serwery, w których był widziany, historia ról, aktywność wiadomości i status potwierdzonego oszusta |
| networkLookup | object | null | Profil z sieci zewnętrznej: powiązane identyfikatory, czas gry na serwerach, historia banów i status czarnej listy |
| ocean.scannedUser | object | null | Podsumowanie skanowań Ocean: status, wykrycia, gry, powiązane konta i historia skanowań |
| ocean.scanMatches | array | Pojedyncze skanowania, do których to konto pasowało, po ID Discord lub wspólnym HWID |
Błędy
| Status | Znaczenie |
|---|---|
| 400 | Brakuje ID Discord lub nie ma ono od 5 do 25 cyfr |
| 401 | Klucz API nie istnieje, jest wyłączony lub wygasł |
| 403 | Klucz nie ma uprawnienia db:query lub konto nie ma już dostępu do bazy |
| 429 | Przekroczono 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.