website_sites

Create website site

Register a site for the website lane: a host or a URL (reduced to the bare host), its level (identification), the switches (link codes, the two carriers, consent, fingerprint, anonymize_ip, ignored addresses, the live alert level, the inbound table) and its key pages in the same call: key_pages absent = the default four (pricing, demo, signup, contact), [] = none. Ask the person first: explain the level (companies, the default: links carry the recipient's company code and visits show the company, never a person; people: visits from the people the team writes to are shown by name), and that collecting consent from EU, EEA and UK visitors and saying so in their privacy policy is their own duty. Send confirm_identification true, which is required, only after they confirm. Born pending, no codes until verified. A host the team already registered is 409 duplicate_rejected. Not idempotent.

Contract:

  • MCP tool create_website_site, registry package mcp.signals/website_sites, mount signals.website.
  • Operation create, response envelope create.
  • Flags: none.
post/api/website-sites

Request

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

Request body

domainstring required

A host or a URL (acme.com, https://www.acme.com/pricing): reduced to the bare host. app.acme.com registers that host alone.

identification'companies' | 'people'

What a visit may name: companies (default) or people. The person picks it once both are explained.

confirm_identificationtrue required

Required, true only after the person confirmed that, for the level chosen, collecting consent from visitors in the EU, the EEA and the UK and saying so in their privacy policy is their own duty. Stored as identification_confirmation.

include_subdomainsboolean

Hosts under the domain belong to the site. Default true.

link_codes_enabledboolean

Code the links to this site (once it is verified and confirmed for its level, and while the team switch is on). Default true.

carrier_linkedin'fragment' | 'query'

Where the code rides in a LinkedIn link: fragment (default) or query.

carrier_email'fragment' | 'query'

Where the code rides in an email link: query (default) or fragment.

consent_mode'not_required' | 'required'

not_required (default) stores the visitor id on the first hit; required waits for the site's banner to call gs('consent', true).

fingerprint_mode'on' | 'consent' | 'off'

on (default), consent (only after consent) or off.

anonymize_ipboolean

Keep a resolved session's address as its network part only. Default false.

ignored_ipsstring[]

IPv4 or IPv6 addresses or CIDR ranges of internal traffic (the office, the VPN). Replaced whole; at most 50; an entry that is neither is 422 invalid_ip.

live_alerts'off' | 'key_pages' | 'all_known'

off | key_pages (default) | all_known: when a known person on the site alerts the team now.

live_alert_tasksboolean

A live alert also opens a task, due now, on the person's open threads. Default true; false sends the notice alone.

live_alert_task_minutesinteger nullable

The life of that task in minutes, 5 to 43200 (30 days): still open by then, the sweep cancels it. null = it never expires. Default 30.

inbound_playtable_sidstring nullable

The table an identified visitor nobody has would be handed to; stored only today. null clears it.

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.