Continuous Monitoring
Scheduled scans use cron expressions to automatically run scans at regular intervals. Configure a schedule once and XnoleX will scan your target on the defined frequency.
Cron Expressions
Schedules use standard 5-field cron expressions:
Cron format
minute hour day month weekday
Examples:
0 * * * * Every hour (at minute 0)
0 0 * * * Every day at midnight
0 0 * * 1 Every Monday at midnight
0 0 1 * * First day of every monthSupported syntax in each field:
Specific values: 0, 15, 30, etc. Must be within valid range for the field.
Wildcards: * matches any value.
Steps: */N steps by N. E.g., */15 for every 15 minutes.
Field Ranges
Field
Range
minute
0 - 59
hour
0 - 23
day
1 - 31
month
1 - 12
weekday
0 - 7
Creating a Schedule
Create a schedule by selecting a target, scan engine, and cron expression. The target must exist and belong to your account.
POST /api/v1/schedules
curl -X POST https://api.xnolex.com/api/v1/schedules \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"target_id": "550e8400-e29b-41d4-a716-446655440000",
"engine": "full",
"cron_expression": "0 0 * * *"
}'Response:
200 OK
{
"id": "schedule-uuid-...",
"target_id": "550e8400-...",
"target_domain": "example.com",
"engine": "full",
"cron_expression": "0 0 * * *",
"is_active": true,
"next_run_at": "2025-01-16T00:00:00Z"
}Preset Frequencies
Common scheduling patterns:
Frequency
Cron Expression
Hourly
0 * * * *
Daily
0 0 * * *
Weekly
0 0 * * 1
Monthly
0 0 1 * *
Managing Schedules
Toggle Active/Paused
Pause a schedule without deleting it by setting is_active to false. Resume it by setting is_active back to true.
PUT /api/v1/schedules/{id}
curl -X PUT https://api.xnolex.com/api/v1/schedules/{schedule_id} \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "is_active": false }'Manual Trigger
Run a schedule immediately without waiting for the next cron trigger. This creates a new scan using the schedule's target and engine.
POST /api/v1/schedules/{id}/run-now
curl -X POST https://api.xnolex.com/api/v1/schedules/{schedule_id}/run-now \
-H "Authorization: Bearer <token>"Note
Manual triggers respect your concurrent scan limit. If you have reached your tier's limit, the request returns a 429 status code.
Delete a Schedule
DELETE /api/v1/schedules/{id}
curl -X DELETE https://api.xnolex.com/api/v1/schedules/{schedule_id} \
-H "Authorization: Bearer <token>"Tracking
Each schedule tracks two timestamps:
last_run_at — When the schedule last triggered a scan (updated on each trigger).
next_run_at — When the schedule will next trigger. Calculated from the cron expression when the schedule is created or updated.
Architecture Note
Info
The cron scheduler runs server-side. Actual scan execution depends on the backend scheduler process being active. If the scheduler is not running, scheduled scans will not trigger automatically. Manual triggers via the run-now endpoint are always available regardless of scheduler status.