Get a signal template

Retrieve one signal from the catalogue, including a retired one.

Retrieves one signal by ID, including what a setup for it can carry.

Unlike List signal templates, this also resolves a retired signal — so a setup that already points at one keeps working after it leaves the list.

Use the id returned by List signal templates. This ID is specific to your environment.

Route

GET/api/v3/signal-templates/{id}

Access modes

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

Authorization: Bearer sk_live_...

Path parameters

ParameterTypeDescription
idintegerID of the signal, from the list endpoint. This ID is specific to your environment.

Example request

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

Success response

Status: 200 OK

{
  "data": {
    "id": 3,
    "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
  }
}

Response fields

FieldTypeDescription
data.idintegerID of the signal. Specific to your environment.
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. This endpoint keeps resolving a retired signal by ID.

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
400id is not a valid ID.
401The API key is missing or invalid.
404No signal matches this ID.
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:

{
  "type": "about:blank",
  "title": "Not Found",
  "status": 404,
  "detail": "Signal template not found",
  "instance": "/api/v3/signal-templates/99999"
}

On this page