companies

Create company

Manually add ONE company, optionally attaching it to a playtable. The service walks the identity dedup ladder (ln_id > canonical company page URL > domain, team-scoped) before inserting; a name-only company (no identity field) skips dedup and is created directly. A stoplist check runs at insert - a domain/LinkedIn match sets status=stoplisted.

Duplicates are never a dead-end. Without on_duplicate, a dedup hit returns 409 duplicate_rejected with context {existing_sid, already_in_playtable_sids, matched_identifier_kind}. Retry with on_duplicate:"attach" to union playtable_sid into the existing row's membership (requires playtable_sid), or "skip" to return it untouched - both respond already_exists:true, and item.playtable_sids lists every table the company now lives in. Companies attach, never move (multi-table membership; each member table keeps an independent cell set).

Omit playtable_sid to create a table-less account (anchor for people.company_sid links). Firmographics (industry, size, HQ, …) are playtable field values, not create fields. NOT for bulk import (create a data source + run) or for adding humans (people tools).

Contract:

  • MCP tool create_company, registry package mcp.playtables/companies, mount playtables.people.
  • Operation create, response envelope create.
  • Flags: none.
post/api/companies

Request

  • Base URL
    https://beta.getsales.io/playtables/v1
  • Auth
    HTTP bearer and API key in header Team-SID

Request body

playtable_sidstring nullable

Table to attach to; omitted → playtable_sids: [] (table-less account - anchor for people.company_sid links).

namestring nullable

Display name, a manual observation (context), never a column. NOT a dedup key - a name-only company skips the dedup ladder.

logo_urlstring uri nullable

Company logo URL (max 2048), a manual observation; null = the domain favicon.

ln_idstring nullable

Numeric LinkedIn company id - strongest dedup key.

ln_nicknamestring nullable

Company page slug or page URL (reduced to the slug on write; a person profile or free text is a 422); dedup key #2.

websitestring uri nullable

The full URL, a manual observation; domain (a column, the identifier) is derived from it when domain is absent.

domainstring nullable

Normalized to lowercased apex on write; public-suffix validated; dedup key #3.

deal_sizenumber nullable

Deal value (decimal 15,2).

tag_sidsstring[] nullable

Labels; each existence-checked (422 relation_not_found).

external_refsobject nullable

Free-form CRM sync hook; round-tripped as-is.

on_duplicate'skip' | 'attach'

Dedup resolution: omitted → duplicate = 409 duplicate_rejected with context; "skip" = return the existing row untouched; "attach" = union playtable_sid into the existing row's membership (requires playtable_sid). Companies attach, never move.

Response

create success envelope.

successtrue required
operation'create' required
already_existsboolean required

Changes

No recorded changes to this operation across all 1 revision of this API.