Add Accounts

Merge accounts into your workspace's top account list.

Merges the provided accounts into the workspace's existing top account list. This is an asynchronous operation — the 202 confirms the accounts were accepted for ingestion. Accounts already present in the list are deduplicated silently; submitting duplicates is not an error. Poll Get ingestion status until ingestion completes, then read the enriched results with List accounts.

Limited trial quota

Workspaces on a limited trial plan can only add a capped number of accounts over the lifetime of the workspace. The quota only counts accounts that are actually new: submitting accounts already in your list does not consume it, and removing accounts never frees quota back up. A request that would push you over your remaining quota is rejected in full — none of the submitted accounts are added — so retry with a smaller, curated list. See Errors below.

Add accounts

POST/api/v2/top-account-list/accounts

Request body

FieldTypeRequiredDescription
accountsarrayYesAccounts to add. Minimum 1 entry, maximum 10,000 entries. Each entry must include at least one of linkedin_url or domain.

Each account item:

FieldTypeRequiredDescription
linkedin_urlstringOne of twoLinkedIn company URL.
domainstringOne of twoCompany domain (e.g. acme.com).

Example request

curl -X POST "https://api.getsillage.com/api/v2/top-account-list/accounts" \
  -H "Authorization: Bearer $SILLAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accounts": [
      { "domain": "acme.com" },
      { "linkedin_url": "https://www.linkedin.com/company/northstar", "domain": "northstar.io" }
    ]
  }'
const response = await fetch(
  'https://api.getsillage.com/api/v2/top-account-list/accounts',
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      accounts: [
        { domain: 'acme.com' },
        {
          linkedin_url: 'https://www.linkedin.com/company/northstar',
          domain: 'northstar.io',
        },
      ],
    }),
  },
)

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

const body = JSON.stringify({
  accounts: [
    { domain: 'acme.com' },
    {
      linkedin_url: 'https://www.linkedin.com/company/northstar',
      domain: 'northstar.io',
    },
  ],
})

const req = request(
  new URL('https://api.getsillage.com/api/v2/top-account-list/accounts'),
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.SILLAGE_API_KEY}`,
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(body),
    },
  },
  (res) => {
    let data = ''
    res.on('data', (chunk) => {
      data += chunk
    })
    res.on('end', () => {
      console.log(JSON.parse(data))
    })
  },
)

req.write(body)
req.end()
import os
import requests

response = requests.post(
    "https://api.getsillage.com/api/v2/top-account-list/accounts",
    json={
        "accounts": [
            {"domain": "acme.com"},
            {"linkedin_url": "https://www.linkedin.com/company/northstar", "domain": "northstar.io"},
        ]
    },
    headers={"Authorization": f"Bearer {os.environ['SILLAGE_API_KEY']}"},
    timeout=30,
)
response.raise_for_status()
result = response.json()

Example response

{
  "tal_id": 17,
  "accounts": [
    { "domain": "acme.com" },
    {
      "linkedin_url": "https://www.linkedin.com/company/northstar",
      "domain": "northstar.io"
    }
  ],
  "message": "Top account list ingestion queued"
}

When the resulting list falls outside the recommended range, warnings appears in the response:

{
  "tal_id": 17,
  "accounts": [{ "domain": "acme.com" }],
  "message": "Top account list ingestion queued",
  "warnings": [
    "The top account list now has 2 account(s), below the recommended minimum of 5. Call sillage_v2_add_top_accounts to add more."
  ]
}

Response fields

FieldTypeDescription
tal_idintegerTop account list identifier.
accountsarrayEcho of the accounts submitted.
messagestringConfirmation message.
warningsstring[]Non-blocking reminders about the resulting list, for example when its size falls outside the recommended 5 to 20 accounts. Omitted from the response when there is nothing to flag.

Tracking ingestion progress

The 202 confirms the accounts were accepted for ingestion. To track when account mapping enrichment for a specific account completes, poll the stage endpoint after you observe a content request for that account:

GET /api/v2/account-mapping/{id}/stage

Terminal stages: completed (success) and account_mapping_failed (failure). See Account Mapping — Polling enrichment stage for the full response shape and polling details.

Errors

StatusMeaning
400The request body is invalid — missing/malformed fields, more than 10,000 accounts, or an account with neither linkedin_url nor domain.
401The API key is missing or invalid.
403Adding these accounts would exceed your workspace's limited trial quota. No accounts were added.
429Rate limit exceeded.
500An unexpected server error occurred.

Error responses use RFC 9457 problem documents with Content-Type: application/problem+json. The quota error carries a dedicated type so you can detect it programmatically:

{
  "type": "https://docs.getsillage.com/errors/top-account-quota-exceeded",
  "title": "Top account quota exceeded",
  "status": 403,
  "detail": "Adding 50 accounts would exceed your remaining quota of 12.",
  "instance": "/api/v2/top-account-list/accounts"
}

On this page