Cloud API Reference

The HAVOC Cloud REST API allows you to programmatically manage scans, findings, and repositories. API access requires a Team, Business, or Enterprise plan.

Base URL: https://api.havoc.cloud/v1
All requests must use HTTPS. The API returns JSON.

Authentication

All API requests require a Bearer token in the Authorization header:

Authorization: Bearer hvk_your_api_key_here

Generate API keys in your HAVOC Cloud dashboard under Settings → API Keys. Keys are scoped to a team and inherit team permissions.

Token scopes

ScopeDescription
read:scansList and view scan results
write:scansTrigger new scans
read:findingsList and view findings
write:findingsUpdate finding status (dismiss, accept)
read:reposList connected repositories
adminFull access including team management

Scans

List scans

GET/scans

Returns a paginated list of scans for the authenticated team.

Query parameters

ParameterTypeDescription
repository_idstringFilter by repository
branchstringFilter by branch name
statusstringFilter by status: pending, running, complete, failed
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 25, max: 100)
curl -H "Authorization: Bearer hvk_..." \
  "https://api.havoc.cloud/v1/scans?repository_id=repo_abc123&per_page=10"

Get scan

GET/scans/{scan_id}

Returns a single scan with full results.

{
  "id": "scan_01J9X4KMPQ3T5N8ZR7Y2CWBD6F",
  "repository_id": "repo_abc123",
  "branch": "feature/bulk-transactions",
  "commit": "a3f8b2c",
  "status": "complete",
  "started_at": "2026-03-05T04:12:33Z",
  "completed_at": "2026-03-05T04:12:51Z",
  "scan_type": "diff",
  "coverage": {
    "percentage": 89.8,
    "covered": 132,
    "total": 147,
    "delta": -2.4
  },
  "finding_counts": {
    "critical": 0,
    "high": 1,
    "medium": 1,
    "low": 1,
    "info": 0,
    "total": 3
  }
}

Trigger scan

POST/scans

Triggers a new cloud scan on a connected repository.

The scan_type field accepts "full" or "diff".

# Request body (JSON)
{
  "repository_id": "repo_abc123",
  "branch": "main",
  "scan_type": "full"
}

Findings

List findings

GET/findings
ParameterTypeDescription
scan_idstringFilter by scan
severitystringFilter by severity
statusstringopen, dismissed, fixed
rulestringFilter by analyzer rule ID

Update finding status

PUT/findings/{finding_id}
# Request
{
  "status": "dismissed",
  "reason": "False positive — this endpoint is protected by middleware"
}

Repositories

List repositories

GET/repositories

Returns all repositories connected to the authenticated team.

Get repository stats

GET/repositories/{repo_id}/stats

Returns coverage trend, finding history, and grade history for a repository.

Error Codes

StatusCodeDescription
401unauthorizedMissing or invalid API token
403forbiddenToken lacks required scope
404not_foundResource not found or not accessible
422validation_errorInvalid request body (details in errors field)
429rate_limitedToo many requests. Retry-After header included.
500server_errorInternal error. Contact support.

Rate limits

PlanRequests/minuteScans/day
Team60100
Business300unlimited
Enterprisecustomunlimited