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.

List a client's signal templates

Browse and filter the signal templates a client can set up.

Lists the signal templates the named client can set up: what each one watches for, who it watches, what it costs and the parameters a setup for it takes. An archived signal template is left out of this list: fetch it by its ID with Get a client's signal template. Signal templates always come in the same fixed order, the same for every workspace.

Filters combine: a template must match every filter you send, and any one of the values inside a comma-separated filter. A filter that matches nothing returns 200 with an empty data list. A filter value that is not valid is refused with a 422.

Route

GET/api/v3/partner/workspaces/{partner_workspace_id}/signal-templates

Path parameters

ParameterTypeDescription
partner_workspace_idstringYour own ID for the client workspace, as you chose it at creation. URL-encode it in the path.

Query parameters

ParameterTypeDescription
pageintegerPage number. Defaults to 1. Must be greater than or equal to 1.
page_sizeintegerNumber of items per page. Defaults to 25. Must be between 1 and 100.
categoriesstringComma-separated list. Only return signal templates of any of these categories: my_properties, my_network, competition, people, market, internal_intents. Up to 20 values.
subjectsstringComma-separated list. Only return signal templates that watch any of these subjects: person, company. Up to 20 values.
scopesstringComma-separated list. Only return signal templates that support any of these setups: discovery, account_monitoring. Up to 20 values.
tagsstringComma-separated list. Only return signal templates carrying any of these tags: popular, not_set_up. Up to 20 values.
namestringOnly return signal templates whose name contains this text, ignoring case. Up to 100 characters. keyword matches "Mentioned keywords on LinkedIn".
persona_idintegerShow the computed defaults (the client's domain, the names of the client's competitors) as they would be applied for this persona, given by its ID from List personas. It must be an active persona of the client's workspace. It also decides which setups count for the not_set_up tag: those of this persona and those that belong to no persona.

Example request

curl "https://api.getsillage.com/api/v3/partner/workspaces/ws_123/signal-templates?scopes=discovery&name=keyword" \
  -H "Authorization: Bearer $SILLAGE_MASTER_KEY"

Success response

Status: 200 OK

{
  "data": [
    {
      "id": 4,
      "key": "mentioned-keywords-on-linkedin",
      "name": "Mentioned keywords on LinkedIn",
      "description": "Detect when prospects post about the problems and technologies you address.",
      "row_summary": "Posts naming the problems and technologies you address.",
      "category": "market",
      "status": "live",
      "subjects": ["person"],
      "scopes": ["discovery", "account_monitoring"],
      "tags": ["popular", "not_set_up"],
      "pricing": {
        "account_monitoring": {
          "signal_bucket": "essential",
          "credits": 50,
          "unit": "per_key_account_per_month"
        },
        "discovery": {
          "credits": 20,
          "unit": "signal_found"
        }
      },
      "setup": {
        "fields": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "keywords": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "minItems": 1,
              "x-label": "Keywords to spot in their posts",
              "x-hint": "The keywords are yours to set.",
              "x-control": "keywords"
            },
            "scopes": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": ["discovery", "account_monitoring"]
              },
              "x-label": "Where it looks"
            }
          },
          "required": ["scopes", "keywords"],
          "unevaluatedProperties": false
        },
        "shape": "keyword"
      },
      "archived_at": null
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "page_size": 25,
      "page_count": 1,
      "total": 1
    }
  }
}

Response fields

FieldTypeDescription
data[]arrayThe signal templates of the page.
meta.paginationobjectPagination metadata: page, page_size, page_count and total. See Pagination.

Each item of data has these fields:

FieldTypeDescription
idintegerID of the signal template. Use it as signal_template_id when you set a signal up.
keystringStable identifier of the signal template, such as mentioned-my-brand. It is also the key of the template in Credit usage. Prefer it to id when you store a reference.
namestringThe name of the signal template.
descriptionstring or nullA short explanation of what the signal watches for.
row_summarystring or nullA one-line summary, for a compact display.
categorystringThe category of the signal template. See the list of categories on the overview page.
statusstringlive: the signal can be set up.
subjectsarray of stringWho the signal watches: person, company, or both.
scopesarray of stringWhich setups the signal supports: discovery, account_monitoring, or both.
tagsarray of stringWhat the template is flagged with, and what you can filter on. popular: Sillage recommends starting with it. not_set_up: the client's workspace has no active or paused signal setup of it (see persona_id).
pricingobjectWhat the signal costs the client's workspace, by setup. pricing.account_monitoring and pricing.discovery are each null when the signal has no price for that mode.
pricing.account_monitoringobject or nullThe account-monitoring price.
pricing.account_monitoring.signal_bucketstringThe pricing tier this price belongs to.
pricing.account_monitoring.creditsnumberThe exact price, in credits.
pricing.account_monitoring.unitstringper_key_account_per_month: the price is charged for each key account, each month.
pricing.discoveryobject or nullThe Discovery price.
pricing.discovery.creditsnumberThe exact price, in credits.
pricing.discovery.unitstringsignal_found: the price is charged for each signal found.
setupobjectWhat a setup for this signal template can carry.
setup.fieldsobjectA JSON Schema (2020-12) document describing the setup's parameters. See the page of each template for its parameters and defaults.
setup.shapestringThe family of parameters the signal asks for: keyword, engagement, job_change, job_posting, firmographic, internal_signal or custom.
archived_atstring or nullWhen the signal template was archived, null while it is not.

A property of setup.fields may carry x-label, x-hint and x-control, which describe how to render it, and, on a list_id property, x-list-type, which says which kind of list it accepts (competitor, partner, influencer, champion or employee). A property marked x-honoured: false is accepted but not used by that signal template. They are extensions of the JSON Schema standard: ignore any x- property your client does not use.

A default in setup.fields is exactly what is stored when you leave the property out. Where the default depends on the client's workspace (the client's domain, the names of the client's competitors), pass persona_id to see it for one persona. Without persona_id: if the client's workspace has one persona, it is resolved for it; if it has several, it is not shown, and those properties carry no default. persona_id also scopes the not_set_up tag: with it, a signal counts as set up when that persona, or no persona, has a setup of it; without it, any setup of the client's workspace counts.

Errors

StatusMeaning
401The master key is missing or invalid.
404No workspace found for this partner_workspace_id.
422A query parameter is not valid: an unknown parameter, a page or page_size out of range, an unknown categories value, subjects, scopes or tags value, an empty or repeated name, an unknown persona_id, or an archived persona.
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