Referência da API REST

Todos os endpoints exigem o header X-API-Key. A engine roda no servidor da Klarim — o cliente só envia a URL a escanear.

POST /gate/scan

Roda o scan de segurança contra a URL informada (síncrono, tipicamente < 60s).

Request:

{
    "url": "https://meusite.com.br",
    "fail_on": "critical",
    "timeout": 60,
    "metadata": {"commit": "abc123", "ci": "github-actions"}
}

Response (200):

{
    "run_id": 42,
    "url": "https://meusite.com.br",
    "score": 90,
    "passed": true,
    "duration_ms": 14500,
    "critical": 0,
    "high": 1,
    "medium": 0,
    "results": [
        {"check": "headers", "status": "pass", "severity": "medium", "detail": "..."}
    ],
    "checks_run": ["headers", "ssl", "exposure", "credentials"],
    "checks_blocked": ["jwt", "tls_ciphers"],
    "plan": "Pro",
    "dashboard_url": "https://klarim.net/dashboard/gate/runs/42"
}

GET /gate/projects

Lista os projetos da conta (com o plano efetivo e os checks incluídos).

POST /gate/projects

Cria um projeto. Nasce não verificado.

{"name": "Meu App", "url": "https://meuapp.com.br"}

GET /gate/runs

Lista os runs (sumário, sem results). Query: ?project_id=1&limit=20.

GET /gate/runs/{id}

Detalhe de um run (inclui results). 404 se o run não é da conta.

POST /gate/projects/{id}/verify/start

Inicia a verificação de domínio. Body: {"method": "dns_txt"} (ou meta_tag | html_file). Retorna o desafio + as instruções.

POST /gate/projects/{id}/verify/check

Confere o desafio no site. Se comprovado, o projeto fica verified e pode ser escaneado.

Códigos de erro

Código Significado
401 API key inválida, ausente ou revogada
403 Domínio não verificado, ou limite de domínios do plano atingido
429 Limite de scans/dia OU de requisições/minuto excedido
422 Parâmetro inválido (ex.: URL malformada)

Limites por plano

Scans/dia, domínios, requisições/minuto e quais checks rodam variam por plano (Free / Pro / Team / Enterprise). Veja a tabela em klarim.net/security-gate.