Skip to main content

Scanning API

Everything in this section can be driven over the REST API. This page maps each workflow to its endpoints; API Reference covers authentication and conventions, CLI & CI/CD covers the pipeline contract in depth, and Swagger at https://<your-host>/api/docs is exhaustive.

export OFFLOAD_HOST="https://your-instance.example.com"
export OFFLOAD_API_KEY="osk_xxxxxxxxxxxxxxxxxxxx"

Send the key as X-API-Key; calls are scoped to the key's team.

Web, API & host scans

TaskEndpointNotes
Start a scanPOST /api/native-scans/web-vulnerability · /network-discovery · /ssl-security · /security-headers · /api-security-testing · /nuclei/url-scan (/nuclei/bulk-scan for many URLs)Body per tool: target_url or target, scan_type (quick / standard / comprehensive; network: ping_sweep / port_scan / service_detection / comprehensive / vulnerability_scan), optional auth and rate_limit_profile. Returns scan_id and status. Headers scan completes inline.
Poll / readGET /api/native-scans/results/{scan_id}status (runningcompleted / failed / partial), findings[], findings_count, raw_output.
ListGET /api/native-scans/results?tool_type=&status=&limit=&skip=count is the page size.
Download reportGET /api/native-scans/results/{scan_id}/download?format=html|pdf|docxFile stream.
Re-scan / deletePOST /api/native-scans/results/{scan_id}/rescan · DELETE /api/native-scans/results/{scan_id}
StatisticsGET /api/native-scans/statisticsTotals by tool and status.
Reconnaissance & lightweightPOST /api/domain-recon · POST /api/lightweight-scans/technologies · /waf · /subdomains · /comprehensiveDomain OSINT, fingerprint, WAF detection, subdomains.
API discovery / deep scanPOST /api/api-scan/discover · POST /api/api-scan/deep-scanEndpoint discovery, then OWASP API Top 10 testing with optional spec upload.
App Scan (all tools)POST /api/app-scanOne run, standards mapping, consolidated report.
Consolidated reportPOST /api/reports/consolidatedMerge selected scans into one HTML/PDF/Word report.
CI trigger / poll / gatePOST /api/cicd/scans/trigger · GET /api/cicd/scans/{scan_id}/status · GET /api/cicd/scans/{scan_id}/resultsscan_type, target, scan_profile, fail_on_severitygate_passed. Release-gate policy: GET /api/ci/gate/policy, history GET /api/ci/gate/history; SARIF GET /api/ci/scan/{scan_id}/sarif; badges GET /api/ci/badge/{type}.svg.

Code

TaskEndpointNotes
Git connectionsGET /api/code/connections · POST /api/code/connections/{provider} · DELETE …/{provider}provider = github | gitlab | bitbucket; body { "token", "username" }. Token is validated against the provider.
Repositories & branchesGET /api/code/repos?provider= · GET /api/code/repos/{repo}/branchesLive from the provider.
Start a scanPOST /api/code/scan{ "provider", "repo", "branch", "scan_type" }code_security | sast | dependency_scan | secret_scan | iac_scan | sbom | compiled_image; optional policy_pack. Returns scan_id.
Upload a ZIP / artifact / imagePOST /api/code/upload-scan (multipart file) · POST /api/code-scan/artifact · POST /api/code-scan/imageZIP up to 500 MB; artifacts .jar .war .ear .whl .egg .tgz .gem .nupkg.
PollGET /api/code/scan-status/{scan_id}status, progress, phase.
ReportsGET /api/code/reports?limit=&offset=&application=&owner= · GET /api/code/reports/{scan_id} · GET …/export · GET …/artifact/{kind} · DELETE … · POST /api/code/reports/bulk-delete
Findings lifecycleGET /api/code/findings/lifecycle · POST /api/code/findings/{fingerprint}/lifecycle · POST /api/code/findings/bulk-lifecycleBody { "state": "triaged" | "resolved" | "risk_accepted" | "false_positive" | "reopened", "justification", "owner", "expires_at", "evidence" } — required fields depend on the state and the policy pack.
Comments & activityPOST /api/code/findings/{fingerprint}/comment · GET …/activity
AI analysis / fixPOST /api/code/scan/{scan_id}/ai-analyze · POST /api/code/scan/{scan_id}/ai-fix
Fix pull requestPOST /api/code/findings/fix-pr{ repo, branch?, provider?, patch?, finding{…} }writes to your Git host; needs Execute Remediations.
SBOM & licencesPOST /api/code/sbom · POST /api/code/sbom/upload · GET /api/code/sbom · GET /api/code/sbom/{scan_id} · …/download · …/export?format=csv|csv-vulns|json · …/notices · …/fix-plan · …/report · DELETE …Upload accepts CycloneDX (JSON/XML) or SPDX (JSON).
Licence enrichmentGET · PUT /api/code/settings/license-enrichment{ "enabled": true } opts in to deps.dev lookups.
SCA policyGET /api/code/sca/policy · GET /api/code/sca/policy-packsActive rules and the versioned packs.
Repository ownershipGET · PUT /api/code/repo-ownership{ "repo", "application", "owner", "environment", "criticality" }.
Pipeline generationGET /api/ci/pipeline/{provider} · POST /api/cicd/pipeline/comprehensiveprovider = github_actions | gitlab_ci | bitbucket | azure_devops | jenkins.
WAF test / load testPOST /api/code/waf-scan · GET /api/code/waf-scans · POST /api/code/load-test · GET /api/code/load-testsLoad test: { "target_url", "method", "rate" (≤500), "duration": "10s" }.

Containers

TaskEndpointNotes
Providers & registriesGET /api/container-registries/providers · POST /api/container-registries/saved · GET /api/container-registries/saved · GET · DELETE …/saved/{registry_id} · POST …/test-connectionProviders aws_ecr | gcp_artifact_registry | azure_container_registry | docker_hub.
Sync, browse, driftPOST …/saved/{id}/sync · GET …/sync-status · GET …/repositories · GET …/images · GET …/vulnerability-summary · GET …/drift
Scan existing imagesPOST …/saved/{id}/scan-existing ({ "repository"?, "max_images": 50 }) · GET …/scan-estimate · scan jobs: GET/POST …/scan-jobs, …/{job_id}/pause · /resume · /cancel
PollingPOST …/saved/{id}/poll · GET …/polling-status · PUT …/polling-config (polling_interval_seconds 300–86400)
Quick scanPOST /api/container/full-analysis · POST /api/container/scan-vulnerabilities ({ "image_name", "save_to_db": true })Background; poll the list.
ResultsGET /api/container/scans · GET /api/container/scans/{scan_id} · GET …/export · GET /api/container-security/scans/{scan_id}/incremental-diff · GET /api/container-security/scan-history · GET /api/container-security/posture-trend
Dockerfile / secrets / signaturePOST /api/container-security/dockerfile/scan · GET …/dockerfile/rules · POST …/image/secrets · POST …/image/verify-signature
PoliciesGET · POST /api/container-security/policies · GET …/policies/templates · POST …/policies/validate-image
CI gatePOST /api/container-security/cicd/scan-and-validate{ image_name, build_id, git_commit, fail_on_policy_violation }allowed, exit_code.
WebhooksPOST /api/container-security/webhooks/configure · GET …/webhooks · PUT …/webhooks/{id}/toggle · DELETE …/webhooks/{id} · GET …/webhooks/eventsRegistry calls back …/webhooks/registry-event/{webhook_id}.
SBOMPOST /api/container-security/sbom/generate ({ image_name, format: syft-json | cyclonedx-json | spdx-json }) · GET …/sbom/list · GET …/sbom/{sbom_id}
CompliancePOST /api/container-security/compliance-report ({ target_id, target_type: image | registry | account, framework: cis-docker | nist | pci-dss | soc2 }) · GET …/compliance-report/latest · GET …/compliance-report/frameworks
CoverageGET /api/container/coverage-summary

Kubernetes

TaskEndpointNotes
ClustersPOST /api/k8s/clusters · GET /api/k8s/clusters · GET · PUT · DELETE …/{cluster_id} · POST …/bulk-import · POST …/bulk-delete · POST …/{cluster_id}/testOnboard with a base64 kubeconfig (safety-validated) or api_server + service-account token, rbac_mode minimal | extended. See Kubernetes API.
Discovered clustersGET /api/k8s/clusters/auto-discovered · POST /api/k8s/clusters/import-from-cloudFrom connected cloud accounts.
RBAC profilesGET /api/k8s/rbac-profiles · GET …/{profile} · POST /api/k8s/rbac/generate-script ({ profile, namespace, service_account_name }) · GET /api/k8s/pre-scan-scriptManifest and deployment script.
ScansPOST /api/k8s/scan ({ cluster_id, scanners?, namespaces?, severity_filter? }) · POST /api/k8s/scan/bulk · GET /api/k8s/scan/{scan_id} · GET /api/k8s/active-scans
FindingsGET /api/k8s/findings?cluster_id=&severity=&status=&scanner= · GET …/grouped · GET …/{finding_id} · PUT …/{finding_id}/status (open | resolved | suppressed | false_positive, with reason)
Dashboard & metricsGET /api/k8s/dashboard/{cluster_id} · GET /api/k8s/metrics/{cluster_id}Score, findings by category and scanner.
CompliancePOST /api/k8s/compliance/report ({ cluster_id, framework: cis | nist | pci-dss | soc2 | hipaa }) · GET /api/k8s/compliance/{cluster_id} · GET /api/k8s/compliance/posture · GET /api/k8s/mitre-tacticsReport export formats: json, html, pdf.
CoverageGET /api/kubernetes/coverage-summary

Permissions

ActionPermission
Start scans of any typeRun Scans
Read results, findings, reportsView Scans
Registries, policies, webhooks, clustersManage Container Security
Change finding lifecycleAny authenticated team member for code findings; Manage Risks for cloud findings
Open fix pull requestsExecute Remediations