Poll Scan Status
Check whether a visibility scan has finished and get progress updates.
Authentication: Required. Polling is read-only, so it works even for accounts in read-only mode (only triggering a scan is refused).
After triggering a scan, use this endpoint to check whether it's done. Poll every 30–60 seconds until scanAvailable is true, then grab the full report.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
syntheticId | integer | Yes | The brand agent ID returned when you triggered the scan. |
Example
Response — scan complete
When the scan is done, you'll get the top-level scores and a pointer to the full report:
This returns the latest completed scan and its scanFailed flag — it is not scoped to a specific run id. If the agent already had a completed scan and you just triggered a rescan, polling can return that previous scan with scanAvailable: true until the new run finishes. Don't treat the first scanAvailable: true after a rescan as your result — poll until scanDate is newer than when you triggered (see Polling strategy).
Response — scan reached no engines (transient failure)
Occasionally a run can't get a usable response from any AI engine (a temporary provider/network hiccup). The scan still completes and is returned with scanAvailable: true, but scanFailed is true and overallScore is 0. Treat the score as not meaningful — trigger a new scan rather than ingesting the zero:
Response — scan still running
Response — no scan found
Polling strategy
A typical scan takes 2–5 minutes depending on the number of queries and platforms. Here's a reasonable polling loop:
- Trigger the scan with
POST /api/visibility/scanand note the time - Wait 30 seconds
GET /api/visibility/scan?syntheticId=...- If
scanAvailableisfalse, wait 30 seconds and try again - Re-scanning an agent that already had a scan? A
scanAvailable: truewhosescanDateis older than your trigger time is the previous scan — keep polling untilscanDateadvances. (First-ever scans don't hit this: there's no prior scan to return.) - Once you have the fresh scan, fetch the full report with
GET /api/visibility/report. IfscanFailedistrue, the run reached no engine — trigger another scan instead of using the0.