Перейти к основному содержимому

API PIN

GET /v1/pins/:pinCode/results

API PIN позволяет программно получать результаты сканирования для ваших собственных PIN. Полезно для создания Discord-ботов, инструментов автоматизации и собственных интеграций. Чтобы отслеживать ход сканирования в реальном времени, см. API статуса PIN.

Базовый URL
https://api.anticheat.ac/v1
Аутентификация
Требуется API-ключ с разрешением pins:results

Получить результаты PIN

Получите результаты сканирования для конкретного PIN. Доступ есть только к результатам PIN, которыми вы владеете (созданным вашим аккаунтом). Возвращает данные обнаружения: детекты, подозрительные элементы, предупреждения, проверки целостности и базовые метаданные сканирования.

GET/v1/pins/:pinCode/results

Параметры

НазваниеТипОписание
pinCodestring8-символьный код PIN (например, A7K3M2P9P9)

Заголовки

x-api-key: your_api_key_here

Ответ (сканирование завершено)

{
  "pin": "A7K3M2P9P9",
  "type": "Java",
  "status": "finished",
  "result": "cheating",
  "pinName": "Tournament Match #42",
  "data": {
    "cheating": "cheating",
    "detections": [
      "Generic Cheat Loader - Detection",
      "Process Injection - javaw.exe"
    ],
    "suspicious": [
      "Modified game files detected"
    ],
    "warnings": [
      "Multiple Minecraft instances detected"
    ],
    "untrusted": [],
    "integrity": [
      "System file tampered: kernel32.dll"
    ],
    "customSuspicious": [],
    "vpn": "No",
    "country": "US",
    "logon": "2h 30m",
    "scantime": "45 seconds",
    "windows": "Windows 11 Pro 23H2",
    "discord": [
      { "id": "123456789012345678", "username": "player123" }
    ]
  },
  "createdAt": "2024-01-15T10:30:00.000Z"
}

Ответ (ожидание/в процессе)

{
  "pin": "A7K3M2P9",
  "type": "Java",
  "status": "pending",
  "result": "none",
  "pinName": "Tournament Match #42",
  "message": "Pin is waiting for scan to start"
}

Ответы с ошибками

СтатусКодОписание
400Неверный запросКод PIN пуст или недействителен
403Доступ запрещёнЭтот PIN не принадлежит вашему аккаунту
404Не найденоКод PIN не существует

Поля данных

ПолеТипОписание
cheatingstring | nullОбщий вердикт о читерстве
detectionsarrayСписок подтверждённых детектов читов
suspiciousarrayСписок подозрительных находок
warningsarrayСписок флагов предупреждений
untrustedarrayСписок недоверенных элементов
integrityarrayСписок результатов проверок целостности
customSuspiciousarrayСобственные подозрительные детекты по настроенным вами ключевым словам
vpnstring | nullСтатус обнаружения VPN
countrystring | nullСтрана проверяемого пользователя
logonstring | nullПродолжительность сеанса/аптайм системы
scantimestring | nullСколько длилось сканирование
windowsstring | nullИнформация о версии Windows
discordarrayАккаунты Discord, обнаруженные в проверяемой системе. Каждая запись содержит id (Discord ID пользователя) и username

Нужно быть владельцем

Вы можете получать результаты только для PIN, созданных вашим аккаунтом. При попытке получить доступ к PIN другого пользователя API вернёт ошибку 403 Forbidden.

Защита конфиденциальности

Чувствительные данные, такие как HWID, IP сервера, альт-аккаунты и внутренние идентификаторы, никогда не передаются через этот эндпоинт — это защищает конфиденциальность пользователей.

Статусы PIN

СтатусОписание
pendingPIN создан, ожидает начала сканирования
scanningСканирование выполняется
finishedСканирование завершено, результаты доступны
expiredPIN истёк до завершения сканирования
errorВо время сканирования произошла ошибка

Пример использования

cURL

curl -X GET "https://api.anticheat.ac/v1/pins/A7K3M2P9/results" \
  -H "x-api-key: your_api_key_here"

JavaScript / Node.js

const response = await fetch('https://api.anticheat.ac/v1/pins/A7K3M2P9/results', {
  headers: { 'x-api-key': 'your_api_key_here' }
});

const data = await response.json();

if (data.status === 'finished') {
  console.log('Result:', data.result);
  console.log('Detections:', data.data.detections);
  console.log('Suspicious:', data.data.suspicious);
} else {
  console.log('Status:', data.status, '-', data.message);
}

Python

import requests

response = requests.get(
    'https://api.anticheat.ac/v1/pins/A7K3M2P9/results',
    headers={'x-api-key': 'your_api_key_here'}
)

data = response.json()

if data['status'] == 'finished':
    print(f"Result: {data['result']}")
    print(f"Detections: {data['data']['detections']}")
else:
    print(f"Status: {data['status']} - {data.get('message', '')}")

Опрос до завершения (JavaScript)

async function waitForResults(pinCode, apiKey) {
  const url = 'https://api.anticheat.ac/v1/pins/' + pinCode + '/results';
  const headers = { 'x-api-key': apiKey };

  while (true) {
    const res = await fetch(url, { headers });
    const data = await res.json();

    if (data.status === 'finished') return data;
    if (data.status === 'expired' || data.status === 'error') {
      throw new Error('Scan ' + data.status + ': ' + (data.message || ''));
    }

    await new Promise(r => setTimeout(r, 5000));
  }
}

const results = await waitForResults('A7K3M2P9', 'your_api_key_here');
console.log(results.data);