DAST
POST /api/fetchAllDastScans
Retrieve all DAST scan/crawl runs in active or completed states (RUNNING, COMPLETED, STOP_REQUESTED, STOPPED).
POST /api/fetchDastScan
Retrieve all URLs discovered by the crawler for a specific DAST crawl run.
POST /api/fetchAvailableDastModules
Retrieve available external DAST modules that have sent a heartbeat within the last 5 minutes.
POST /api/initiateCrawler
Start a DAST crawler targeting the specified host with configured authentication, URL patterns, and crawl options.
POST /api/uploadCrawlerData
Push raw crawler traffic data for a collection to the ingestion pipeline (Kafka) for async processing.
POST /api/updateCrawlerStatus
Update the status of an existing crawl run (RUNNING, COMPLETED, FAILED, or STOPPED).
POST /api/stopCrawler
Send a stop request to the internal DAST crawler service and mark the crawl run as STOP_REQUESTED.
POST /api/saveCrawlerUrl
Record a URL discovered during a crawl, along with provenance information and whether it was within scope.
Returns all CrawlerRun documents that are in RUNNING, COMPLETED, STOP_REQUESTED, or STOPPED state, plus legacy records that have no status field. PENDING and FAILED runs are excluded.
Source: DastAction.fetchAllDastScans()
List of crawler run documents.
All matching CrawlerRun documents.
[{"crawlId":"550e8400-e29b-41d4-a716-446655440000","hostname":"https://app.example.com","startedBy":"admin@example.com","startTimestamp":1745280000,"endTimestamp":1745283600,"status":"COMPLETED","moduleName":"Internal DAST (Akto)","collectionId":1234567890,"crawlingTime":3600,"runTestAfterCrawling":true}]POST /api/fetchAllDastScans HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 2
{}List of crawler run documents.
{
"crawlerRuns": [
{
"crawlId": "550e8400-e29b-41d4-a716-446655440000",
"hostname": "https://app.example.com",
"startedBy": "admin@example.com",
"startTimestamp": 1745280000,
"endTimestamp": 1745283600,
"status": "COMPLETED",
"moduleName": "Internal DAST (Akto)",
"collectionId": 1234567890,
"crawlingTime": 3600,
"runTestAfterCrawling": true
}
],
"actionErrors": [
"text"
]
}Returns all CrawlerUrl documents recorded by the crawler for the specified crawlId, representing every URL that was discovered (both in-scope and out-of-scope).
Source: DastAction.fetchDastScan()
UUID of the crawl run whose discovered URLs to retrieve.
550e8400-e29b-41d4-a716-446655440000List of discovered crawler URL documents.
All CrawlerUrl documents for the given crawl.
[{"url":"https://app.example.com/api/products","crawlId":"550e8400-e29b-41d4-a716-446655440000","accepted":true,"timestamp":1745280120,"sourceUrl":"https://app.example.com/shop","sourceXpath":"//a[@id='products-link']","buttonText":"View Products"}]crawlId is null or empty.
POST /api/fetchDastScan HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 50
{
"crawlId": "550e8400-e29b-41d4-a716-446655440000"
}{
"crawlerUrls": [
{
"url": "https://app.example.com/api/products",
"crawlId": "550e8400-e29b-41d4-a716-446655440000",
"accepted": true,
"timestamp": 1745280120,
"sourceUrl": "https://app.example.com/shop",
"sourceXpath": "//a[@id='products-link']",
"buttonText": "View Products"
}
],
"actionErrors": [
"text"
]
}Returns all external DAST modules that have sent a heartbeat within the last 5 minutes. An empty availableModules list means only the built-in internal Akto DAST crawler is available and selectedModuleName should be left null when calling initiateCrawler.
Source: AktoJaxAction.fetchAvailableDastModules()
Available DAST modules returned.
POST /api/fetchAvailableDastModules HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 2
{}Available DAST modules returned.
{
"availableModules": [
{
"name": "dast-module-prod-1",
"displayName": "dast-module-prod-1",
"lastHeartbeat": 1745283500,
"isDefault": false
}
],
"actionErrors": [
"text"
]
}Creates or reuses an API collection named after the target hostname (tagging it DAST), then starts a crawl run. Supports multiple authentication strategies: username/password form auth, API key, and test role-based token extraction (via recorded login flow or login step builder). Custom HTTP headers, URL template patterns for path normalisation, and seed application pages are all supported.
If selectedModuleName is set, the named DAST module must have sent a heartbeat within the last 5 minutes; otherwise the request returns an error. If null, falls back to the internal Akto DAST crawler service.
crawlingTime must be between 600 (10 minutes) and 345600 (4 days) seconds.
Source: AktoJaxAction.initiateCrawler()
Full URL of the target application (e.g. https://app.example.com). The hostname is used as the collection name unless collectionName is provided.
https://app.example.comMaximum crawl duration in seconds. Must be between 600 (10 min) and 345600 (4 days).
3600Comma-separated URL paths to exclude from the crawl.
/logout,/staticOptional ObjectId hex of the test role to use for cookie/token extraction. Used when neither username/password nor API key is provided.
60a7b2c3d4e5f6a7b8c9d0e1Optional username for basic/form authentication.
crawl_userOptional password for basic/form authentication.
[REDACTED_PASSWORD]Optional API key to pass to the crawler service.
[REDACTED_API_KEY]Optional Akto dashboard URL to pass to the internal crawler service.
https://app.akto.ioIf true, automatically triggers security tests on all discovered endpoints after the crawl completes.
falseExample: trueName of the mini testing service to use for post-crawl tests. Only relevant when runTestAfterCrawling is true.
Name of the external DAST module to use. The module must have sent a heartbeat within the last 5 minutes. Falls back to the internal Akto DAST service when null.
Custom collection name. Defaults to the extracted hostname when not provided.
My App DASTComma-separated URL template patterns used to normalise path parameters (e.g. /users/{id},/orders/{orderId}).
/users/{id},/orders/{orderId}Comma-separated seed pages from which the crawl starts.
/dashboard,/profile,/checkoutCrawler initiated. A CrawlerRun document is created in MongoDB.
No content
crawlingTime is outside the 600–345600 range, the selected DAST module is not available, or authentication token extraction via the test role failed.
POST /api/initiateCrawler HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 58
{
"hostname": "https://app.example.com",
"crawlingTime": 3600
}No content
Pushes raw crawler traffic data (in Akto HTTP sample format) for the given collection to Kafka (topic akto.api.logs) for async ingestion.
Source: AktoJaxAction.uploadCrawlerData()
Numeric ID of the target API collection, passed as a string.
1234567890Akto HTTP sample message JSON captured by the crawler.
{"method":"GET","path":"/api/users","requestHeaders":{"Host":"api.example.com"},"responseCode":200,"responseBody":"{\"users\":[]}"}Data queued for ingestion.
No content
apiCollectionId does not match any known collection.
POST /api/uploadCrawlerData HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 204
{
"apiCollectionId": "1234567890",
"crawlerData": "{\"method\":\"GET\",\"path\":\"/api/users\",\"requestHeaders\":{\"Host\":\"api.example.com\"},\"responseCode\":200,\"responseBody\":\"{\\\"users\\\":[]}\"}"
}No content
Updates the status of an existing crawl run identified by crawlId. Depending on the new status:
RUNNING— setsstartTimestampto nowCOMPLETED— setsendTimestampto now and optionally triggers post-crawl security tests ifrunTestAfterCrawlingwas set when the crawl was initiatedFAILED— setsendTimestampto now and stores theerrorMessageSTOPPED— setsendTimestampto now
Source: AktoJaxAction.updateCrawlerStatus()
UUID of the crawl run to update.
550e8400-e29b-41d4-a716-446655440000New status to set on the crawl run.
COMPLETEDPossible values: Error details. Only stored when status is FAILED.
Status updated successfully.
No content
POST /api/updateCrawlerStatus HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 69
{
"crawlId": "550e8400-e29b-41d4-a716-446655440000",
"status": "RUNNING"
}Status updated successfully.
No content
Sends a stop request to the internal AKTOJAX crawler service and sets the crawl run's status to STOP_REQUESTED. The crawler service acknowledges the stop and will complete its current work before shutting down.
Source: AktoJaxAction.stopCrawler()
UUID of the crawl run to stop.
550e8400-e29b-41d4-a716-446655440000Stop request sent and crawl status set to STOP_REQUESTED.
No content
crawlId is null/empty or the crawler service returned a non-success status.
POST /api/stopCrawler HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 50
{
"crawlId": "550e8400-e29b-41d4-a716-446655440000"
}No content
Stores a single URL that was discovered during a crawl, along with provenance information (the source page, the XPath of the triggering element, and the button text) and whether it was accepted (within the crawl scope).
Source: AktoJaxAction.saveCrawlerUrl()
The discovered URL.
https://app.example.com/api/productsUUID of the crawl run that discovered this URL.
550e8400-e29b-41d4-a716-446655440000Whether this URL was within the crawl scope.
trueUnix epoch when the URL was discovered.
1745280000Page URL on which the link to this URL was found.
https://app.example.com/shopXPath of the element that triggered navigation to this URL.
//a[@id='products-link']Text content of the element that linked to this URL.
View ProductsURL saved successfully.
No content
url or crawlId is null/empty.
POST /api/saveCrawlerUrl HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 247
{
"url": "https://app.example.com/api/products",
"crawlId": "550e8400-e29b-41d4-a716-446655440000",
"accepted": true,
"timestamp": 1745280000,
"sourceUrl": "https://app.example.com/shop",
"sourceXpath": "//a[@id='products-link']",
"buttonText": "View Products"
}No content
Last updated