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
Path parameters
| Parameter | Type | Description |
|---|---|---|
| partner_workspace_id | string | Your own ID for the client workspace, as you chose it at creation. URL-encode it in the path. |
Query parameters
| Parameter | Type | Description |
|---|---|---|
| page | integer | Page number. Defaults to 1. Must be greater than or equal to 1. |
| page_size | integer | Number of items per page. Defaults to 25. Must be between 1 and 100. |
| categories | string | Comma-separated list. Only return signal templates of any of these categories: my_properties, my_network, competition, people, market, internal_intents. Up to 20 values. |
| subjects | string | Comma-separated list. Only return signal templates that watch any of these subjects: person, company. Up to 20 values. |
| scopes | string | Comma-separated list. Only return signal templates that support any of these setups: discovery, account_monitoring. Up to 20 values. |
| tags | string | Comma-separated list. Only return signal templates carrying any of these tags: popular, not_set_up. Up to 20 values. |
| name | string | Only return signal templates whose name contains this text, ignoring case. Up to 100 characters. keyword matches "Mentioned keywords on LinkedIn". |
| persona_id | integer | Show 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
| Field | Type | Description |
|---|---|---|
| data[] | array | The signal templates of the page. |
| meta.pagination | object | Pagination metadata: page, page_size, page_count and total. See Pagination. |
Each item of data has these fields:
| Field | Type | Description |
|---|---|---|
| id | integer | ID of the signal template. Use it as signal_template_id when you set a signal up. |
| key | string | Stable 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. |
| name | string | The name of the signal template. |
| description | string or null | A short explanation of what the signal watches for. |
| row_summary | string or null | A one-line summary, for a compact display. |
| category | string | The category of the signal template. See the list of categories on the overview page. |
| status | string | live: the signal can be set up. |
| subjects | array of string | Who the signal watches: person, company, or both. |
| scopes | array of string | Which setups the signal supports: discovery, account_monitoring, or both. |
| tags | array of string | What 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). |
| pricing | object | What 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_monitoring | object or null | The account-monitoring price. |
| pricing.account_monitoring.signal_bucket | string | The pricing tier this price belongs to. |
| pricing.account_monitoring.credits | number | The exact price, in credits. |
| pricing.account_monitoring.unit | string | per_key_account_per_month: the price is charged for each key account, each month. |
| pricing.discovery | object or null | The Discovery price. |
| pricing.discovery.credits | number | The exact price, in credits. |
| pricing.discovery.unit | string | signal_found: the price is charged for each signal found. |
| setup | object | What a setup for this signal template can carry. |
| setup.fields | object | A JSON Schema (2020-12) document describing the setup's parameters. See the page of each template for its parameters and defaults. |
| setup.shape | string | The family of parameters the signal asks for: keyword, engagement, job_change, job_posting, firmographic, internal_signal or custom. |
| archived_at | string or null | When 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
| Status | Meaning |
|---|---|
| 401 | The master key is missing or invalid. |
| 404 | No workspace found for this partner_workspace_id. |
| 422 | A 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. |
| 429 | Rate limit exceeded. |
| 500 | An 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.