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
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| type | string | Ja | Spieltyp für den Scan |
| pinName | string | Nein | Benutzerdefinierter Name für die PIN (max. 50 Zeichen) |
| ramDump | boolean | Nein | RAM-Dump-Analyse aktivieren (Standard: false) |
| private | boolean | Nein | PIN 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
| Feld | Typ | Beschreibung |
|---|---|---|
| pin | string | Der generierte 8-stellige PIN-Code |
| type | string | Der Spieltyp |
| status | string | Anfangsstatus (immer "pending") |
| pinName | string | null | Der der PIN zugewiesene benutzerdefinierte Name |
| ramDump | boolean | Ob der RAM-Dump aktiviert ist |
| private | boolean | Ob die PIN privat ist |
| expiresAt | string | ISO-8601-Zeitstempel, wann die PIN abläuft, wenn sie ungenutzt bleibt (24 Stunden) |
| createdAt | string | ISO-8601-Zeitstempel der Erstellung der PIN |
| enterprise | string | Name des Enterprise, zu dem die PIN gehört |
Fehlerantworten
| Status | Code | Beschreibung |
|---|---|---|
400 | Ungültige Anfrage | Ungültiger Spieltyp |
403 | Verboten | Konto ist gesperrt oder Nutzer ist kein Enterprise-Eigentümer |
404 | Nicht gefunden | Dem 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
| Limit | Wert |
|---|---|
| Gleichzeitig aktive PINs | 3 (pending + scanning) |
| PIN-Ablauf | 24 Stunden nach Erstellung, wenn ungenutzt |
| Länge des PIN-Namens | Maximal 50 Zeichen |
| API-Rate-Limit | 1.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);