API создания PIN
POST /v1/pins/create
API создания PIN позволяет владельцам Enterprise программно создавать PIN-коды сканирования. Подходит для автоматизации процессов screenshare, интеграций с Discord-ботами и систем управления турнирами.
- Базовый URL
https://api.anticheat.ac/v1- Аутентификация
- Требуется API-ключ с разрешением
pins:create
Только для владельцев Enterprise
Этот эндпоинт доступен только владельцам Enterprise. Обычные пользователи с платной лицензией и участники Enterprise не могут им пользоваться. Чтобы создавать API-ключи с разрешением pins:create, нужно быть владельцем активного Enterprise.
Создать PIN
Создаёт новый PIN-код сканирования для конкретного типа игры. Неиспользованный PIN истекает через 24 часа. Можно сделать PIN приватным (доступен только вам) или публичным (виден в вашей организации).
POST/v1/pins/create
Заголовки
x-api-key: your_api_key_here Content-Type: application/json
Тело запроса
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| type | string | Да | Тип игры для сканирования |
| pinName | string | Нет | Своё название PIN (не более 50 символов) |
| ramDump | boolean | Нет | Включить анализ дампа RAM (по умолчанию: false) |
| private | boolean | Нет | Сделать PIN приватным (по умолчанию: false). Приватные PIN видны только вам. |
Допустимые типы игр
- Java
- Bedrock
- FiveM
- RedM
- RageMP
- AltV
- Roblox
- SanAndreas
- Cod
- Rust
Пример запроса
{
"type": "Java",
"pinName": "Tournament Match #42",
"ramDump": false,
"private": true
}Ответ (успех)
{
"pin": "A7K3M2P9",
"type": "Java",
"status": "pending",
"pinName": "Tournament Match #42",
"ramDump": false,
"private": true,
"expiresAt": "2026-02-12T15:25:00.000Z",
"createdAt": "2026-02-11T15:25:00.000Z",
"enterprise": "My Organization"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
| pin | string | Сгенерированный 8-символьный код PIN |
| type | string | Тип игры |
| status | string | Начальный статус (всегда "pending") |
| pinName | string | null | Своё название, присвоенное PIN |
| ramDump | boolean | Включён ли дамп RAM |
| private | boolean | Является ли PIN приватным |
| expiresAt | string | Метка времени ISO 8601, когда истекает неиспользованный PIN (24 часа) |
| createdAt | string | Метка времени ISO 8601, когда был создан PIN |
| enterprise | string | Название Enterprise, которому принадлежит PIN |
Ответы с ошибками
| Статус | Код | Описание |
|---|---|---|
400 | Неверный запрос | Недопустимый тип игры |
403 | Доступ запрещён | Аккаунт заблокирован, или пользователь не является владельцем Enterprise |
404 | Не найдено | Пользователь, связанный с API-ключом, не найден |
Видимость PIN
Если private равно true, PIN и его результаты видны только вам. Если false (по умолчанию), другие участники вашего Enterprise могут видеть PIN в панели организации.
Совет по работе
После создания PIN используйте API статуса PIN, чтобы следить за ходом сканирования, и API результатов PIN, чтобы получить полные данные об обнаружениях после завершения сканирования. Статус PIN · PIN-коды
Лимиты
| Лимит | Значение |
|---|---|
| Активных PIN одновременно | 3 (pending + scanning) |
| Срок действия PIN | 24 часа после создания, если не использован |
| Длина названия PIN | Максимум 50 символов |
| Лимит запросов API | 1 000 запросов в час (общий для всех эндпоинтов) |
Пример использования
cURL
curl -X POST "https://api.anticheat.ac/v1/pins/create" \
-H "x-api-key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"type": "Java", "pinName": "Match #42", "private": true}'JavaScript / Node.js
const response = await fetch('https://api.anticheat.ac/v1/pins/create', {
method: 'POST',
headers: {
'x-api-key': 'your_api_key_here',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'Java',
pinName: 'Match #42',
private: true,
}),
});
const data = await response.json();
console.log('Pin created:', data.pin);
console.log('Expires at:', data.expiresAt);Python
import requests
response = requests.post(
'https://api.anticheat.ac/v1/pins/create',
headers={
'x-api-key': 'your_api_key_here',
'Content-Type': 'application/json',
},
json={
'type': 'Java',
'pinName': 'Match #42',
'private': True,
}
)
data = response.json()
print(f"Pin created: {data['pin']}")
print(f"Expires at: {data['expiresAt']}")Полный процесс: создание + опрос + результаты (JavaScript)
const API_KEY = 'your_api_key_here';
const headers = {
'x-api-key': API_KEY,
'Content-Type': 'application/json',
};
async function createAndTrackPin(gameType, pinName, isPrivate = false) {
const createRes = await fetch('https://api.anticheat.ac/v1/pins/create', {
method: 'POST',
headers,
body: JSON.stringify({
type: gameType,
pinName,
private: isPrivate,
}),
});
const pin = await createRes.json();
console.log('Pin created:', pin.pin, '- Share this code with the player');
while (true) {
const statusRes = await fetch(
'https://api.anticheat.ac/v1/pins/' + pin.pin + '/status',
{ headers }
);
const status = await statusRes.json();
console.log('[' + status.progress + '%] ' + (status.statusMessage || 'Waiting...'));
if (status.isFinished) {
const resultsRes = await fetch(
'https://api.anticheat.ac/v1/pins/' + pin.pin + '/results',
{ headers }
);
return await resultsRes.json();
}
if (status.status === 'expired' || status.status === 'error') {
throw new Error('Scan ' + status.status);
}
await new Promise(r => setTimeout(r, 5000));
}
}
const results = await createAndTrackPin('Java', 'Tournament Finals', true);
console.log('Verdict:', results.result);
console.log('Detections:', results.data.detections);