Get Setup State

Check what is left to configure in your workspace, with a diagnostic checklist.

Get setup state

GET/api/v2/setup-state

Returns the authenticated workspace's overall setup progress, plus a diagnostic checklist covering the persona, target accounts, agents, and content — each with a status and, when it applies, a recommended next step.

The four top-level fields (persona_set, list_uploaded, ingestion_complete, has_contents) are the overall completion flags: true once that step is done at all, regardless of quality. The checklist object is the diagnostic layer underneath: an entry can still report warning even when its matching top-level flag is true, when the step was completed but is worth improving (for example, a persona with no job title set).

Checklist statuses

StatusMeaning
okNothing to do.
warningWorking, but could be improved — this never blocks anything.
blockedA hard prerequisite is missing, or the feature is not enabled for your workspace.

Each checklist entry may also include recommended_next_tool, naming the next action to take (for example sillage_v2_upsert_persona, sillage_v2_add_top_accounts, or sillage_v2_create_agent).

Example request

curl "https://api.getsillage.com/api/v2/setup-state" \
  -H "Authorization: Bearer $SILLAGE_API_KEY"
const response = await fetch('https://api.getsillage.com/api/v2/setup-state', {
  headers: {
    Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
  },
})

const result = await response.json()
import { request } from 'node:https'

const req = request(
  new URL('https://api.getsillage.com/api/v2/setup-state'),
  {
    headers: {
      Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
    },
  },
  (res) => {
    let data = ''
    res.on('data', (chunk) => {
      data += chunk
    })
    res.on('end', () => {
      console.log(JSON.parse(data))
    })
  },
)

req.end()
import os
import requests

response = requests.get(
    "https://api.getsillage.com/api/v2/setup-state",
    headers={"Authorization": f"Bearer {os.environ['SILLAGE_API_KEY']}"},
    timeout=30,
)
response.raise_for_status()
result = response.json()

Example response

A workspace midway through setup — persona set but missing a job title, target accounts still processing, one agent created, content generation not enabled:

{
  "persona_set": true,
  "list_uploaded": true,
  "ingestion_complete": false,
  "has_contents": false,
  "checklist": {
    "persona": {
      "status": "warning",
      "message": "No job_title set. Content generation and account mapping will target every job title until this is set.",
      "recommended_next_tool": "sillage_v2_upsert_persona",
      "job_title_set": false,
      "location_set": true
    },
    "accounts": {
      "status": "warning",
      "message": "Your target accounts are still being processed. Check back once this completes.",
      "count": 12,
      "ingestion_state": "processing",
      "has_unresolved_accounts": false
    },
    "agents": {
      "status": "warning",
      "message": "You have 1 agent. Consider adding a competitor or customer agent to widen coverage.",
      "recommended_next_tool": "sillage_v2_create_agent",
      "count": 1,
      "missing_priority_types": ["competitor", "customer", "keyword_detection"]
    },
    "contents": {
      "status": "blocked",
      "message": "Content generation is not enabled for your workspace. Contact Sillage support to enable it.",
      "has_contents": false
    }
  }
}

Response fields

FieldTypeDescription
persona_setbooleanWhether a persona has been configured, regardless of quality.
list_uploadedbooleanWhether at least one target account has been added.
ingestion_completebooleanWhether target account processing has finished.
has_contentsbooleanWhether any content has been generated.
checklist.persona.statusstringok, warning, or blocked — see Checklist statuses.
checklist.persona.messagestringPlain-language explanation of the status.
checklist.persona.recommended_next_toolstringOptional. Next tool to call to improve this area.
checklist.persona.job_title_setbooleanWhether the persona has at least one job title.
checklist.persona.location_setbooleanWhether the persona has at least one location.
checklist.accounts.statusstringok, warning, or blocked.
checklist.accounts.messagestringPlain-language explanation of the status.
checklist.accounts.recommended_next_toolstringOptional. Next tool to call to improve this area.
checklist.accounts.countintegerNumber of target accounts currently in the workspace.
checklist.accounts.ingestion_statestringqueued, processing, completed, or failed.
checklist.accounts.has_unresolved_accountsbooleanWhether some submitted accounts could not be matched to a company.
checklist.agents.statusstringok, warning, or blocked.
checklist.agents.messagestringPlain-language explanation of the status.
checklist.agents.recommended_next_toolstringOptional. Next tool to call to improve this area.
checklist.agents.countintegerNumber of agents currently configured.
checklist.agents.missing_priority_typesstring[]Recommended agent types (job_update, competitor, customer, keyword_detection, …) not yet created.
checklist.contents.statusstringok, warning, or blocked.
checklist.contents.messagestringPlain-language explanation of the status.
checklist.contents.recommended_next_toolstringOptional. Next tool to call to improve this area.
checklist.contents.has_contentsbooleanWhether any content has been generated.

Errors

StatusDescription
401The API key is missing or invalid.

On this page