API reference / Scan schedules
Create a scan schedule
POSThttps://api.fortwatch.ai/app/scan-schedules
Daily, weekly, monthly or every N days, at a time of day in UTC, optionally only within a window of hours and weekdays. Daily and custom schedules depend on the plan; an asset has at most 5 schedules (1 on Essential).
Request body
JSON, required.
| Field | Type | Description |
|---|---|---|
assetId | integer | Required. The asset to scan. |
frequency | string | Required.One of: daily, weekly, monthly, interval |
dayOfWeek | integer | Weekly: 0 = Sunday … 6 = Saturday. |
dayOfMonth | integer | Monthly: the day of the month. |
time | string | Required. The time of day, UTC (HH:MM). |
intervalDays | integer | null | |
windowStartHour | integer | null | |
windowEndHour | integer | null | |
windowDays | integer[] |
Example request
curl -X POST "https://api.fortwatch.ai/app/scan-schedules" \
-H "Authorization: Bearer $FORTWATCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"assetId": 42,
"frequency": "daily",
"dayOfWeek": 1,
"dayOfMonth": 1,
"time": "03:30",
"intervalDays": 1,
"windowStartHour": 1,
"windowEndHour": 1,
"windowDays": [
1
]
}'Response 201
Created.
| Field | Type | Description |
|---|---|---|
idrequired | number | |
assetIdrequired | number | |
namerequired | string | |
frequencyrequired | string | |
dayOfWeekrequired | number | null | |
dayOfMonthrequired | number | null | |
timerequired | string | |
intervalDaysrequired | number | null | |
windowStartHourrequired | number | null | |
windowEndHourrequired | number | null | |
windowDaysrequired | number[] | |
enabledrequired | boolean | |
lastRunAtrequired | string (date-time) | null | |
nextRunAtrequired | string (date-time) | null | |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
assetrequired | object | |
idrequired | number | |
projectIdrequired | number | |
namerequired | string | null | |
typerequired | string | |
valuerequired | string | |
statusrequired | string | |
canonicalUrlrequired | string | null | |
resolvedIprequired | string | null | |
cdnProviderrequired | string | null | |
bucketProviderrequired | string | null | |
lastCheckedAtrequired | string (date-time) | null | |
failReasonrequired | string | null | |
skippedRedirectHostrequired | string | null | |
disabledScannerTypesrequired | string[] | |
portScanModerequired | string | |
nucleiMinSeverityrequired | string | |
ownershipVerifiedAtrequired | string (date-time) | null | |
ownershipTokenrequired | string | |
ownershipMethodrequired | string | null | |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
projectrequired | object | |
idrequired | number | |
namerequired | string |
{
"id": 42,
"assetId": 42,
"name": "Production",
"frequency": "string",
"dayOfWeek": 1,
"dayOfMonth": 1,
"time": "string",
"intervalDays": 1,
"windowStartHour": 1,
"windowEndHour": 1,
"windowDays": [
1
],
"enabled": true,
"lastRunAt": "2026-10-16T12:00:00.000Z",
"nextRunAt": "2026-10-16T12:00:00.000Z",
"createdAt": "2026-10-16T12:00:00.000Z",
"updatedAt": "2026-10-16T12:00:00.000Z",
"asset": {
"id": 42,
"projectId": 42,
"name": "Production",
"type": "string",
"value": "app.example.com",
"status": "string",
"canonicalUrl": "string",
"resolvedIp": "string",
"cdnProvider": "string",
"bucketProvider": "string",
"lastCheckedAt": "2026-10-16T12:00:00.000Z",
"failReason": "string",
"skippedRedirectHost": "string",
"disabledScannerTypes": [
"string"
],
"portScanMode": "string",
"nucleiMinSeverity": "string",
"ownershipVerifiedAt": "2026-10-16T12:00:00.000Z",
"ownershipToken": "string",
"ownershipMethod": "string",
"createdAt": "2026-10-16T12:00:00.000Z",
"updatedAt": "2026-10-16T12:00:00.000Z",
"project": {
"id": 42,
"name": "Production"
}
}
}Errors
400 | The request is not valid: a field is missing or has the wrong shape (the message names it). |
401 | No valid credentials: the API key or access token is missing, revoked or expired (INVALID_API_KEY, INVALID_TOKEN). |
403 | Not allowed: the key or token lacks this scope (SCOPE_REQUIRED), the route is dashboard-only (SESSION_REQUIRED), or a plan limit applies. |
429 | Too many requests (RATE_LIMITED): wait the seconds Retry-After gives. |
Every code is explained in Errors.