scan_id.
Requirements
- FullHunt Enterprise access with the OEM module
- Python 3.10 or later with
requests - A domain, host, public IP, or public CIDR you own or are authorized to test
- Stable tenant and job identifiers for
query_tags
Lifecycle contract
A non-deduplicated queued request consumes one OEM credit. Status checks do not consume scan credit. Queue requests are limited to 5 per minute, while status checks are limited to 10 per minute.
Run the worker
oem_scan_lifecycle.py
Retrieve updated observations
scan_completed confirms the OEM scan job reached completion. It does not return the resulting host collection in the status response. Query the relevant indexed endpoint after completion:
- Domain:
GET /api/v1/domain/{domain}/details - Host:
GET /api/v1/host/{host} - OEM history:
POST /api/v1/oem/historical-hosts/search
Recovery rules
- Resume an existing non-terminal
scan_idinstead of automatically queueing another scan. - Set
FULLHUNT_FORCE_NEW_SCAN=1only when intentionally replacing a completed state with a new scan. - Treat unknown status values as non-terminal until the timeout expires.
- Stop retries on
400,401,403, and404until the request or account configuration changes. - Keep state files and API keys out of source control.
- Reconcile tenant and job tags through OEM audit logs.
