A API de criação de PINs permite que proprietários de Enterprise criem PINs de scan de forma programática. Ideal para automatizar fluxos de screenshare, integrações com bots do Discord e sistemas de gerenciamento de torneios.
URL base: https://api.anticheat.ac/v1
Autenticação: Requer chave de API com a permissão pins:create
Este endpoint está disponível exclusivamente para proprietários de Enterprise. Usuários comuns com licenças pagas ou membros de um Enterprise não podem usar este recurso. Você precisa ser dono de um Enterprise ativo para criar chaves de API com a permissão pins:create.
Cria um novo PIN de scan para um tipo de jogo específico. O PIN é válido por aproximadamente 3 horas. Você pode, opcionalmente, definir o PIN como privado (acessível somente por você) ou público (visível na sua organização).
/v1/pins/createx-api-key: your_api_key_hereContent-Type: application/json| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| type | string | Sim | Tipo de jogo do scan |
| pinName | string | Não | Nome personalizado do PIN (máximo de 50 caracteres) |
| ramDump | boolean | Não | Ativa a análise de dump de RAM (padrão: false) |
| private | boolean | Não | Define o PIN como privado (padrão: false). PINs privados são visíveis somente para você. |
JavaBedrockFiveMRedMRageMPAltVRobloxSanAndreasCodRust{
"type": "Java",
"pinName": "Tournament Match #42",
"ramDump": false,
"private": true
}{
"pin": "A7K3M2P9",
"type": "Java",
"status": "pending",
"pinName": "Tournament Match #42",
"ramDump": false,
"private": true,
"expiresAt": "2026-02-11T18:35:00.000Z",
"createdAt": "2026-02-11T15:25:00.000Z",
"enterprise": "My Organization"
}| Campo | Tipo | Descrição |
|---|---|---|
| pin | string | O código do PIN gerado, com 8 caracteres |
| type | string | O tipo de jogo |
| status | string | Status inicial (sempre "pending") |
| pinName | string | null | Nome personalizado atribuído ao PIN |
| ramDump | boolean | Indica se o dump de RAM está ativado |
| private | boolean | Indica se o PIN é privado |
| expiresAt | string | Timestamp ISO 8601 de quando o PIN expira (~3 horas) |
| createdAt | string | Timestamp ISO 8601 de quando o PIN foi criado |
| enterprise | string | Nome do Enterprise ao qual o PIN pertence |
| Status | Código | Descrição |
|---|---|---|
400 | Requisição inválida | Tipo de jogo inválido |
403 | Proibido | A conta está banida ou o usuário não é proprietário de um Enterprise |
404 | Não encontrado | Usuário associado à chave de API não encontrado |
Quando private é true, o PIN e seus resultados ficam visíveis somente para você. Quando é false (padrão), outros membros do seu Enterprise podem ver o PIN no painel da organização.
Depois de criar um PIN, use a API de status de PIN para acompanhar o progresso do scan e a API de resultados de PIN para obter os detalhes completos das detecções quando o scan terminar. Status do PIN · PINs
| Limite | Valor |
|---|---|
| PINs ativos ao mesmo tempo | 3 (pending + scanning) |
| Expiração do PIN | ~3 horas após a criação |
| Tamanho do nome do PIN | 50 caracteres no máximo |
| Limite de requisições da API | 1.000 requisições por hora (compartilhadas com todos os endpoints) |
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}'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);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']}")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);