Poll a Signal Run
Check a signal run's stage until it reaches a terminal state.
Poll a run started by the launch endpoint until its stage becomes terminal (completed, completed_partial, or failed).
The {id} path parameter is the signal_request_id returned at launch — an ID specific
to your environment.
GET/api/v2/workspace/signal-runs/{id}
Path parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | The signal_request_id returned by the launch endpoint. This ID is specific to your environment. A signal_request_id belonging to another workspace returns 404. |
Stage values
| Stage | Terminal | Description |
|---|---|---|
| waiting | no | Run is accepted and accounts are being prepared. |
| running | no | Accounts are actively being scanned. |
| completed | yes | All accounts were scanned successfully. |
| completed_partial | yes | Some accounts were scanned; at least one could not be. |
| failed | yes | The run could not complete — no accounts were scanned. |
Poll until stage is completed, completed_partial, or failed.
Example request
curl "https://api.getsillage.com/api/v2/workspace/signal-runs/12345" \
-H "Authorization: Bearer $SILLAGE_API_KEY"const response = await fetch(
'https://api.getsillage.com/api/v2/workspace/signal-runs/12345',
{
headers: {
Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
},
},
)
const result = await response.json()import { request } from 'node:https'
const req = request(
new URL('https://api.getsillage.com/api/v2/workspace/signal-runs/12345'),
{
headers: {
Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
},
},
(res) => {
let data = ''
res.on('data', (chunk) => {
data += chunk
})
res.on('end', () => {
console.log(JSON.parse(data))
})
},
)
req.end()import os
import requests
response = requests.get(
"https://api.getsillage.com/api/v2/workspace/signal-runs/12345",
headers={"Authorization": f"Bearer {os.environ['SILLAGE_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
result = response.json()Example response (still running)
200 OK
{
"signal_request_id": 12345,
"stage": "running",
"metadata": null
}Example response (completed)
200 OK
{
"signal_request_id": 12345,
"stage": "completed",
"metadata": null
}When some accounts could not be scanned, metadata reports them so you can retry:
{
"signal_request_id": 12345,
"stage": "completed_partial",
"metadata": { "failed": { "dropped_account_ids": [202, 203] } }
}Response fields
| Field | Type | Description |
|---|---|---|
| signal_request_id | integer | ID of the run. |
| stage | string | Current stage (see stage values table above). |
| metadata | object | null | Accounts that were not scanned (failed.dropped_account_ids). null when every account was scanned, or when the run failed entirely (stage is failed). |
Errors
| Status | Meaning |
|---|---|
| 400 | Invalid path parameter. |
| 401 | The API key is missing or invalid. |
| 403 | The workspace does not have access to this resource. |
| 404 | Signal run not found or belongs to another workspace. |
| 429 | Rate limit exceeded. |
| 500 | An unexpected server error occurred. |
Error responses use RFC 9457 problem documents with Content-Type: application/problem+json:
{
"type": "https://docs.getsillage.com/errors/not-found",
"title": "Not Found",
"status": 404,
"detail": "Signal run not found.",
"instance": "/api/v2/workspace/signal-runs/12345"
}