Przejdź do głównej treści

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

PoleTypWymaganeOpis
typestringTakTyp gry dla skanowania
pinNamestringNieWłasna nazwa PIN-u (maks. 50 znaków)
ramDumpbooleanNieWłącz analizę zrzutu RAM (domyślnie: false)
privatebooleanNieUstaw 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

PoleTypOpis
pinstringWygenerowany 8-znakowy kod PIN
typestringTyp gry
statusstringPoczątkowy status (zawsze "pending")
pinNamestring | nullWłasna nazwa przypisana do PIN-u
ramDumpbooleanCzy zrzut RAM jest włączony
privatebooleanCzy PIN jest prywatny
expiresAtstringZnacznik czasu ISO 8601 wygaśnięcia PIN-u, jeśli nie zostanie użyty (24 godziny)
createdAtstringZnacznik czasu ISO 8601 utworzenia PIN-u
enterprisestringNazwa Enterprise, do którego należy PIN

Odpowiedzi z błędem

StatusKodOpis
400Nieprawidłowe żądanieNieprawidłowy typ gry
403ZabronioneKonto jest zbanowane lub użytkownik nie jest właścicielem Enterprise
404Nie znalezionoNie 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

LimitWartość
Aktywne PIN-y jednocześnie3 (pending + scanning)
Wygaśnięcie PIN-u24 godziny po utworzeniu, jeśli nie został użyty
Długość nazwy PIN-umaksymalnie 50 znaków
Limit API1000 żą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);