Zum Hauptinhalt springen

Create-Pins-API

POST /v1/pins/create

Die Create-Pins-API ermöglicht Enterprise-Eigentümern, Scan-PINs programmatisch zu erstellen. Ideal zur Automatisierung von Screenshare-Abläufen, für Discord-Bot-Integrationen und Turnierverwaltungssysteme.

Basis-URL
https://api.anticheat.ac/v1
Authentifizierung
API-Schlüssel erforderlich mit pins:create

Nur für Enterprise-Eigentümer

Dieser Endpunkt steht ausschließlich Enterprise-Eigentümern zur Verfügung. Normale Nutzer mit bezahlter Lizenz oder Enterprise-Mitglieder können diese Funktion nicht verwenden. Du musst ein aktives Enterprise besitzen, um API-Schlüssel mit der Berechtigung pins:create zu erstellen.

PIN erstellen

Erstelle eine neue Scan-PIN für einen bestimmten Spieltyp. Eine ungenutzte PIN läuft nach 24 Stunden ab. Optional kannst du die PIN als privat (nur für dich zugänglich) oder öffentlich (in deiner Organisation sichtbar) festlegen.

POST/v1/pins/create

Header

x-api-key: your_api_key_here
Content-Type: application/json

Request-Body

FeldTypErforderlichBeschreibung
typestringJaSpieltyp für den Scan
pinNamestringNeinBenutzerdefinierter Name für die PIN (max. 50 Zeichen)
ramDumpbooleanNeinRAM-Dump-Analyse aktivieren (Standard: false)
privatebooleanNeinPIN als privat festlegen (Standard: false). Private PINs sind nur für dich sichtbar.

Gültige Spieltypen

  • Java
  • Bedrock
  • FiveM
  • RedM
  • RageMP
  • AltV
  • Roblox
  • SanAndreas
  • Cod
  • Rust

Request-Beispiel

{
  "type": "Java",
  "pinName": "Tournament Match #42",
  "ramDump": false,
  "private": true
}

Antwort (Erfolg)

{
  "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"
}

Antwortfelder

FeldTypBeschreibung
pinstringDer generierte 8-stellige PIN-Code
typestringDer Spieltyp
statusstringAnfangsstatus (immer "pending")
pinNamestring | nullDer der PIN zugewiesene benutzerdefinierte Name
ramDumpbooleanOb der RAM-Dump aktiviert ist
privatebooleanOb die PIN privat ist
expiresAtstringISO-8601-Zeitstempel, wann die PIN abläuft, wenn sie ungenutzt bleibt (24 Stunden)
createdAtstringISO-8601-Zeitstempel der Erstellung der PIN
enterprisestringName des Enterprise, zu dem die PIN gehört

Fehlerantworten

StatusCodeBeschreibung
400Ungültige AnfrageUngültiger Spieltyp
403VerbotenKonto ist gesperrt oder Nutzer ist kein Enterprise-Eigentümer
404Nicht gefundenDem API-Schlüssel zugeordneter Nutzer nicht gefunden

PIN-Sichtbarkeit

Wenn private auf true gesetzt ist, sind die PIN und ihre Ergebnisse nur für dich sichtbar. Bei false (Standard) können andere Mitglieder deines Enterprise die PIN im Organisations-Dashboard sehen.

Workflow-Tipp

Nach dem Erstellen einer PIN kannst du mit der Pin-Status-API den Scan-Fortschritt überwachen und mit der Pin-Results-API die vollständigen Erkennungsdetails abrufen, sobald der Scan abgeschlossen ist. PIN-Status · PINs

Limits

LimitWert
Gleichzeitig aktive PINs3 (pending + scanning)
PIN-Ablauf24 Stunden nach Erstellung, wenn ungenutzt
Länge des PIN-NamensMaximal 50 Zeichen
API-Rate-Limit1.000 Anfragen pro Stunde (gemeinsam für alle Endpunkte)

Anwendungsbeispiel

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']}")

Vollständiger Workflow: Erstellen + Abfragen + Ergebnisse (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);