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.

Create a list

Create a list of companies or people.

Creates a list in your workspace. What it holds follows from its type, which cannot be changed afterwards.

There is no idempotency key: sending the same request twice creates two lists. Before you retry, check the state with GET /v3/lists.

Route

POST/api/v3/lists

Access modes

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

Authorization: Bearer sk_live_...

Body parameters

ParameterTypeDescription
typestringRequired. competitor, partner, customer, prospect, influencer or champion. The employee list comes with the workspace and cannot be created here. It cannot be changed later, and it decides whether the list holds companies or people.
namestringRequired. Name of the list. A list name is a label: duplicates are allowed. Up to 255 characters.
descriptionstringOptional. Up to 1000 characters.
signal_bucketsarray of string or nullOptional. Customer and prospect lists only. Monitors every account of the list, including the accounts that join later: ["essential"]. null, or leaving it out, adds accounts without monitoring them.
tierinteger or nullOptional. Prospect lists only: 1, 2 or 3; a prospect list created without a tier gets 1. Refused with 422 on every other type, customer lists included. Set once: it cannot be changed afterwards.
persona_idsarray of integerOptional. IDs of the personas to attach the list to, from List personas. Leave it out to create the list visible from every persona. A monitored list attached to no persona is monitored, and charged, in every active persona. Up to 100 values.

Only these fields can be sent. Any other field is refused with a 422.

Example request

curl -X POST "https://api.getsillage.com/api/v3/lists" \
  -H "Authorization: Bearer $SILLAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "type": "customer",
  "name": "Key customers",
  "description": "The accounts we want to keep watching",
  "signal_buckets": [
    "essential"
  ],
  "persona_ids": [
    7
  ]
}'

Success response

Status: 201 Created

{
  "data": {
    "id": 12,
    "kind": "company",
    "type": "customer",
    "name": "Key customers",
    "description": "The accounts we want to keep watching",
    "member_count": 0,
    "bound_signal_setup_count": 0,
    "tier": null,
    "signal_buckets": ["essential"],
    "monitoring_by_persona": [
      { "persona_id": 7, "monitored_count": 0, "not_covered_count": 0 }
    ],
    "mode": "manual",
    "archived": false,
    "archived_at": null,
    "persona_ids": [7],
    "is_deletable": true,
    "not_deletable_reason": null
  }
}

Response fields

FieldTypeDescription
data.idintegerID of the list.
data.kindstringcompany or profile. Follows from type, read-only.
data.typestringWhat the list is for: competitor, partner, customer, prospect, influencer, champion or employee.
data.namestringName of the list.
data.descriptionstring or nullDescription of the list.
data.member_countintegerHow many companies or people are on the list.
data.bound_signal_setup_countintegerHow many signal setups and older app signals use this list.
data.tierinteger or nullTier of the list, 1 to 3, on prospect lists. null on every other type.
data.signal_bucketsarray of string or null["essential"] when every account of the list is monitored, including the accounts that join later. null when the whole list is not monitored. Only customer and prospect lists carry it. An archived list keeps its value, restored when you unarchive it.
data.monitoring_by_personaarray of object or nullOne entry per persona the list is watched for: its attached personas, or every active persona when it is attached to none. null on lists that are not customer or prospect lists. Left out with concise.
data.monitoring_by_persona[].persona_idintegerID of the persona.
data.monitoring_by_persona[].monitored_countintegerAccounts of the list monitored, and paid for, in this persona. 0 while the list is archived.
data.monitoring_by_persona[].not_covered_countintegerAccounts of the list with monitoring on in this persona but not paid for. 0 while the list is archived.
data.modestringmanual or smart. See Smart lists. Read-only.
data.archivedbooleantrue while the list is archived.
data.archived_atstring or nullWhen the list was archived, as an ISO 8601 timestamp. null while it is in use.
data.persona_idsarray of integerIDs of the personas the list belongs to. An empty array means the list is visible from every persona. A monitored list attached to no persona is monitored, and charged, in every active persona.
data.is_deletablebooleanWhether deleting or archiving the list would succeed right now.
data.not_deletable_reasonstring or nullWhy the list cannot be deleted or archived, null when it can: last_list_of_tier (it is the only list of its kind for its persona, for a prospect list of its tier, such as the only prospect Tier 1 list for this persona, or the only one attached to no persona: create another one first), in_use (a signal setup, or an older signal set up in the Sillage app, uses it) or employee_list (the "All my employees" list is never deleted). New values may be added; ignore values you don't know.

Errors

StatusMeaning
401The API key is missing or invalid.
422The body is not valid: a field is missing or unknown, a name or description is longer than allowed, there are more than 100 persona_ids, signal_buckets is sent for a list that is not a customer or prospect list (errors.signal_buckets says "only allowed on customer or prospect lists"), tier is sent for a list that is not a prospect list (errors.tier says "is only allowed on prospect lists"), or a persona_ids entry is not one of your personas (errors.persona_ids[1] says "must be the id of a persona of this workspace. See GET /v3/personas.").
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