API v3 is live and in beta: expect possible malfunctions and breaking changes in the coming days. If you find a bug, please report it to your Sillage contact.

Get a signal run

Follow a signal run until it completes or fails.

Returns the current state of a run started by Launch a signal run. Poll it until its status is completed or failed. A run that belongs to another workspace returns 404.

Route

GET/api/v3/signal-runs/{signal_run_id}

Access modes

Use a workspace API key. The workspace is inferred from the key.

Authorization: Bearer sk_live_...

Path parameters

ParameterTypeDescription
signal_run_idintegerThe id of the run, as returned by the launch endpoint.

Example request

curl "https://api.getsillage.com/api/v3/signal-runs/12345" \
  -H "Authorization: Bearer $SILLAGE_API_KEY"

Success response (still running)

Status: 200 OK

{
  "data": {
    "id": 12345,
    "status": "in_progress",
    "label": "Detecting signals",
    "created_at": "2026-01-15T09:30:00.000Z",
    "updated_at": "2026-01-15T09:30:00.000Z",
    "companies": [
      {
        "id": 88,
        "name": "Acme",
        "domain": "acme.com",
        "linkedin_url": "https://www.linkedin.com/company/acme",
        "linkedin_handle": "acme",
        "logo_url": "https://example.com/acme-logo.png"
      }
    ],
    "signal_setup_id": 42,
    "metadata": null
  }
}

Success response (completed)

Status: 200 OK

{
  "data": {
    "id": 12345,
    "status": "completed",
    "label": "Completed",
    "created_at": "2026-01-15T09:30:00.000Z",
    "updated_at": "2026-01-15T09:30:00.000Z",
    "companies": [
      {
        "id": 88,
        "name": "Acme",
        "domain": "acme.com",
        "linkedin_url": "https://www.linkedin.com/company/acme",
        "linkedin_handle": "acme",
        "logo_url": "https://example.com/acme-logo.png"
      }
    ],
    "signal_setup_id": 42,
    "metadata": null
  }
}

When the check of some accounts failed while the run was going, the run is still completed, its label says so, and metadata lists those accounts so you can retry. A run that could not start for some accounts is failed and lists them the same way:

{
  "data": {
    "id": 12345,
    "status": "completed",
    "label": "Completed (some accounts could not be checked)",
    "created_at": "2026-01-15T09:30:00.000Z",
    "updated_at": "2026-01-15T09:30:00.000Z",
    "companies": [
      {
        "id": 88,
        "name": "Acme",
        "domain": "acme.com",
        "linkedin_url": "https://www.linkedin.com/company/acme",
        "linkedin_handle": "acme",
        "logo_url": "https://example.com/acme-logo.png"
      }
    ],
    "signal_setup_id": 42,
    "metadata": {
      "failed": {
        "dropped_company_ids": [202, 203]
      }
    }
  }
}

Response fields

data has the fields below.

FieldTypeDescription
idintegerID of the signal run.
statusstringWhere the run stands: pending, in_progress, completed or failed. See Run statuses.
labelstringA short readable description of the current step.
created_atstring (date-time)When the run was started.
updated_atstring (date-time)When the run was last updated.
companiesarrayThe accounts being scanned. An empty array means the run covers the whole workspace.
companies[].idintegerID of the company, as returned by POST /v3/companies/query.
companies[].namestring | nullCompany name.
companies[].domainstring | nullCompany domain.
companies[].linkedin_urlstring | nullLinkedIn page of the company.
companies[].linkedin_handlestring | nullLinkedIn handle of the company.
companies[].logo_urlstring | nullLogo of the company.
signal_setup_idinteger | nullID of the signal setup the run belongs to, the same ID as in the client's signal setups. null when the run is not tied to one of the signal setups, for example a very old run, or a setup deleted while it was running.
metadataobject | nullPresent when some accounts could not be checked: metadata.failed.dropped_company_ids lists their company IDs, both the accounts whose check could not be started when the run was launched (the run is then failed) and the accounts whose check failed while the run was going (the run is completed and its label says some accounts could not be checked). A failed check that covers the whole workspace names no company, so an empty or missing list does not mean every account was checked: read status and label for that.

See Run statuses for the four values of status.

Errors

StatusMeaning
401The API key is missing or invalid.
404No signal run matches this ID.
422signal_run_id is not a valid ID. A query parameter is sent: this route takes none, and errors names the parameter.
429Rate limit exceeded.
500An unexpected server error occurred.

Error responses use RFC 9457 problem documents with Content-Type: application/problem+json. type is always about:blank; code tells one problem from another, detail says what went wrong this time, and errors names the field at fault.

On this page