API tworzenia PIN-ów
POST /v1/pins/create
API tworzenia PIN-ów pozwala właścicielom Enterprise tworzyć PIN-y skanowania programowo. Idealne do automatyzacji procesów screenshare, integracji z botami Discord i systemów zarządzania turniejami.
- Bazowy URL
https://api.anticheat.ac/v1- Uwierzytelnianie
- Wymagany klucz API z uprawnieniem
pins:create
Tylko dla właścicieli Enterprise
Ten endpoint jest dostępny wyłącznie dla właścicieli Enterprise. Zwykli użytkownicy z płatnymi licencjami ani członkowie Enterprise nie mogą z niego korzystać. Musisz być właścicielem aktywnego Enterprise, aby tworzyć klucze API z uprawnieniem pins:create.
Utwórz PIN
Tworzy nowy PIN skanowania dla wybranego typu gry. Niewykorzystany PIN wygasa po 24 godzinach. Opcjonalnie możesz ustawić PIN jako prywatny (dostępny tylko dla Ciebie) lub publiczny (widoczny w Twojej organizacji).
POST/v1/pins/create
Nagłówki
x-api-key: your_api_key_here Content-Type: application/json
Treść żądania
| Pole | Typ | Wymagane | Opis |
|---|---|---|---|
| type | string | Tak | Typ gry dla skanowania |
| pinName | string | Nie | Własna nazwa PIN-u (maks. 50 znaków) |
| ramDump | boolean | Nie | Włącz analizę zrzutu RAM (domyślnie: false) |
| private | boolean | Nie | Ustaw PIN jako prywatny (domyślnie: false). Prywatne PIN-y są widoczne tylko dla Ciebie. |
Prawidłowe typy gier
- Java
- Bedrock
- FiveM
- RedM
- RageMP
- AltV
- Roblox
- SanAndreas
- Cod
- Rust
Przykład żądania
{
"type": "Java",
"pinName": "Tournament Match #42",
"ramDump": false,
"private": true
}Odpowiedź (sukces)
{
"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"
}Pola odpowiedzi
| Pole | Typ | Opis |
|---|---|---|
| pin | string | Wygenerowany 8-znakowy kod PIN |
| type | string | Typ gry |
| status | string | Początkowy status (zawsze "pending") |
| pinName | string | null | Własna nazwa przypisana do PIN-u |
| ramDump | boolean | Czy zrzut RAM jest włączony |
| private | boolean | Czy PIN jest prywatny |
| expiresAt | string | Znacznik czasu ISO 8601 wygaśnięcia PIN-u, jeśli nie zostanie użyty (24 godziny) |
| createdAt | string | Znacznik czasu ISO 8601 utworzenia PIN-u |
| enterprise | string | Nazwa Enterprise, do którego należy PIN |
Odpowiedzi z błędem
| Status | Kod | Opis |
|---|---|---|
400 | Nieprawidłowe żądanie | Nieprawidłowy typ gry |
403 | Zabronione | Konto jest zbanowane lub użytkownik nie jest właścicielem Enterprise |
404 | Nie znaleziono | Nie znaleziono użytkownika powiązanego z kluczem API |
Widoczność PIN-u
Gdy private ma wartość true, PIN i jego wyniki są widoczne tylko dla Ciebie. Gdy ma wartość false (domyślnie), inni członkowie Twojego Enterprise mogą zobaczyć PIN w panelu organizacji.
Wskazówka dotycząca procesu
Po utworzeniu PIN-u użyj API statusu PIN-u, aby śledzić postęp skanowania, oraz API wyników PIN-u, aby pobrać pełne szczegóły wykryć po zakończeniu skanowania. Status PIN-u · PIN-y
Limity
| Limit | Wartość |
|---|---|
| Aktywne PIN-y jednocześnie | 3 (pending + scanning) |
| Wygaśnięcie PIN-u | 24 godziny po utworzeniu, jeśli nie został użyty |
| Długość nazwy PIN-u | maksymalnie 50 znaków |
| Limit API | 1000 żądań na godzinę (wspólny dla wszystkich endpointów) |
Przykład użycia
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']}")Pełny proces: utwórz + sprawdzaj + wyniki (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);