Documentação API API REST

API REST

Autenticação, endpoints, objetos e erros. Com exemplos que rodam copiados e colados.

A API do HAS dá ao seu time acesso programático às vulnerabilidades, aos pentests e ao painel da sua empresa. Use para levar achados ao seu SIEM, abrir tickets no seu backlog ou fechar o ciclo de correção pelo seu próprio fluxo.

https://api.hackersec.com/v1
A especificação OpenAPI 3.2 está em api.hackersec.com/v1/openapi.json. Importe no Postman ou no Insomnia para ter os endpoints prontos, ou use para gerar um cliente na sua linguagem.

Autenticação

Toda requisição leva sua chave secreta no header Authorization:

curl https://api.hackersec.com/v1/dashboard \
  -H "Authorization: Bearer hackersec_has_sk_..."

Criando a chave

Escopos

EscopoPode
readConsultar vulnerabilidades, pentests e o painel.
read_writeTudo do read, mais mudar status, pedir reteste e disparar integrações.

O escopo é escolhido na criação e vale por toda a vida da chave. Para integração que só consulta, como dashboard, SIEM ou relatório, use read.

Trate a chave como senha. Guarde no cofre de segredos do time, use apenas em código que roda no servidor, e rotacione periodicamente criando a nova antes de revogar a antiga.

Convenções

Listas e paginação

Toda listagem devolve o mesmo envelope, do mais recente para o mais antigo:

{
  "object": "list",
  "data": [ ... ],
  "has_more": true,
  "next_cursor": "5214"
}

Use limit (padrão 100, máximo 200) e passe o next_cursor em starting_after para a página seguinte. Enquanto has_more for true, ainda há resultado.

Endpoints

MétodoCaminhoO que faz
GET/v1/dashboardContagem por severidade e por status, e resumo dos pentests
GET/v1/vulnerabilitiesLista, com filtros
GET/v1/vulnerabilities/{id}Uma vulnerabilidade, com evidências e comentários
GET/v1/testsLista de pentests
GET/v1/tests/{id}Um pentest, com escopo
POST/v1/vulnerabilities/{id}/statusMuda o status
POST/v1/vulnerabilities/{id}/retestPede reteste
POST/v1/vulnerabilities/{id}/exportEnvia para a integração configurada

Listar vulnerabilidades

Filtros: severity, status, test, limit, starting_after. Os valores de severity e status são os mesmos que a resposta devolve.

curl "https://api.hackersec.com/v1/vulnerabilities?severity=critical&status=reported" \
  -H "Authorization: Bearer $HACKERSEC_KEY"

Mudar o status

Valores aceitos: reported, in_correction, ignored, mitigated, retest.

curl -X POST https://api.hackersec.com/v1/vulnerabilities/16590818124833/status \
  -H "Authorization: Bearer $HACKERSEC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"in_correction"}'

ignored e mitigated exigem justification, de 50 a 2800 caracteres. São declarações suas: uma aceita o risco como está, a outra afirma que existe controle compensatório. O texto sai no relatório em PDF ao lado da vulnerabilidade, então escreva a decisão real.

curl -X POST https://api.hackersec.com/v1/vulnerabilities/16590818124833/status \
  -H "Authorization: Bearer $HACKERSEC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"ignored","justification":"Endpoint acessível apenas pela VPN corporativa, com MFA obrigatório. Risco aceito pelo comitê de segurança em 12/08."}'

Pedir reteste

curl -X POST https://api.hackersec.com/v1/vulnerabilities/16590818124833/retest \
  -H "Authorization: Bearer $HACKERSEC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"context":"Parâmetro passou a usar consulta parametrizada. Deploy em produção hoje."}'

O context é opcional e ajuda: ele diz a quem vai retestar o que mudou. Com um reteste já pendente para aquela vulnerabilidade, a chamada devolve 409, sinalizando que o pedido anterior segue em andamento.

Enviar para a integração

curl -X POST https://api.hackersec.com/v1/vulnerabilities/16590818124833/export \
  -H "Authorization: Bearer $HACKERSEC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"integration":"jira"}'

Omita integration ou use "all" para disparar todas as integrações ativas. Exige integração configurada na empresa e chave de um master.

O objeto Vulnerability

CampoDescrição
idO mesmo identificador que aparece na plataforma
nameTipo técnico e impacto curto
targetAtivo exato onde a falha foi confirmada
severityinfo, low, medium, high, critical
statusreported, in_correction, fixed, ignored, retest, not_fixed, mitigated
cvss_score, cvss_vectorCVSS 4.0
financial_impactEstimativa de impacto financeiro
testid do pentest em que foi encontrada
reported_at, fixed_atDatas

Buscando uma vulnerabilidade específica, vêm também description, remediation, references, evidence (as provas de conceito) e comments.

O objeto Test

CampoDescrição
id, nameIdentificador e nome do pentest
levelai_native ou ai_first
statusrequested, in_progress, paused, retest, completed
assetsAtivos do escopo
vulnerabilitiesContagem por severidade
created_at, started_at, ended_atDatas

Erros

{
  "error": {
    "type": "invalid_request_error",
    "code": "justification_required",
    "message": "A justification of at least 50 characters is required...",
    "param": "justification"
  },
  "request_id": "req_28d675e64f3fe329"
}
HTTPQuando
400JSON inválido, campo desconhecido ou valor fora da faixa. O campo param diz qual.
401Chave ausente, inválida ou revogada.
403Chave read em uma operação de escrita, ou contrato vencido.
404O recurso está fora do alcance desta chave.
409A operação conflita com o estado atual. Exemplo: reteste já pendente.