PIN Durumu API'si bir taramanın anlık ilerlemesini izlemeni sağlar: durum, yüzde, mesaj ve tarama bitince özet sonuç. İlerleme çubukları, canlı paneller ve Discord botları için idealdir.
Temel URL: https://api.anticheat.ac/v1
Kimlik doğrulama: Şu izne sahip bir API anahtarı gerekir: pins:status
Belirli bir PIN'in güncel tarama durumunu, ilerleme yüzdesini ve durum mesajını getirir. Yalnızca hesabının oluşturduğu PIN'lere erişebilirsin. Tarama bitince yanıt, tespit sayılarıyla bir özet de içerir.
/v1/pins/:pinCode/status| Ad | Tür | Açıklama |
|---|---|---|
| pinCode | string | 8 karakterlik PIN kodu (ör. A7K3M2P9) |
x-api-key: your_api_key_here{
"pin": "A7K3M2P9",
"pinName": "Tournament Match #42",
"type": "Java",
"status": "pending",
"progress": 0,
"statusMessage": null,
"result": null,
"used": false,
"lastStatusUpdate": null,
"createdAt": "2026-02-11T15:25:00.000Z",
"isFinished": false,
"isScanning": false,
"isPending": true
}{
"pin": "A7K3M2P9",
"pinName": "Tournament Match #42",
"type": "Java",
"status": "scanning",
"progress": 45,
"statusMessage": "Scanning system files... (45%)",
"result": null,
"used": true,
"lastStatusUpdate": "2026-02-11T15:30:00.000Z",
"createdAt": "2026-02-11T15:25:00.000Z",
"isFinished": false,
"isScanning": true,
"isPending": false
}Tarama bitince yanıt bir data nesnesi ve tespit sayılarının özetini içerir. Tam tespit ayrıntısı için PIN sonuçları uç noktasını.
{
"pin": "A7K3M2P9",
"pinName": "Tournament Match #42",
"type": "Java",
"status": "finished",
"progress": 100,
"statusMessage": "Scan completed",
"result": "cheating",
"used": true,
"lastStatusUpdate": "2026-02-11T15:35:00.000Z",
"createdAt": "2026-02-11T15:25:00.000Z",
"isFinished": true,
"isScanning": false,
"isPending": false,
"data": {
"cheating": "cheating",
"vpn": "No",
"country": "US",
"scantime": "45 seconds",
"windows": "Windows 11 Pro 23H2",
"detectionsCount": 3,
"warningsCount": 1,
"suspiciousCount": 2,
"discord": [
{ "id": "123456789012345678", "username": "player123" }
]
}
}| Alan | Tür | Açıklama |
|---|---|---|
| pin | string | 8 karakterlik PIN kodu |
| pinName | string | null | PIN'e atanan özel ad |
| type | string | Tarama türü (Java, Bedrock, FiveM vb.) |
| status | string | Güncel durum: pending, scanning, finished, expired veya error |
| progress | number | 0 ile 100 arası tarama ilerlemesi |
| statusMessage | string | null | Güncel tarama adımını anlatan okunabilir mesaj |
| result | string | null | Karar: legit, cheating, suspicious veya bitmediyse null |
| used | boolean | PIN'in kullanılıp kullanılmadığı (tarama başladı mı) |
| lastStatusUpdate | string | null | Son durum güncellemesinin ISO 8601 zaman damgası |
| createdAt | string | PIN'in oluşturulduğu ISO 8601 zaman damgası |
| isFinished | boolean | Kısayol: durum "finished" ise true |
| isScanning | boolean | Kısayol: durum "scanning" ise true |
| isPending | boolean | Kısayol: durum "pending" ise true |
| Alan | Tür | Açıklama |
|---|---|---|
| cheating | string | null | Genel hile kararı |
| vpn | string | null | VPN tespit durumu |
| country | string | null | Taranan kullanıcının ülkesi |
| scantime | string | null | Taramanın ne kadar sürdüğü |
| windows | string | null | Windows sürüm bilgisi |
| detectionsCount | number | Doğrulanmış hile tespiti sayısı |
| warningsCount | number | Uyarı işareti sayısı |
| suspiciousCount | number | Şüpheli bulgu sayısı |
| discord | array | Tespit edilen Discord hesapları. Her kayıtta şunlar vardır: id ve username |
| Durum | Kod | Açıklama |
|---|---|---|
400 | Geçersiz istek | PIN kodu boş veya geçersiz |
403 | Yasak | PIN hesabına ait değil |
404 | Bulunamadı | PIN kodu yok |
Yalnızca kendi hesabının oluşturduğu PIN'lerin durumunu sorgulayabilirsin. Başka bir kullanıcının PIN'ine erişmek 403 Forbidden döndürür.
Bu uç nokta tarama sürerken sorgulamak içindir. İlerlemeyi ve bitince hafif bir özeti döndürür. Tam tespit ayrıntısı (tek tek tespitler, şüpheli öğeler, uyarılar, bütünlük) için PIN sonuçları uç noktasını kullan, tarama bittikten sonra.
Taramalar zaman alır. İlerlemeyi izlemek için bu uç noktayı belirli aralıklarla sorgula. Önerilen stratejiler:
| Strateji | Aralık | Kullanım |
|---|---|---|
| İlerleme çubuğu | 3-5 saniye | Bir arayüzde veya Discord embed'inde anlık ilerleme |
| Arka plan kontrolü | 10-15 saniye | Sonuç gelince bildirim göndermek için bekleyen bot |
| Toplu izleme | 30-60 saniye | Aynı anda çok sayıda PIN izlemek |
API, anahtar başına saatte 1.000 isteğe izin verir. Her 3 saniyede bir sorgularsan tek bir PIN dakikada yaklaşık 20 istek harcar. Aralığı aynı anda izlediğin PIN sayısına göre ayarla.
curl -X GET "https://api.anticheat.ac/v1/pins/A7K3M2P9/status" \ -H "x-api-key: your_api_key_here"
const response = await fetch('https://api.anticheat.ac/v1/pins/A7K3M2P9/status', {
headers: { 'x-api-key': 'your_api_key_here' }
});
const data = await response.json();
console.log('Status:', data.status);
console.log('Progress:', data.progress + '%');
console.log('Message:', data.statusMessage);
if (data.isFinished) {
console.log('Result:', data.result);
console.log('Detections:', data.data.detectionsCount);
}import requests
response = requests.get(
'https://api.anticheat.ac/v1/pins/A7K3M2P9/status',
headers={'x-api-key': 'your_api_key_here'}
)
data = response.json()
print(f"Status: {data['status']}")
print(f"Progress: {data['progress']}%")
print(f"Message: {data.get('statusMessage', 'N/A')}")
if data['isFinished']:
print(f"Result: {data['result']}")
print(f"Detections: {data['data']['detectionsCount']}")async function pollPinStatus(pinCode, apiKey, onProgress) {
const url = 'https://api.anticheat.ac/v1/pins/' + pinCode + '/status';
const headers = { 'x-api-key': apiKey };
while (true) {
const res = await fetch(url, { headers });
const data = await res.json();
onProgress({
status: data.status,
progress: data.progress,
message: data.statusMessage,
});
if (data.isFinished) return data;
if (data.status === 'expired' || data.status === 'error') {
throw new Error('Scan ' + data.status);
}
await new Promise(r => setTimeout(r, 3000));
}
}
const result = await pollPinStatus('A7K3M2P9', 'your_api_key_here', (info) => {
console.log('[' + info.progress + '%] ' + info.message);
});
console.log('Final result:', result.result);
console.log('Detections:', result.data.detectionsCount);const { EmbedBuilder } = require('discord.js');
async function trackScan(channel, pinCode, apiKey) {
const url = 'https://api.anticheat.ac/v1/pins/' + pinCode + '/status';
const headers = { 'x-api-key': apiKey };
const embed = new EmbedBuilder()
.setTitle('Scan: ' + pinCode)
.setDescription('Starting scan...')
.setColor(0x3498db);
const msg = await channel.send({ embeds: [embed] });
const interval = setInterval(async () => {
try {
const res = await fetch(url, { headers });
const data = await res.json();
const bar = '\u2588'.repeat(Math.floor(data.progress / 5))
+ '\u2591'.repeat(20 - Math.floor(data.progress / 5));
embed.setDescription(
bar + ' ' + data.progress + '%\n'
+ (data.statusMessage || 'Waiting...')
);
if (data.isFinished) {
clearInterval(interval);
embed.setColor(data.result === 'legit' ? 0x2ecc71 : 0xe74c3c);
embed.addFields(
{ name: 'Result', value: data.result, inline: true },
{ name: 'Detections', value: String(data.data.detectionsCount), inline: true },
{ name: 'Warnings', value: String(data.data.warningsCount), inline: true },
);
}
await msg.edit({ embeds: [embed] });
} catch (err) {
clearInterval(interval);
embed.setDescription('Error: ' + err.message).setColor(0xe74c3c);
await msg.edit({ embeds: [embed] });
}
}, 5000);
}