Visão geral
A API é destinada a chamadas servidor → servidor. Ela não deve ser acessada pelo cliente do jogador e a chave nunca deve ser enviada junto da DLL de cliente. O SteamID64 é o identificador principal; nome e avatar servem apenas para exibição.
A rede retorna fatos registrados. A DLL parceira continua responsável por sua ação local e por oferecer revisão administrativa.
| BASE URL | https://SEU-DOMINIO/api/v1 |
|---|---|
| FORMATO | JSON UTF-8 |
| RELÓGIO | UTC; tolerância máxima de 5 minutos |
| TAMANHO | 32 KB por registro |
Autenticação
Cada servidor recebe uma chave própria no formato als_live_PREFIXO.SEGREDO. O painel exibe o segredo uma única vez. No banco, a chave fica derivada com um pepper separado; nunca em texto puro.
- Guarde a chave em variável de ambiente ou arquivo protegido somente pelo usuário do servidor.
- Envie a chave como
Authorization: Bearer .... - Assine toda requisição com a mesma chave.
- Rotacione imediatamente em caso de suspeita.
Redija o cabeçalho Authorization e não inclua a chave em mensagens de erro, telemetria ou screenshots.
Assinatura e anti-replay
A assinatura é HMAC-SHA256 em hexadecimal minúsculo. O corpo é calculado exatamente nos bytes UTF-8 enviados. Para GET sem corpo, use o SHA-256 da string vazia.
timestamp + "\n" +
nonce + "\n" +
method.ToUpperInvariant() + "\n" +
pathAndQuery + "\n" +
sha256Hex(bodyUtf8)X-ALS-Timestamp: Unix time em segundos.X-ALS-Nonce: valor aleatório único de 16 a 128 caracteres.X-ALS-Content-SHA256: SHA-256 hexadecimal do corpo.X-ALS-Signature: HMAC hexadecimal da string canônica.
Um nonce aceito não pode ser repetido. O timestamp evita reuso tardio e X-Idempotency-Key impede duplicação acidental de POST quando o servidor tenta novamente.
Endpoints
| MÉTODO | ROTA | ESCOPO | USO |
|---|---|---|---|
| GET | /bans/{steamId64} | bans:read | Consulta registros ativos. |
| POST | /bans | bans:write | Registra um ban técnico. |
| DELETE | /bans/{banId} | bans:revoke | Revoga ban criado pela mesma origem. |
| GET | /health | público | Verifica disponibilidade, sem dados. |
Exemplo de registro
POST /api/v1/bans HTTP/1.1
Authorization: Bearer als_live_ID.SEGREDO
X-ALS-Timestamp: 1786521000
X-ALS-Nonce: e29f6b7e4c9d4b2da11f609caed81cd3
X-ALS-Content-SHA256: <sha256-do-json>
X-ALS-Signature: <hmac-sha256-do-canonical>
X-Idempotency-Key: evento-unico-do-servidor
Content-Type: application/json{
"steamId": "76561198000000000",
"playerName": "PlayerExample",
"reasonCode": "wallhack_esp",
"reasonDetail": "Movimento e rastreio incompatíveis, revisão concluída.",
"confidence": 96,
"occurredAt": "2026-08-12T12:00:00.000Z",
"evidenceHash": "<sha256-opcional>"
}Exemplo de consulta
{
"steamId": "76561198000000000",
"matched": true,
"reportCount": 1,
"highestConfidence": 96,
"policy": {
"category": "hack_only",
"decision": "local_server"
},
"reports": [ ... ]
}Motivos aceitos
O contrato bloqueia motivos sociais, comerciais ou subjetivos. Apenas códigos técnicos abaixo entram na rede:
aimbot | Mira automática |
|---|---|
wallhack_esp | Visão por parede / ESP |
speedhack | Velocidade impossível |
flyhack | Voo / noclip |
impossible_damage | Dano ou modificação de combate impossível |
inventory_exploit | Duplicação ou exploit de inventário |
anti_cheat_tampering | Adulteração do anti-cheat |
Cliente C#
O cliente de referência reutiliza HttpClient, calcula SHA-256/HMAC com APIs da biblioteca padrão e usa Newtonsoft.Json, normalmente disponível no runtime do servidor.
using var client = new AlsSecurityClient(
"https://seu-dominio.example",
Environment.GetEnvironmentVariable("AL_SECURITY_API_KEY"));
BanLookupResult result = await client.CheckBanAsync(steamId);
if (result.Matched)
{
// A decisão é local: alertar, expulsar ou bloquear.
ApplyLocalPolicy(player, result);
}Política local
Uma consulta retorna matched, relatórios, confiança e origem — não um comando oculto. Recomendamos começar em modo observação, revisar falsos positivos e só depois habilitar expulsão ou bloqueio automático.
- Observar: apenas log privado para os administradores.
- Alertar: avisa a equipe quando há correspondência.
- Expulsar: remove a sessão sem criar ban local.
- Bloquear: aplica ban local apenas acima do limiar escolhido.
Checklist de produção
- Sincronizar relógio do servidor por NTP.
- Usar uma chave diferente por servidor e ambiente.
- Não distribuir a chave em DLL de cliente.
- Definir timeout de 5 segundos e falhar aberto: indisponibilidade da rede não deve expulsar jogador.
- Usar idempotência e retry com backoff apenas para 429/5xx.
- Oferecer revisão e revogação administrativa.
- Salvar evidência fora da API e registrar somente URL HTTPS/hash quando necessário.
Referências oficiais
A integração de perfil segue a interface ISteamUser da Valve; chaves Steam permanecem apenas no backend conforme a orientação de autenticação Steamworks. Para HTTP/JSON em C#, consulte a documentação oficial do .NET.