Launch a Signal Run

Start a detection run for an agent across your target accounts.

A signal run scans your target accounts using the agent's configured detection type and reports matches as they are found. The launch endpoint returns 202 Accepted immediately — poll the status endpoint until the run reaches a terminal stage (completed, completed_partial, or failed).

The response is an array: keyword and job-change agents return one element, watchlist agents return one element per direction (inbound and outbound).

The signal_request_id and the {id} poll path parameter are IDs that are specific to your environment.

POST/api/v2/workspace/signal-runs

Request body

FieldTypeRequiredDescription
agent_idintegeryesThe ID of the agent to run, from your Sillage workspace. This ID is specific to your environment.
parametersobjectnoOptional run parameters (see below). Only keyword agents use them; other agents ignore this field.
parameters.lookback_daysinteger (1–180)noHow many days back to scan for matches, counted from now. Defaults to 90. Keyword agents only.

The examples below use a keyword run. Most agents need only agent_id; keyword agents optionally accept lookback_days (see the table above).

Example request

curl -X POST "https://api.getsillage.com/api/v2/workspace/signal-runs" \
  -H "Authorization: Bearer $SILLAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_id":42,"parameters":{"lookback_days":90}}'
const response = await fetch('https://api.getsillage.com/api/v2/workspace/signal-runs', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    agent_id: 42,
    parameters: { lookback_days: 90 },
  }),
})

const result = await response.json()
import { request } from 'node:https'

const body = JSON.stringify({
  agent_id: 42,
  parameters: { lookback_days: 90 },
})

const req = request(
  new URL('https://api.getsillage.com/api/v2/workspace/signal-runs'),
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(body),
    },
  },
  (res) => {
    let data = ''
    res.on('data', (chunk) => {
      data += chunk
    })
    res.on('end', () => {
      console.log(JSON.parse(data))
    })
  },
)

req.write(body)
req.end()
import os
import requests

response = requests.post(
    "https://api.getsillage.com/api/v2/workspace/signal-runs",
    json={
        "agent_id": 42,
        "parameters": {"lookback_days": 90},
    },
    headers={"Authorization": f"Bearer {os.environ['SILLAGE_API_KEY']}"},
    timeout=30,
)
response.raise_for_status()
result = response.json()

Example response — keyword agent

202 Accepted

[
  {
    "signal_request_id": 12345,
    "stage": "running"
  }
]

Example response — watchlist agent

202 Accepted

[
  {
    "signal_request_id": 12345,
    "stage": "running"
  },
  {
    "signal_request_id": 12346,
    "stage": "running"
  }
]

Response fields

The response is an array. Each element represents one detection direction that was started.

FieldTypeDescription
signal_request_idintegerID of this run. Use as {id} when polling. Specific to your environment.
stagestringAlways running on a successful launch.

Behavior notes: each call starts a new run. Retrying the same run is safe — it will not create duplicate matches.

Errors

StatusMeaning
400Invalid request body, no target accounts are configured for this workspace, or the agent has no detection type configured.
401The API key is missing or invalid.
403The workspace does not have access to this resource.
404Agent not found or not accessible.
429Rate limit exceeded.
500An unexpected server error occurred.

Error responses use RFC 9457 problem documents with Content-Type: application/problem+json:

{
  "type": "https://docs.getsillage.com/errors/bad-request",
  "title": "Bad Request",
  "status": 400,
  "detail": "No top accounts configured for this workspace.",
  "instance": "/api/v2/workspace/signal-runs"
}

On this page