The S4E platform provides a public REST API for programmatic access to scanning, asset management, reporting, and more. All public API endpoints authenticate via a Public API Token.
Base URL
| Environment | Base URL |
|---|---|
| Cloud | https://api.s4e.io |
| On-Premises | https://api.<your-domain> |
All endpoint paths below are relative to this base URL. Replace API_URL in examples with your base URL.
Authentication
Every request requires a token parameter (your Public API Token). Generate one from Settings > API Token in the platform.
Validate token
POST /auth/check
Check extension login
POST /auth/check-extension-login
Returns whether the user has used the browser extension in the last 7 days.
Assets
Add assets in bulk
POST /asset/handler/bulk-asset-add
Add multiple assets for the token owner. Performs validation and adds assets if not already owned.
| Parameter | Type | Required | Description |
|---|---|---|---|
assets |
array | Yes | List of assets to add. |
token |
string | Yes | Public API token. |
description |
string | No | Optional description (3-300 chars). |
source |
string | No | manuel, s4e_subdomain_finder, s4e_iprange_extender, digitalocean_integration, cloudflare_integration, wordpress_integration. |
Check asset ownership
POST /asset/handler/bulk-asset-ownership-check
Check if assets can be registered by the token owner.
Validate asset type
POST /asset/handler/bulk-asset-type-check
Validate type and format for multiple assets (domain, IP, CIDR).
Retrieve an asset
POST /asset/info/detail
Get detailed information for a single asset.
| Parameter | Type | Required | Description |
|---|---|---|---|
token |
string | Yes | Public API token. |
asset_id |
integer | No | Asset ID. |
asset |
string | No | Asset name. |
List all assets
POST /asset/info/list
List assets with filtering, sorting, and pagination.
| Parameter | Type | Description |
|---|---|---|
asset |
string | Filter by asset name. |
asset_ids |
array | Filter by asset IDs. |
tag_ids |
array | Filter by tag IDs. |
if_premium |
boolean | Premium filter. |
if_verified |
boolean | Verification filter. |
asset_types |
array | domain, ipv4, etc. |
search_text |
string | Search by asset and description. |
search_condition |
string | contains, equal, startswith, endswith. |
inet |
string | Network-aware IP filter (single IP, CIDR, or range). |
Update scan categories
POST /asset/settings/update-scan-categories
Enable or disable scan categories for an asset.
Category slugs: dns-controls, ssl-controls, misconfiguration, network-vulnerabilities, web-vulnerabilities, information-scans, product-based-web-vulnerabilities, product-based-network-vulnerabilities, exposed-panels.
Scans
List all scans
POST /scan/list
Retrieve available scan definitions with filtering and pagination.
| Parameter | Type | Description |
|---|---|---|
query |
string | Search text. |
asset_type |
string | domain, ipv4, url, request, email. |
scan_category_slug |
string | Filter by category. |
severity |
string | critical, high, medium, low, info. |
if_single_scan |
boolean | Single scan filter. |
if_group_scan |
boolean | Group scan filter. |
List scan categories
POST /scan/scan-categories-with-count
Get scan categories and their counts for a given asset type.
Start a single scan
POST /scan/start-single-scan
Start a scan identified by its slug against a specific asset.
| Parameter | Type | Required | Description |
|---|---|---|---|
asset |
string | Yes | Target asset name. |
slug |
string | Yes | Scan slug identifier. |
token |
string | Yes | Public API token. |
port |
integer | No | Target port (1-65535). |
Start a group scan
POST /scan/start-group-scan
Start a Full Scan, Light Scan, Crawl Only, or Fast Scan.
| Slug | Scan Type |
|---|---|
full-scan |
Full Scan |
half-scan |
Light Scan |
crawl-only |
Crawl Only |
fast-scan |
Fast Scan (use asset string instead of assets array) |
Verify an asset
POST /scan/start-verify
Trigger the verification process for an asset.
Retrieve activity logs
POST /scan/get-activity-logs
Retrieve timestamped activity logs for a group scan.
List scan history
POST /scan/history-single-scan | /scan/history-group-scan | /scan/history-crawler
Retrieve past scan executions. All three endpoints accept the same parameters.
Reports
List reports
POST /report/list
Retrieve a paginated list of scan reports.
Severity: 1 Info · 2 Low · 3 Medium · 4 High · 5 Critical
Status: 0 Open · 1 Fixed · 2 Request for Approval · 3 Accepted Risk · 4 False Positive · 5 Support Ongoing · 6 No Action Required · 7 Reopened · 8 In Progress
Source: 0 single-scan · 1 full-scan · 2 half-scan · 3 continuous-scan · 5 crawl-only · 9 fast-scan
Retrieve a single scan report
POST /report/single-scan-result
Retrieve a group scan report
POST /report/group-scan-result
Retrieve report history
POST /report/report-history
Returns past scan results for a given report.
Retrieve severity statistics
POST /report/get-severities
Retrieve status statistics
POST /report/get-statuses
Export reports
POST /report/export
Export reports based on filters and the requested format. Supports CSV, HTML, PDF, and JSON.
| Response | Description |
|---|---|
| 200 | Report exported successfully. |
| 401 | Invalid API token. |
Required JSON body fields: output_type, token.
| Field | Type | Default | Description |
|---|---|---|---|
output_type |
string | — | csv, html, pdf, json |
token |
string | — | Public API token (3–256 chars) |
template |
string | short |
full (detailed) or short (summary) |
delimiter |
string | , |
, or ; (CSV) |
scan_output_slugs |
string[] | — | Scan output slugs to export |
severity |
int[] | — | 1–5: Information … Critical |
slug |
string | — | Scan result id (pattern ^([a-zA-Z0-9-]){3,400}$) |
group_scan_slug |
string | — | Group scan result id (same pattern) |
started_at |
integer | — | Start timestamp filter |
finished_at |
integer | — | End timestamp filter |
until_date |
integer | — | Filter until this date |
order_by |
string | finished_at |
id, severity, finished_at |
order_type |
string | desc |
desc or asc |
if_custom |
boolean | — | Include custom fields |
asset_id |
int[] | — | Asset IDs |
asset |
string | — | Asset name filter |
scan_category_slug |
string[] | — | e.g. web-vulnerabilities, network-vulnerabilities, … |
report_status |
int[] | — | 0 Open through 8 In Progress |
source |
int[] | — | Scan source enum (e.g. 3 continuous-scan) |
name |
string | — | Report name (3–300) |
scan_slug |
string | — | Scan slug (3–300) |
read |
boolean | — | Read status filter |
count_total_only |
boolean | false |
Return only total count |
port |
int[] | — | Ports (max 10) |
tag |
string | — | Tag filter |
tag_ids |
int[] | — | Tag IDs |
For a longer field reference and UI mapping (template ↔ Detailed/Summary), see Exporting Data — API.
Crawler
Retrieve crawler settings
POST /crawler/get-settings
Returns include/exclude URLs, API specs, headers, and enrichment configuration.
Add included URLs
POST /crawler/add-included-urls
Add URLs to the crawling inclusion list.
Add excluded URLs
POST /crawler/add-excluded-urls
Add URLs to the crawling exclusion list.
Note
Use /crawler/remove-included-urls and /crawler/remove-excluded-urls with the same body format to remove URLs.
Add API specifications
POST /crawler/add-api-specs
Add API specification URLs (.json, .wadl, .wsdl) for crawler discovery.
Note
Use /crawler/remove-api-specs with the same body format to remove specs.
Update crawler headers
POST /crawler/update-header
Set custom HTTP headers sent during crawling.
headers_valid_for: validity in milliseconds, -1 for indefinite.
Update enrichment setting
POST /crawler/update-enrichment-setting
Enable or disable enrichment analysis for crawled data.
List all crawled URLs
POST /crawler/list-alls
Retrieve a paginated list of all discovered URLs.
| Parameter | Type | Description |
|---|---|---|
port |
array | Filter by ports. |
endpoint |
string | Filter by endpoint path. |
method |
array | GET, POST, PUT, DELETE, PATCH. |
status_code |
array | Filter by HTTP status codes. |
filter_pii_only |
boolean | Show only URLs with PII. |
Actions
Actions are prebuilt automations from the public catalog (see What Is an Action) — browse the catalog, assign one to your account, update its rules or interval, trigger it manually, read the run results and history, or remove it.
List action catalog
POST /action/info/list
Browse the public action catalog. Use assignment_filter to narrow to actions already assigned or not yet assigned. Returned action_uniq_uuid values are what assign/trigger/delete expect.
{
"value": {
"data": [
{
"action_uniq_uuid": "string",
"name": "string",
"description": "string",
"benefit": "string",
"expert_comment": "string",
"sample_output": "string",
"usage_count": 0,
"if_active": true,
"estimated_time": 90,
"suggested_custom_parameters": {},
"scan_slugs": null,
"interval": null,
"assignment_status": "available"
}
],
"count": 0
},
"code": 200
}
| Parameter | Type | Required | Description |
|---|---|---|---|
token |
string | Yes | Public API token. |
search_text |
string | No | Search text (2-300 chars). |
action_uniq_uuid |
string | No | Filter by a specific action's unique identifier. |
page |
integer | No | Page number (default 1). |
per_page |
integer | No | Results per page (default 20, max 100). |
order_type |
string | No | desc or asc (default desc). |
assignment_filter |
string | No | all, assigned, or available (default all). |
Assign an action
POST /action/handler/assign
Assign a catalog action to the token owner. A user cannot assign the same action twice. The assignment starts in a pending-approval state (status=3) — it must be approved before it can run via trigger or automatically via scan_slugs.
| Parameter | Type | Required | Description |
|---|---|---|---|
action_uniq_uuid |
string | Yes | Unique identifier of the catalog action to assign. |
token |
string | Yes | Public API token. |
custom_parameters |
object | No | Overrides the action's suggested defaults. |
interval |
integer | No | Automatic run interval, in minutes. |
scan_slugs |
array | No | Scan slugs that auto-trigger this action once approved (max 5). |
Errors: 403 action inactive or not available on-prem · 404 action not found · 409 already assigned.
Trigger an action
POST /action/handler/trigger
Manually run (test) an already-assigned, active (status=1) action. Returns immediately with a slug — poll /action/output/get for the result.
| Parameter | Type | Required | Description |
|---|---|---|---|
action_uniq_uuid |
string | Yes | Unique identifier of the assigned action to run. |
token |
string | Yes | Public API token. |
custom_parameters |
object | No | Overrides the stored parameters for this run only. |
Errors: 403 assignment pending approval or disabled · 404 assignment not found.
Update an action assignment
POST /action/handler/update
Update an existing assignment of the token owner: its custom parameters (rules), automatic run interval and/or scan slugs. Fields you omit keep their stored value, and at least one of them is required. The assignment status does not change.
| Parameter | Type | Required | Description |
|---|---|---|---|
action_uniq_uuid |
string | Yes | Unique identifier of the assigned action to update. |
token |
string | Yes | Public API token. |
custom_parameters |
object | No | New custom parameters. Replaces the stored object, so send the full object. |
interval |
integer | No | Automatic run interval in minutes (0-1000000). 2880 is 2 days. |
scan_slugs |
array | No | Scan slugs that auto-trigger this action (max 5). |
Errors: 400 none of custom_parameters, interval or scan_slugs was sent · 404 assignment not found.
Delete (unassign) an action
POST /action/handler/delete
Soft delete: the assignment is disabled (status=2) rather than removed, so its run history is preserved. A disabled assignment stops running and rejects manual triggers.
List my action assignments
POST /action/handler/list-my
List all action assignments belonging to the token owner. Supports filtering by status and free-text search, plus an optional lookup of a single assignment.
{
"value": {
"data": [
{
"action_uniq_uuid": "string",
"action_name": "string",
"action_description": "string",
"estimated_time": 90,
"scan_slugs": null,
"interval": null,
"custom_parameters": {},
"status": 1,
"activated_at": 1727000000,
"disabled_at": null,
"last_run_date": null,
"last_output_status": null
}
],
"count": 0
},
"code": 200
}
| Parameter | Type | Description |
|---|---|---|
page |
integer | Page number (default 1). |
per_page |
integer | Results per page (default 20, max 100). |
search_text |
string | Search text (1-300 chars). |
status |
array | Filter by status: 1, 2, 3 (see below). |
action_uniq_uuid |
string | Return a single assignment. |
Status: 1 Active · 2 Disabled · 3 Pending Approval
Get an action run result
POST /action/output/get
Read the result of a single run by the slug that /action/handler/trigger returned. Runs belong to the token owner; another user's slug returns 404.
| Parameter | Type | Required | Description |
|---|---|---|---|
slug |
string | Yes | Run slug returned by trigger. |
token |
string | Yes | Public API token. |
Run status: 0 Running · 1 Success · 2 Error · 3 Timeout. Poll while the status is 0.
Errors: 404 output not found.
Action run history
POST /action/output/history
List all past runs of an assigned action, newest first. count is the total number of matching runs, so filter by status to count only successful or failed runs.
| Parameter | Type | Required | Description |
|---|---|---|---|
action_uniq_uuid |
string | Yes | Unique identifier of the assigned action. |
token |
string | Yes | Public API token. |
status |
integer | No | Filter by run status: 0, 1, 2, 3. |
search_text |
string | No | Search in output content and action name (2-300 chars). |
page |
integer | No | Page number (default 1). |
per_page |
integer | No | Results per page (default 20, max 100). |
Dashboard
Retrieve terminal data
POST /dashboard/terminal/v2
Real-time scan activity data with filtering and pagination.
Retrieve group scan counts
POST /dashboard/group-scan-counts
Retrieve open ports
POST /dashboard/get-open-ports
Retrieve asset count by ports
POST /dashboard/get-asset-count-by-ports
Retrieve monthly URL statistics
POST /dashboard/get-monthly-total-url
Retrieve monthly unique requests
POST /dashboard/get-monthly-unique-request
Security Score
Retrieve security score
POST /risk/user-score
Retrieve risk score history for the token owner.
Threat Intelligence
List credentials
GET /threatintelligence/list
Retrieve threat intelligence credential data.
Integration types: brand-defense, proudsec.
User
Retrieve current user
POST /user/info
Returns profile data, privileges, and onboarding status.
Retrieve subscription info
POST /user/package-info
Check current subscription status and expiration.
HTTP Response Codes
| Code | Description |
|---|---|
200 |
Success. |
400 |
Validation error, asset not found, or ownership conflict. |
401 |
Invalid API token. |
404 |
Resource not found. |
500 |
Internal server error. |