List signal templates

Browse every signal your workspace can set up.

Lists the signals your workspace can set up: what each one watches for, who it watches (a person, a company, or both), and what it costs. A retired signal is left out of this list — fetch it directly by ID if a setup still points at it.

Each signal carries a setup field describing what a setup for it can carry. Render a form from setup.fields, or validate a setup's parameters against it, instead of hard-coding what each signal accepts.

Route

GET/api/v3/signal-templates

Access modes

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

Authorization: Bearer sk_live_...

Query parameters

ParameterTypeDescription
include_coming_soonbooleanWhen true, also returns signals that are not available to set up yet. Defaults to false.

See Pagination for the shared page / page_size parameters.

Example request

curl "https://api.getsillage.com/api/v3/signal-templates?page=1&page_size=25" \
  -H "Authorization: Bearer $SILLAGE_API_KEY"

Success response

Status: 200 OK

{
  "data": [
    {
      "id": 3,
      "key": "mentioned-keywords-on-linkedin",
      "name": "Mentions your keywords",
      "description": "Finds posts mentioning the keywords you're tracking.",
      "row_summary": "Posts mentioning your keywords",
      "category": "engagement",
      "status": "live",
      "subjects": ["person"],
      "scopes": ["discovery", "account_monitoring"],
      "tags": ["popular"],
      "pricing": {
        "account_monitoring": {
          "signal_bucket": "standard",
          "credits": 100,
          "unit": "key_account_per_month"
        },
        "discovery": null
      },
      "setup": {
        "fields": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "keywords": {
              "type": "array",
              "items": { "type": "string" },
              "default": ["acme"],
              "x-label": "Keywords",
              "x-hint": "Which words to watch for.",
              "x-control": "keywords"
            },
            "scopes": {
              "type": "array",
              "items": { "type": "string", "enum": ["discovery", "account_monitoring"] },
              "default": ["discovery"],
              "x-label": "Where it looks"
            }
          },
          "required": ["scopes"],
          "unevaluatedProperties": false,
          "allOf": [
            {
              "if": {
                "properties": { "scopes": { "contains": { "const": "discovery" } } }
              },
              "then": {
                "properties": {
                  "max_signals_per_week": {
                    "type": "integer",
                    "minimum": 1,
                    "default": 50,
                    "x-label": "Maximum signals per week",
                    "x-hint": "Caps how many signals this can produce in a week.",
                    "x-control": "number"
                  }
                }
              }
            }
          ]
        },
        "shape": "keyword"
      },
      "display_order": 3,
      "archived_at": null
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "page_size": 25,
      "page_count": 2,
      "total": 28
    }
  }
}

Response fields

FieldTypeDescription
data[].idintegerID of the signal. Specific to your environment.
data[].keystringStable identifier of the signal, such as mentioned-my-brand. Unlike id, it is the same in every environment, and it is the key of this signal in Credit usage.
data[].namestringThe signal name shown to a user.
data[].descriptionstring or nullA short explanation of what this signal watches for.
data[].row_summarystring or nullA one-line summary, for a compact list display.
data[].categorystringThe family of signals this one belongs to.
data[].statusstringlive if this signal can be set up today, coming_soon otherwise.
data[].subjectsarray of stringWho this signal watches — person, company, or both.
data[].scopesarray of stringWhich setups this signal supports — discovery, account_monitoring, or both.
data[].tagsarray of stringLabels you can filter on, e.g. popular. An open list — a new label can appear here without notice.
data[].pricingobjectWhat this signal costs your workspace, by mode. See below.
data[].pricing.account_monitoringobject or nullThis signal's account-monitoring price, carried by its bucket. null when it has no bucket yet, or the bucket has no price. See Signal Buckets.
data[].pricing.account_monitoring.signal_bucketstringKey of the bucket carrying this price (essential, standard or advanced).
data[].pricing.account_monitoring.creditsnumberThe exact price, in credits — never rounded.
data[].pricing.account_monitoring.unitstringAlways key_account_per_month.
data[].pricing.discoveryobject or nullThis signal's discovery price, per signal found. null when this signal has no discovery price.
data[].pricing.discovery.creditsnumberThe exact price, in credits — never rounded.
data[].pricing.discovery.unitstringAlways signal_found.
data[].setupobjectWhat a setup for this signal can carry. See below.
data[].setup.fieldsobjectA JSON Schema document describing a setup's parameters object. Render a form from it, or validate against it.
data[].setup.shapestringThe family of parameters this signal asks for: keyword, engagement, job_change, job_posting (read from job postings), firmographic, internal_signal (read from your own systems rather than public activity), or custom.
data[].display_orderintegerThe position this signal should be shown at, ascending.
data[].archived_atstring or nullWhen this signal was retired, null while still active. A retired signal is left out of this list but still resolves by ID.
meta.paginationobjectPagination metadata — see Pagination.

Each property inside setup.fields may carry x-label, x-hint, x-control and x-watchlist-type extensions. The first three describe how to render the property; x-watchlist-type, on a list_id property, says which kind of list that signal accepts. These are extensions, not part of the JSON Schema standard — ignore any x- property your client does not recognize.

pricing.account_monitoring: null or pricing.discovery: null means that mode has no price yet, not that it is free. See Signal Buckets for the account-monitoring rate.

Errors

StatusMeaning
400Invalid page or page_size.
401The API key is missing or invalid.
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 on v3 — title is what tells one problem from another, and stays stable across occurrences (other v3 endpoints may answer, for example, "Persona incomplete" or "Insufficient top accounts"):

{
  "type": "about:blank",
  "title": "Invalid query parameters",
  "status": 400,
  "detail": "page_size must be a positive integer",
  "instance": "/api/v3/signal-templates"
}

On this page