Scans
API endpoints for triggering, managing, and monitoring scans.
Trigger Scan
Starts a scan for a verified domain. The scan is queued and processed asynchronously.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
domain_id | string | Yes | UUID of the domain to scan |
type | string | No | discovery (default) or full |
profile | string | No | passive, standard (default), or deep |
Response (202):
Scan limits by plan:
| Plan | Concurrent Scans | Daily Scans |
|---|---|---|
| Free | 1 | 2 |
| Hunter | 3 | 10 |
| Pro | 10 | 50 |
| Team | 25 | Unlimited |
| Enterprise | 50 | Unlimited |
When a limit is reached:
List Scans
Returns scans for your organization, optionally filtered by domain.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
domain_id | string | Filter scans by domain UUID |
limit | integer | Max results (default: 100, max: 1000) |
Response (200):
Get Scan Detail
Returns detailed status for a specific scan, including phase, progress, and stats.
Response (200):
Scan phases: discovering, resolving, scanning_ports, probing_http, done
Scan statuses: queued, running, completed, failed, cancelling, cancelled
Cancel Scan
Cancels a running or queued scan.
Response (200):
Only scans with status queued or running can be cancelled. Attempting to cancel a completed scan returns 400.
Tool Runs
Each scan executes multiple tools. You can inspect individual tool executions.
List Tool Runs for a Scan
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
tool_name | string | Filter by tool name (comma-separated) |
phase | string | Filter by phase (comma-separated) |
status | string | Filter by status (comma-separated) |
Response (200):
Get Tool Run
Changes
Surfbot tracks what changed between scans. Changes are available at org, domain, and asset level.
Organization Changes
Both endpoints return the same data — asset changes across all domains in your organization.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
change_type | string | appeared, disappeared, or modified |
significance | string | critical, high, medium, low, or info |
asset_type | string | Filter by asset type (e.g. subdomain, ip) |
since | string | ISO 8601 datetime — only changes after this time |
domain_id | string | Filter by domain UUID |
cursor | string | Cursor for pagination |
limit | integer | Max results (default: 100, max: 1000) |
Response (200):
Organization Change Summary
Returns aggregated change counts for your organization.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
since | string | ISO 8601 datetime — only count changes after this time |
Response (200):
Domain Changes
Same query parameters and response format as organization changes, scoped to a single domain.
Domain Change Summary
Same response format as organization change summary, scoped to a single domain.
Asset Change History
Returns change history for a specific asset.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
cursor | string | Cursor for pagination |
limit | integer | Max results (default: 100, max: 1000) |
Asset History
Returns the asset with its metadata history.
Response (200):