You can submit files or URLs for analysis using client.scan_file() or client.scan_url().
Handling Analysis Status:
When a scan is submitted, the returned object initially only contains an id. You must poll the /analyses/ endpoint until the status attribute is "completed".
Wait for Completion:
Alternatively, you can pass wait_for_completion=True to the scan method. This makes the method blocking, so it will not return until the analysis is finished.
import vt
import time
client = vt.Client("<apikey>")
# Option 1: Non-blocking scan with manual polling
with open("/path/to/file", "rb") as f:
analysis = client.scan_file(f)
while True:
analysis = client.get_object("/analyses/{}", analysis.id)
print(analysis.status)
if analysis.status == "completed":
break
time.sleep(30)
# Option 2: Blocking scan (waits for completion)
with open("/path/to/file", "rb") as f:
analysis = client.scan_file(f, wait_for_completion=True)
# Scanning a URL
analysis = client.scan_url('https://somedomain.com/foo/bar')