Docs

Tools: data

75 tool(s) in this category.

company.get

Get Company

Fetch the interactions-catalog entry for a single company by name (case-insensitive exact match). Use when the agent already has a company name from input_params.company_list and wants the conversation count before deciding whether to include it. Returns null when no interactions exist for that company in this business.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
namestringyes

company.list

List Companies

List distinct company names present in this business's interactions data, ordered by name. Use when populating the v2 ICP / company-focus picker or when the agent needs a starting set before narrowing a research delegation. Returns each company's conversation count so the UI can flag low-signal accounts. Accepts an optional limit (default 50, max 500).

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
limitintegerno

company.search

Search Companies

Substring-search companies present in this business's interactions by name. Use when the user types into a company typeahead or when the agent wants to shortlist accounts for input_params.company_list before delegating to researcher. Accepts q (required) and limit (default 20, max 100). Each result carries the conversation count so low-signal matches are easy to filter.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
qstringyes
limitintegerno

connections.connect

Connect an Integration

Establish a new integration for a workspace, routing on the connector type: collect an API key, kick off an OAuth redirect, or track a social handle. Use when a user picks a provider from the catalog and wants it connected. Returns the created connection, or an OAuth authorize URL to redirect to. Creates and stores the connection without starting a sync.

  • HTTP: POST /connections
  • Required scopes: connections:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, connections, connect

Input

FieldTypeRequiredDescription
connector_typestringyesCatalog connector type to connect (e.g. hubspot, fathom, twitter).
namestringnoOptional display label for this connection instance.
scope`enum("business""personal")`no
api_keystringnoFor api_key connectors: the API key / token to store (encrypted).
account_handlestringnoFor social (handle) connectors: the resolved bare account handle.
external_account_idstringnoFor social (handle) connectors: the provider's stable account id.
display_namestringnoFor social (handle) connectors: display name snapshot.
avatar_urlstringnoFor social (handle) connectors: avatar image URL snapshot.
followersintegernoFor social (handle) connectors: follower count snapshot.
return_tostringnoFor oauth connectors: console URL to redirect back to after the handshake (first-party origins only).

connections.disconnect

Disconnect an Integration

Disconnect one established integration by its id, scoped to the workspace. Use when a user wants to stop an integration: the source (a CRM / calls / docs connector or a tracked X / LinkedIn account) is marked disconnected. Retains the row for re-connect; a non-existent or cross-tenant id is a clean not-found that never reveals another workspace.

  • HTTP: DELETE /connections/:id
  • Required scopes: connections:delete
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, connections, disconnect

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to disconnect.

connections.get

Get Connection By Id

Fetch one established integration by its id, resolved across both first-party data sources and tracked social accounts and scoped to the caller's workspace. Read when opening a connection detail view or confirming a specific integration's configuration. Returns the normalized record, or null when the id belongs to another tenant or does not exist - a not-found that never reveals existence.

  • HTTP: GET /connections/:id
  • Required scopes: connections:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to read.

connections.get_status

Get Connection Sync State

Fetch the live sync state of one integration - its normalized health, the in-flight syncing flag, the last good sync time, and any last error - without pulling the whole record. Read when polling a connecting / syncing badge after a connect or refresh kicks off. Resolved across both stacks and scoped to the workspace; null when the id is not in the tenant.

  • HTTP: GET /connections/:id/status
  • Required scopes: connections:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to read the sync state for.

connections.list

List Established Connections

Read every integration a workspace has actually established, newest first, merging first-party data sources and tracked social accounts into one normalized list with a uniform status, scope, and last-synced field. Read when rendering the connections inventory or answering which integrations are live for the tenant. This is the established-instances view, distinct from the catalog of available providers.

  • HTTP: GET /connections
  • Required scopes: connections:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

No structured input.

connections.list_catalog

List Connector Catalog

Read the catalog of integrations a workspace can hook up - CRM, calls, comms, docs, support, and social - with each entry's connect flow, ownership, and the data streams it brings in. Read when rendering the "add a connection" picker or answering which providers are supported. Describes what CAN be connected, not what is already connected. Optional kind / category filters narrow the menu.

  • HTTP: GET /connections/catalog
  • Required scopes: connections:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
kindenum("first_party")noFilter to one ingestion stack. first_party (amdahl-data pullers) is the only stack today; use category=social to filter the social UI grouping.
category`enum("crm""calls""comms"

connections.list_runs

List Connection Sync Runs

Read the recent sync-run history of one integration - each run's outcome, what triggered it, when it started and finished, how many streams ran or failed, the rows written, and a bucketed failure reason. Read when showing a connection activity log or diagnosing why data is not flowing. Scoped to the workspace; an id outside the tenant returns an empty list.

  • HTTP: GET /connections/:id/runs
  • Required scopes: connections:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to list sync runs for.
limitintegernoMax runs to return, newest first (default 25, capped at 100).

connections.reconnect

Reconnect an Integration

Restore a connection stuck in an error or needs-reauth state, in place on the existing data source so its sync history and id survive (no duplicate row). Use when a user clicks reconnect on a broken connection: an OAuth provider returns a fresh authorize URL to redirect through, an api_key connector takes a replacement key, and a tracked social handle simply re-triggers its sync. A non-existent or cross-tenant id is a clean not-found.

  • HTTP: POST /connections/:id/reconnect
  • Required scopes: connections:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, connections, reconnect, reauth

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to reconnect.
api_keystringnoFor api_key connectors: the replacement API key / token to store (encrypted) on the existing source. Ignored for oauth and social-handle connectors.
return_tostringnoFor oauth connectors: console URL to redirect back to after the re-handshake (first-party origins only).

connections.update

Update a Connection

Rename an established connection, or set/clear its owner - the workspace member a personal source (e.g. Gmail, Outlook) belongs to. Use when a user wants to relabel a connection to tell multiple instances apart, attribute a personal connection to a teammate, or clear that attribution. Owner applies to personal connectors only; returns the updated connection. A non-existent or cross-tenant id is a clean not-found.

  • HTTP: PATCH /connections/:id
  • Required scopes: connections:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, connections, update, owner, rename

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to update.
namestringnoNew display label for this connection instance (trimmed; must be non-empty). Renames any connection so multiple instances of the same connector type can be told apart.
owner_user_id`stringnull`no

console.issues_inbox.list

List Issues Inbox

List the business's issues inbox: pipeline-detected data-quality, enrichment, or signal problems surfaced for human review. Each issue has a category (e.g. unknown_speakers, unmapped_stages), severity, status (open/snoozed/resolved), and a link_surface + link_params pointing at the affected resource. Response includes per-status counts. Use when an agent needs to surface active pipeline health issues, triage by category, or check whether issues need attention before a sync.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
statusstringnoFilter by issue status: open (default), snoozed, resolved.
categorystringnoFilter by issue category (e.g. data_quality, enrichment_gap). Omit for all.
limitintegernoPage size 1–200 (default 50).
offsetintegernoPagination offset (default 0).

console.review_tasks.list

List Review Queue

List the pipeline's open review tasks for this business. Each task is a data-quality issue the pipeline flagged for human review: it may suggest merging identity records, overriding a misclassified entity field, or confirming a confidence-scored claim. Use when an agent needs to surface actionable pipeline issues, count the open queue, or inspect which entity records need human confirmation. Defaults to open tasks; pass status=all for resolved/dismissed. Paged with limit/offset.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
statusstringnoFilter by task status: open (default), resolved, dismissed.
kindstringnoFilter by task kind (e.g. link_identity, field_override). Omit for all kinds.
limitintegernoPage size 1–200 (default 50).
offsetintegernoPagination offset (default 0).

data.ask_sql

Ask SQL (natural language → SQL)

Use when a caller wants SQL but does not know the schema. Takes a plain-English question plus optional prior turns and returns a read-only SELECT against the interactions table with a one-sentence explanation. SELECT-only by construction (system prompt + post-validation reject DML/DDL). Stateless: pass last N turns in priorTurns for follow-ups like "break that down by company". Caller runs the SQL via data.query; this op only writes the query.

  • HTTP: POST /data/ask
  • Required scopes: data:read
  • Required role: viewer
  • Stability: beta
  • Version: 1.0
  • Tags: read, sql, nl2sql, ai

Input

FieldTypeRequiredDescription
questionstringyesPlain-English question describing what the user wants to know. Example: "How many objection-tagged utterances came from Finance Managers in the last 30 days?"
priorTurnsarray<object>noOptional rolling buffer of prior (question, sql, explanation) turns from the same conversational session. Replayed as Anthropic message history so the model can resolve follow-ups like "now break that down by company". Capped at the most recent 10 entries server-side. Frontend owns the buffer; this op is stateless.

data.cluster_detail

Get Cluster Detail

Full detail for a single pre-computed conversation cluster: label, description, insight, statistical measures (JSD, size anomaly), full feature distribution, representative quotes, temporal snapshots, and entity signals. Use after data.cluster_search has surfaced a cluster_id worth drilling into. Quotes are real but the selection and grouping are ML-generated.

  • HTTP: GET /data/clusters/:cluster_id
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.1
  • Tags: read, clusters, drill-in

Input

FieldTypeRequiredDescription
cluster_id`integerstring`yes
limitintegernoOptional cap on related content. Reserved for future use; service applies its own caps today.
as_ofstringnoOptional ISO-8601 date/timestamp for a themes-as-of detail read (e.g. "2026-05-12") — the cluster generation in effect then, for backtesting. Metadata + baked quotes are as-of-T; trend snapshots + entity signals are omitted (no historical snapshot). V2 pipeline only; not yet for data-scoped members. Omit for the current generation.

data.cluster_search

Search Conversation Clusters

Semantic pattern discovery across pre-computed ML clusters from customer conversations. Use to find recurring themes, pain points, objections, competitive mentions. Returns cluster summaries (label, top features, representative quotes, entity rollups). For verbatim quotes / named accounts / specific call evidence, follow up with data.cluster_detail on the most relevant cluster_id. Verify counts via data.query.

  • HTTP: POST /data/clusters/search
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.1
  • Tags: read, clusters, patterns, search

Input

FieldTypeRequiredDescription
querystringyesNatural-language query describing the pattern or theme you want to find.
match_thresholdnumbernoMinimum cluster similarity 0-1. Defaults to 0.3.
limitintegernoMax clusters returned. Floor 10, default 20, cap 50. Higher values surface more pattern variation and improve synthesis on divergence-detection paths; lower values starve the LLM. Values outside [floor, cap] are clamped silently. Ask for MORE clusters, not fewer — defaults are tuned for fusion synthesis quality.
target`enum("interactions""voice_corpus")`no
as_ofstringnoOptional ISO-8601 date/timestamp for a themes-as-of read (e.g. "2026-05-12") — the cluster generation in effect at that past instant, for backtesting. The tool swaps to the snapshot table-functions; do NOT hand-write a time predicate. Trend snapshots are omitted (no historical snapshot). V2 pipeline only; not yet supported for data-scoped members. Omit for current themes.

data.query

Query Interactions (SQL)

Use when the user wants a count, aggregate, or rows from the interactions table. Read-only SELECT, auto-scoped (never put business_id in WHERE). Explicit columns only. Enum casing matters: interaction_type is UPPERCASE (CALL/EMAIL/MEETING/NOTE/UTTERANCE), speaker_type lowercase (internal/external) — see data://schema for the rest. On 0 rows the response may include a hint to retry with a canonical value — follow it; NEVER substitute a different metric without asking.

  • HTTP: POST /data/query
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.2
  • Tags: read, bigquery, sql

Input

FieldTypeRequiredDescription
sqlstringyesSQL SELECT against the interactions table. Column names must be explicit (no SELECT *). business_id is injected automatically — do not reference it in WHERE. Enum value casing matters: interaction_type is UPPERCASE ('UTTERANCE'/'EMAIL'/'CALL'/'MEETING'/'NOTE'; V1 also 'INCOMING_EMAIL', folded into 'EMAIL' on V2), speaker_type is lowercase ('internal'/'external'). Count calls via COUNT(DISTINCT parent_interaction_id) WHERE parent_interaction_type='CALL', not interaction_type='CALL'. If unsure of casing or column existence, read data://schema first.
limitintegernoRow cap. Floor 1, default 100, cap 1000. Higher values surface more rows for synthesis and improve divergence detection on aggregate-heavy queries; lower values save tokens but reduce statistical confidence. Values outside [floor, cap] are clamped silently. Ask for MORE rows when synthesizing across customer segments — defaults are tuned for fusion synthesis quality.
as_ofstringnoOptional ISO-8601 date or timestamp for a temporal "as-of" read — answer the SAME SQL as it would have stood at a PAST instant, e.g. "2026-05-12" or "2026-05-12T00:00:00Z". The tool rewrites the query for you (do NOT hand-write a snapshot/time predicate). On interactions it bounds by event time; on deal_qualification it reads the qualification-score snapshot in effect then. On deals it returns a point-in-time stage/win-loss reconstruction (columns: deal_id, company_id, as_of_stage, status[won|lost|open], is_won, is_closed, close_date, deal_amount, source) via deal_winloss_as_of — for tenants with bridged deal stage-change history (HubSpot today; Salesforce/Pipedrive as their history backfills). Deals lacking stage history at the as_of instant return status='open'. NOTE the as_of deals projection is the reconstruction's columns only — deal columns outside that set (e.g. deal_name, pipeline_name) are not available under as_of. Omit for current data. This is the per-read primitive for backtesting how a blueprint would have performed.

data.schema

Data Inventory

Data inventory for the current business: interactions schema plus sample values, cluster availability, and knowledge base document count. Use when orienting at the start of a data workflow, before writing SQL or searching, so you know what exists. Replaces the old data.explore tool.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

No structured input.

data.search

Search Knowledge Base

Hybrid semantic + keyword search across the business knowledge base: saved research, uploaded documents, and past content outputs. Use when you need qualitative evidence, precedent, or supporting context from ingested documents - not structured fact lookup (use data.query for that). Returns one entry per document with up to three representative snippets and an origin field so you can weigh source reliability.

  • HTTP: POST /data/search
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: read, search, knowledge-base

Input

FieldTypeRequiredDescription
querystringyesNatural-language search query.
mode`enum("hybrid""semantic""keyword")`
limitintegernoMax chunks fetched before dedupe to documents. Defaults to 20.
source_type`enum("saved_research""knowledge_bank""content_creation")`

external_search.execute

External Search (fused market + tenant research)

Use when answering market / competitive / industry / topic-positioning questions. Returns a divergence_map flagging where market chatter (web+news+reddit+twitter) disagrees with the tenant's own customer voice (interactions) — the unique signal vs vanilla web search. Actions: search (free-text), enrich_company (domain/name + LinkedIn+Crunchbase), enrich_person (linkedin_url/email/name), enrich_topic (topic). Tenant-aware query rewrite runs first.

  • HTTP: POST /external-search/execute
  • Required scopes: external_search:execute
  • Required role: viewer
  • Stability: beta
  • Version: 1.0
  • Tags: external, web, social, enrichment

Input

FieldTypeRequiredDescription
action`enum("search""enrich_company""enrich_person"
querystringnoFree-text query (search action; reserved for the unified search shape).
domainstringnoCompany domain (e.g. stripe.com) for enrich_company. The underlying scrapers resolve the canonical platform URL via web search (cached 90d).
namestringnoName. For enrich_person this is the person name; for enrich_company this is the company name.
emailstringnoEmail for enrich_person. Server derives both name (from local-part) and company (from domain).
linkedin_urlstringnoLinkedIn URL for enrich_person.
twitter_handlestringnoTwitter handle for enrich_person.
topicstringnoTopic for enrich_topic.
sincestringnoISO-8601 lower bound for enrich_topic.
personasarray<string>noPersona labels for enrich_topic synthesis.
sources`array<enum("web""reddit""twitter"
max_resultsintegernoResult cap for free-text web / news fan-outs inside the composites.
max_itemsintegernoItem cap for twitter / reddit fan-outs inside the composites.
include_domainsarray<string>noWeb/news include allowlist applied during free-text fan-outs.
exclude_domainsarray<string>noWeb/news exclude list applied during free-text fan-outs.
force_refreshbooleannoBypass the brief cache check and run a fresh fan-out + synthesis regardless of TTL. Default false.
skip_persistbooleannoSkip the brief write entirely. Inline result is still returned. Default false.
recency_bias`enum("auto""news""general")`
skip_query_enrichmentbooleannoFor action=search: opt out of the Haiku query-enrichment rewrite. Default false.
include_internalbooleannoFor action=search: include the tenant interaction corpus pull. Default true. Set false for a market-only brief.
include_socialbooleannoFor action=search: include the reddit + twitter fan-out. Default true. Set false to skip social signals.
mode`enum("brief""evidence")`no

knowledge_base.chat

Chat With Knowledge Base

Ask a natural-language question against the knowledge bank and get a synthesized answer. Use when you need a composed answer drawing from multiple documents rather than raw chunks. Pass one document_id to chat with a single document; omit or pass several to chat across the bank. Streams status + source progress events; final payload contains the answer and cited sources when include_sources is true.

  • HTTP: POST /knowledge_base/chat
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: read-only, long-running, streaming, knowledge-base

Input

FieldTypeRequiredDescription
querystringyesThe user question to answer against the knowledge bank.
document_idsarray<string>noOptional scope. Pass one id for single-document chat; pass several to restrict cross-document retrieval to those documents.
include_sourcesbooleannoWhen true (default), return the retrieved source chunks alongside the answer.
max_turnsintegernoInformational cap on retrieval/generation iterations. The underlying service runs a single RAG turn today; this field is reserved for future agentic expansion.

knowledge_base.create_comment

Create Knowledge Base Version Comment

Add a review comment to a living-doc version. Use when a reviewer replies to the agent’s rationale or opens a new thread anchored to a changed block. Pass body (required); optionally block_id (the block the thread anchors to) and thread_root_id (when replying). versioning:write + editor, mirroring the human-gated promote write.

  • HTTP: POST /knowledge-base/:id/comments
  • Required scopes: versioning:write
  • Required role: editor
  • Stability: beta
  • Version: 1.0
  • Tags: living-doc, review, write

Input

FieldTypeRequiredDescription
idstringyesThe version (knowledge_bank_documents id).
bodystringyesThe comment text.
block_idstringnoOptional block id the thread anchors to (from the diff ops / block anchors).
thread_root_idstringnoOptional root comment id when replying; omit to start a new thread.

knowledge_base.delete

Delete Knowledge Base Document

Remove a knowledge bank document. Use when retiring stale content from the knowledge base. Default mode is a soft archive (sets is_archived=true) so the row, storage files, and embeddings remain intact and reversible. Pass hard_delete=true to permanently remove storage files, chunk embeddings, and the document row; hard delete requires the knowledge_base:delete scope in addition to knowledge_base:write.

  • HTTP: DELETE /knowledge_base/documents/:id
  • Required scopes: knowledge_base:delete
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: destructive, knowledge-base

Input

FieldTypeRequiredDescription
idstringyesUUID of the document.
hard_deletebooleannoWhen true, permanently remove storage files, chunks, and the row. Requires knowledge_base:delete scope.

knowledge_base.diff

Diff Knowledge Base Document Versions

Compute a line-level unified diff of a knowledge base living-doc version (:id, the target) against a base version (defaults to the immediate predecessor; ?base=<version_id> or ?base=current). Use for the doc-page version-diff view; returns hunks, +/- stats, a truncated flag, and base_missing=true for v1, or null when the target is missing or cross-business. Alias of blueprint_output://<id>/diff - the same server-computed diff so the doc page and Workflows tab agree.

  • HTTP: GET /knowledge-base/:id/diff
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyes
basestringno

knowledge_base.get

Get Knowledge Base Document

Fetch a single knowledge bank document by UUID. Use when the caller already has the document id and wants its full metadata + content markdown. Returns null when the document does not exist or belongs to a different business.

  • HTTP: GET /knowledge-base/:id
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyes

knowledge_base.get_access

Get Knowledge Base Document Access

Fetch the per-document read ACL for one knowledge bank document by UUID, scoped to this business. Read when you need to see which members and roles a restricted document is shared with. An empty entries list means the document carries no ACL and is workspace-wide readable by every member. Each entry resolves the subject display name (and email for members).

  • HTTP: GET /knowledge-base/:id/access
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyes

knowledge_base.get_content

Get Knowledge Base Document Content

Fetch the converted markdown body of one knowledge bank document by UUID, scoped to this business. Read when you need the full document text itself (to quote, summarise, or ground an answer) rather than the metadata row that knowledge_base.get returns. Returns an empty string while conversion is still pending, or null when the document does not exist or belongs to another business.

  • HTTP: GET /knowledge-base/:id/content
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyes

knowledge_base.get_versions

List Knowledge Base Document Versions

List all versions of a knowledge base document (its version family: current, proposed, superseded), newest first, resolved from the supplied document UUID and each row carrying its version_status. Use for the version-history view; enforces the same per-document read ACL as knowledge_base.get, so a restricted document never leaks its history and an empty list means the doc does not resolve or the caller may not read it.

  • HTTP: GET /knowledge-base/:id/versions
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyes

knowledge_base.list

List Knowledge Base Documents

List knowledge bank documents (uploads, saved research, style references) for this business. Use when enumerating documents by status, embedding_status, type, or a plain-text search. For full-content semantic search, call the knowledge_base.search tool.

  • HTTP: GET /knowledge-base
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
statusstringno
embedding_statusstringno
document_typestringno
searchstringno
is_archivedstringno
include_versionsstringno
limitintegerno
offsetintegerno

knowledge_base.list_comments

List Knowledge Base Version Comments

List the Level 3 review threads on a living-doc version (:id, a knowledge_bank_documents id). Use when rendering the version-review panel: agent rationale comments anchored to changed blocks plus human replies, grouped into threads with a resolved flag, with the version’s persisted block anchors. Same per-document read ACL as the version diff; null when missing or cross-business.

  • HTTP: GET /knowledge-base/:id/comments
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: beta
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyes

knowledge_base.resolve_comment

Resolve Knowledge Base Version Comment

Mark a living-doc review thread resolved (or reopen it with resolved=false). Use when a reviewer finishes acting on a thread. Operates on the thread root; passing a reply id resolves its root. versioning:write + editor, mirroring the human-gated promote write.

  • HTTP: POST /knowledge-base/:id/comments/:comment_id/resolve
  • Required scopes: versioning:write
  • Required role: editor
  • Stability: beta
  • Version: 1.0
  • Tags: living-doc, review, write

Input

FieldTypeRequiredDescription
idstringyesThe version the thread lives on.
comment_idstringyesThe comment (or its thread root) to resolve.
resolvedbooleannotrue to resolve (default), false to reopen.

knowledge_base.search

Search Knowledge Base

Hybrid semantic + keyword search across knowledge bank chunks. Use when looking up qualitative evidence, precedent, or supporting quotes from ingested documents. Defaults to knowledge_bank source_type; pass source_types to widen into saved_research or content_creation documents, or document_ids to restrict to specific documents. Returns chunks with document titles, heading context, and a combined similarity score.

  • HTTP: POST /knowledge_base/search
  • Required scopes: knowledge_base:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: read-only, search, knowledge-base

Input

FieldTypeRequiredDescription
querystringyesNatural-language search query.
mode`enum("hybrid""semantic""keyword")`
limitintegernoMax chunks to return. 1-100, default 20.
document_idsarray<string>noOptional list of document source_id UUIDs to restrict the search to.
source_types`array<enum("knowledge_bank""saved_research""content_creation")>`

knowledge_base.star

Star Knowledge Base Document

Pin a knowledge bank document as workspace canon. Read when reviewing reference material (messaging frameworks, brand pillars, market research) the agent should always cite. Knowledge bank docs come from file uploads with extracted summaries already populated; pinning them surfaces the pre-extracted summary into every copilot turn for free. Idempotent. Cap 20 across all canon items workspace-wide. Admin-only.

  • HTTP: POST /knowledge-base/:id/star
  • Required scopes: artifacts:write
  • Required role: admin
  • Stability: beta
  • Version: 1.0
  • Tags: canon, curation, admin

Input

FieldTypeRequiredDescription
idstringyesUUID of the KB document.

knowledge_base.unstar

Unstar Knowledge Base Document

Remove a knowledge bank doc from workspace canon. Use when a previously authoritative reference (messaging deck, brand pillars) is now stale or replaced. The KB document itself stays intact — only the system-prompt pre-load is dropped. Idempotent. Admin-only.

  • HTTP: POST /knowledge-base/:id/unstar
  • Required scopes: artifacts:write
  • Required role: admin
  • Stability: beta
  • Version: 1.0
  • Tags: canon, curation, admin

Input

FieldTypeRequiredDescription
idstringyesUUID of the KB document.

knowledge_base.update

Update Knowledge Base Document

Patch metadata on an existing knowledge bank document. Use when the user asks to rename a doc, retag a doc, archive or unarchive, edit the description or notes, or flip visibility between private and public. Accepts any subset of description, document_type, filename, user_notes, is_archived, visibility; the row content (chunks, embeddings, storage files) is immutable through this path. To change content, hard-delete and re-upload.

  • HTTP: PATCH /knowledge_base/documents/:id
  • Required scopes: knowledge_base:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: knowledge-base

Input

FieldTypeRequiredDescription
idstringyesUUID of the document to patch.
description`stringnull`no
document_type`stringnull`no
filenamestringnoOriginal filename including extension. Stored as original_filename on the row.
user_notes`stringnull`no
is_archivedbooleannoSoft-archive flag. Archived docs are excluded from default list responses; pass false to unarchive.
visibility`enum("private""public")`no
agent_usage_instructions`stringnull`no
review_interval_days`integernull`no
last_reviewed_atstringnoISO-8601 timestamp the doc was last reviewed. The console "mark reviewed" action sets this to now, resetting the freshness clock.

knowledge_base.upload

Upload Knowledge Base Document

Upload a document into the business knowledge bank (PDF/DOCX/PPTX/markdown). Use when adding an asset the KB should index. Accepts base64 file_content (Datalab Marker conversion) or raw markdown_content (straight to chunk + embed). Returns the new document id plus conversion + embedding status; files are async, so poll knowledge_base.get until ready. When appending a new version of a living document, also pass version_changes (per-section change notes) for the version-review UI.

  • HTTP: POST /knowledge_base/documents
  • Required scopes: knowledge_base:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: destructive, async, knowledge-base

Input

FieldTypeRequiredDescription
filenamestringyesOriginal filename with extension (e.g. "proposal.pdf", "notes.md"). Required.
file_contentstringnoBase64-encoded raw file bytes. Use this for PDF, DOCX, PPTX, and similar binary formats that need Marker conversion. Max 50 MB decoded.
markdown_contentstringnoPlain markdown body. Use this when you already have markdown and want to skip Marker. The document is chunked and embedded synchronously.
titlestringnoOptional display title. Defaults to the filename when omitted.
descriptionstringnoOptional description used in UI listings.
document_typestringnoOptional document type tag (e.g. "proposal", "contract", "meeting-notes").
agent_usage_instructionsstringnoOptional guidance on HOW agents should use this doc (distinct from description, which says WHAT it is). Injected into agent prompts in a later wave.
review_interval_daysintegernoOptional freshness-review cadence in days. Omit (or null) for a doc that never goes stale; otherwise the console flags the doc for review every N days.
tagsarray<string>noOptional free-form tags. Stored as-is on the document row if present.
auto_convertbooleannoWhen true (default), trigger Marker conversion + embedding. Set false to stage the raw file without kicking off the pipeline.
document_group_idstringnoOptional version family to append into. Omit to start a NEW document (version 1, promoted/current). Pass an existing group id to append a NEW VERSION — it lands status=proposed (a human promotes it) and does not replace the current version until promoted. Recurring blueprints pass the living document’s group id here.
version_labelstringnoOptional human-readable label for the version (e.g. "Jun 2026").
version_as_ofstringnoOptional ISO-8601 instant the version’s content reflects (e.g. a report date).
version_source`enum("blueprint_run""manual")`no
source_run_idstringnoOptional id of the blueprint run that produced this version (audit only; not an FK).
version_changesarray<object>noOptional per-section change notes when appending a NEW VERSION of a living document. One entry per section you changed: what changed, why, and which source tags you consulted. Persisted on the version row and surfaced in the version-review UI.
base_version_idstringnoLevel 3 authored patch: the id of the prior living-doc version your edit_plan is authored against (the predecessor supplied in the run prompt). Required with edit_plan.
edit_planarray<object>noLevel 3 authored patch: an ORDERED array of edit ops against the prior version’s blocks, so the version diff shows your intended changes (not a mechanical text guess) and each op’s rationale becomes a review thread. Supply alongside markdown_content (your full new body, used as a fallback if the plan does not apply). Each op is one of: { op:"replace", block_id, content_hash, content, rationale, evidence_refs[] }, { op:"delete_block", block_id, content_hash, rationale, evidence_refs[] }, or { op:"insert", anchor (a block_id, or "start"/"end"), content, rationale, evidence_refs[] }. Quote the block_id + content_hash from the PRIOR VERSION BLOCKS listing in the prompt.
asyncbooleannoPresent for parity with other async tools. The Marker path is always async; the markdown path is always synchronous. This flag is informational and does not change behavior.

notion_sync.backfill

Backfill Notion Sync

Trigger a full backfill of the outbound Notion sync for a connection: enqueue every current knowledge-base document for (re)mirroring into Notion. Use when first setting up the sync or to force a full reconciliation; unchanged documents are skipped cheaply so it is safe to run repeatedly.

  • HTTP: POST /notion-sync/:id/backfill
  • Required scopes: notion_sync:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, notion_sync, backfill

Input

FieldTypeRequiredDescription
idstringyesThe outbound Notion sync connection id.

notion_sync.configure

Configure Notion Sync

Configure the outbound Notion knowledge-base sync for a connection: designate the parent Notion page, provision the synced database under it, set the version + delete + drift policy and include filters, and start a full backfill. Use when a workspace sets up or reconfigures where its knowledge base mirrors into Notion.

  • HTTP: POST /notion-sync/:id/configure
  • Required scopes: notion_sync:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, notion_sync, configure

Input

FieldTypeRequiredDescription
idstringyesThe outbound Notion sync connection id.
parent_page_idstringyesThe Notion page the synced database is created under.
database_titlestringnoOptional title for the synced database.
enabledbooleannoWhether the sync is active (default true).
version_policy`enum("current_only""all_promoted")`no
on_kb_delete`enum("archive""leave")`no
drift_policy`enum("preserve""overwrite")`no
includeobjectnoOptional scope filters.

notion_sync.get

Get Notion Sync Config

Fetch the outbound Notion knowledge-base sync configuration for one connection - target database, version policy, include filters, and how many documents are currently mirrored. Read when opening the Notion sync settings panel for a connection. Returns null when the id is not a Notion sync connection in the caller's workspace - a not-found that never reveals existence.

  • HTTP: GET /notion-sync/:id
  • Required scopes: notion_sync:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesThe outbound Notion sync connection id.

notion_sync.list_pages

List Accessible Notion Pages

List the Notion pages the connected integration can access, so a workspace can pick which one the synced knowledge-base database is created under. Read when a Notion authorize granted more than one page and the parent-page picker needs to be shown. Returns an empty list for a non-Notion-sync or cross-tenant id - a not-found that never reveals existence.

  • HTTP: GET /notion-sync/:id/pages
  • Required scopes: notion_sync:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesThe outbound Notion sync connection id.

notion_sync.list_sends

List Notion Sync Activity

List the recent outbound Notion sync ledger for a connection (per-document synced / skipped / failed outcomes), newest-first, with an hourly summary. Read when showing the Notion sync activity log or diagnosing why a document did or did not mirror. Returns an empty list for a non-Notion-sync or cross-tenant id.

  • HTTP: GET /notion-sync/:id/sends
  • Required scopes: notion_sync:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesThe outbound Notion sync connection id.
limitnumbernoMax rows (1-200, default 50).

notion_sync.status

Get Notion Sync Status

Fetch the live status of an outbound Notion sync: enabled, provisioned, the connect-only provisioning state, mirrored-document count, and a recent-activity summary (synced / skipped / failed in the last hour). Read when polling a Notion sync status badge or deciding whether a parent-page picker is needed. Returns null for a non-Notion-sync or cross-tenant id.

  • HTTP: GET /notion-sync/:id/status
  • Required scopes: notion_sync:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesThe outbound Notion sync connection id.

notion_sync.unsync

Unsync Notion Sync

Tear down the outbound Notion sync for a connection: disable it and clear the mapping ledger so a later reconfigure starts clean. Use when a workspace wants to stop mirroring its knowledge base to Notion. The existing Notion pages are left in place - their data is preserved; this only stops future syncing.

  • HTTP: POST /notion-sync/:id/unsync
  • Required scopes: notion_sync:delete
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, notion_sync, unsync, destructive

Input

FieldTypeRequiredDescription
idstringyesThe outbound Notion sync connection id.

prompts.data.account_deep_dive

Account Deep Dive Prompt

Use when the user asks for a focused briefing on a single named account or company. Produces a three-step investigation plan (interactions, sentiment, recent summaries) that the agent executes through data.query.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, data, account

Input

FieldTypeRequiredDescription
account_namestringyesCompany name to investigate.

prompts.data.schema_tour

Schema Tour Prompt

Use when the user asks "what data is available?" or is exploring a business for the first time. Directs the agent to fetch the data://schema resource, read the analysisStrategies field, and summarize what exists before writing any SQL.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, data, orientation

Input

No structured input.

prompts.data.top_companies

Top Companies Prompt

Use when the user asks which companies drove the most calls or activity recently. Produces a ranked query template and summary directive the agent runs via data.query, scoped to a configurable day window and result limit.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, data

Input

FieldTypeRequiredDescription
daysnumbernoWindow size in days. Defaults to 30.
limitnumbernoNumber of companies. Defaults to 10.

prompts.data.weekly_pulse

Weekly Pulse Prompt

Use when the user asks for a weekly or N-day activity snapshot across interaction types (calls, emails, meetings). Produces a histogram query template plus a summary directive the agent runs via data.query.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, data

Input

FieldTypeRequiredDescription
daysnumbernoWindow size in days. Defaults to 7.

prompts.system.account_prep

Account Prep Brief

Use when the user is preparing for a scheduled sales call, customer meeting, QBR, renewal review, kickoff, or exec touchpoint with a specific account. Pulls deal stage, recent conversation themes, open opportunities, and risk signals; produces a stage-aware prep brief with talking points and questions to ask.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, system, gtm, sales-prep

Input

FieldTypeRequiredDescription
accountstringyesAccount / company name
meeting_contextstringnoOptional: what the meeting is for

prompts.system.amdahl_gtm_playbook

Amdahl GTM Playbook

Use when starting ANY go-to-market task in this workspace (research, enrichment, positioning, messaging, content, sales call prep, win-loss, outbound) and you need the live tool-routing guide for which Amdahl primitive handles which job, plus the operational defaults that make every call return useful results.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, system, gtm, routing

Input

No structured input.

prompts.system.competitive_positioning

Competitive Positioning Check

Use when the user wants to test, validate, or sharpen current positioning, value prop, or category framing — what we claim vs what buyers echo back, where the message lands, where it misses by segment. Compares positioning entries against speaker-attributed customer voice clusters and rep-vs-buyer language gaps.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, system, gtm, positioning

Input

FieldTypeRequiredDescription
focusstringnoOptional: specific positioning theme, pillar, or competitor angle to check

prompts.system.messaging_check

Messaging Check

Use when the user wants to test, refine, or audit a specific message, claim, hook, headline, or value-prop line — checking whether buyers echo it back, where it lands by segment, what they say instead. Surfaces rep-vs-buyer language gaps using the speaker-attributed call corpus.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, system, gtm, messaging

Input

FieldTypeRequiredDescription
messagestringyesThe message, claim, hook, or phrase to test

prompts.system.research_competitor

Research Competitor

Use when researching a specific competitor — their positioning, pricing, recent moves, market chatter, and where they show up in our own call transcripts. Pulls live external signal (news + social + web) and cross-references against our customer voice and competitive context entries.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, system, gtm, competitive-intel

Input

FieldTypeRequiredDescription
competitorstringyesCompetitor name or domain

prompts.system.research_customer

Research Customer

Use when the user names a customer, account, or prospect company and asks for context, history, recent signals, or deal stage. Pulls the external company brief (firmographics + recent web/news) alongside the internal corpus (deal stage + transcripts where they appear) to build the full picture from both directions.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, system, gtm, customer-research

Input

FieldTypeRequiredDescription
companystringyesCompany name or domain

prompts.system.win_loss_analysis

Win/Loss Analysis

Use when the user asks about win or loss patterns, deal outcomes, why deals close or stall, or what separates closed-won from closed-lost — across all deals, a segment cohort, or a specific competitor. Pulls deal-stage metadata, first-call patterns, competitor mentions, and objection clusters across the won and lost cohorts.

  • HTTP: (not exposed as REST)
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: prompt, system, gtm, win-loss

Input

FieldTypeRequiredDescription
cohortstringnoOptional: segment / vertical / size to scope the analysis
competitorstringnoOptional: focus on deals where this competitor was mentioned

social.connect_account

Connect Social Account

Save an already-verified social account as a tracked social connection for the tenant. Use when the user has confirmed the right profile (typically right after verify_connection) and wants it tracked going forward. Dedup is automatic: re-connecting an account that is already tracked returns an already_connected marker with the existing id instead of creating a duplicate. Persists one first-party data_sources row.

  • HTTP: POST /social/connections
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, social, connect

Input

FieldTypeRequiredDescription
channel`enum("twitter""linkedin")`yes
handlestringyesResolved bare handle of the account being tracked.
external_account_idstringyesProvider's stable account id (e.g. Twitter id_str); the dedup key.
display_namestringnoDisplay name snapshot at connect time.
nicknamestringnoOptional tenant-defined label for this account (e.g. 'Founder - personal'), distinct from the provider display_name.
avatar_urlstringnoAvatar image URL snapshot.
followersintegernoFollower count snapshot.
author_idstringnoOptional author profile this account belongs to.

social.create_subject

Create Tracked Subject

Create a tracked subject - a person or org you follow - that groups one or more social handles under one identity. Use when the user wants to start tracking someone (mark external) or register their own / a teammate's presence (mark internal). External subjects cannot have a member_user_id; an internal one may name a workspace member or be brand-owned. Link handles to it afterward.

  • HTTP: POST /social/subjects
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, social, subject, identity

Input

FieldTypeRequiredDescription
relationship`enum("internal""external")`yes
display_namestringnoDisplay label for the subject (the person/org name).
member_user_idstringnoThe workspace member this subject IS (internal + member-owned only). Must be a member of this workspace. Omit for a brand/org-owned internal subject; never set on an external one.
crm_contact_refobjectnoOptional CRM linkage (schema only in v1 - no resolver yet). Shape: { contact_id (required, non-empty), source?, label? }. Extra keys are dropped.
notesstringnoFreeform notes about who this is / why tracked.

social.delete_subject

Delete Tracked Subject

Delete a tracked subject by id. Use when the user wants to stop tracking a person/org as a grouped identity. The social connections grouped under it are kept - they just become ungrouped (their handle data and metrics history are untouched). A non-existent or cross-tenant id is a clean not-found.

  • HTTP: DELETE /social/subjects/:id
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, social, subject, delete

Input

FieldTypeRequiredDescription
idstringyesUUID of the subject to delete.

social.disconnect_account

Disconnect Social Account

Stop tracking a social account by removing its social connection (soft delete: the row is kept for audit but no longer synced or listed). Use when the user wants to untrack a profile they previously connected. The raw metrics history is owned by amdahl-data and is not purged here.

  • HTTP: DELETE /social/connections/:id
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.1
  • Tags: write, social, disconnect

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to disconnect.

social.get_connection

Get Social Connection

Fetch a single tracked social account (social connection) by its id for the tenant. Use when you already have a connection id and need its current details — handle, display name, follower snapshot, status, last sync time. Returns one connection or a not-found error. Read-only; scoped to the calling tenant.

  • HTTP: GET /social/connections/:id
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: read, social, get

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to fetch.

social.get_metric_trend

Get Social Metric Trend

Read a bucketed metric trend for one tracked social account: the follower series over time (scope=connection, default) or a single post's engagement trajectory (scope=post + post_id). Read when rendering an over-time chart or answering how a metric moved. One series per channel metric; tune the window_days + granularity (hour/day/week). Returns null when the connection is not in the tenant; empty series when nothing is captured yet.

  • HTTP: GET /social/connections/:id/trend
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to read the trend for.
scope`enum("connection""post")`no
post_idstringnoRequired when scope=post: the post id to chart.
granularity`enum("hour""day""week")`
window_daysintegernoLookback window in days (default 30, capped at 3650).

social.get_metrics_summary

Get Social Connection Summary

Read aggregate stats for one tracked social account: current followers + growth over the window (both null when the channel does not expose followers — LinkedIn personal profiles do not via the current actor), total engagement, post count, top post, and last sync. Read when rendering the summary header or answering how an account is doing. Identify by id; tune window_days for the growth figures. Returns null when the connection is not in the tenant.

  • HTTP: GET /social/connections/:id/summary
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to summarize.
window_daysintegernoWindow in days for the follower-growth figure (default 30, capped 3650).

social.get_portfolio_summary

Get Social Portfolio Summary

Read aggregate stats across every active tracked account in the tenant: total followers + growth (null when no in-scope connection reports followers — LinkedIn personal profiles do not via the current actor), total engagement, post count, the best post across all accounts, and last sync. Read when rendering the connectors index header or answering how the whole portfolio is doing. No id — rolls up the tenant. Tune window_days for the growth figures.

  • HTTP: GET /social/summary
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
window_daysintegernoWindow in days for the follower-growth figure (default 30, capped 3650).

social.get_subject

Get Tracked Subject

Read a single tracked subject by id for the tenant, with the social handles grouped under it. Read when you have a subject id and need its details - relationship tag, the member it represents, its linked handles. Returns one subject or null when it is not in the tenant. Scoped to the calling tenant.

  • HTTP: GET /social/subjects/:id
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesUUID of the subject to fetch.

social.get_subject_summary

Get Tracked Subject Summary

Read aggregate stats across every social handle grouped under a tracked subject: total followers (null when no handle reports a count), total engagement, post count, a per-channel breakdown, and last sync. Read when answering how a tracked person/org is doing across all their accounts at once. Identify by subject id; tune window_days. Returns null when the subject is not in the tenant; a zeroed summary when it has no handles.

  • HTTP: GET /social/subjects/:id/summary
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesUUID of the subject to summarize.
window_daysintegernoWindow in days for the follower-growth math (default 30, capped 3650).

social.link_handle

Link Handle to Subject

Group a tracked social connection under a subject by linking it - e.g. attach a person's X account to the subject that already holds their LinkedIn. Use when consolidating multiple handles for one person/org under a single tracked identity. Both must be in the tenant and the connection must be a live social handle. Missing either side is a clean not-found.

  • HTTP: POST /social/subjects/:subject_id/link
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, social, subject, link

Input

FieldTypeRequiredDescription
subject_idstringyesUUID of the subject to group the handle under.
connection_idstringyesUUID of the social connection (data source) to link.

social.list_channel_capabilities

List Social Channel Capabilities

Read the per-channel capability map: for each supported social channel (X / Twitter, LinkedIn), which entities (post / profile) it reports on and which metric keys + labels + formats each carries. Read when rendering metric toggles, legends, or column headers so the UI stays descriptor-driven and a new channel needs no front-end change. No id - it is the static, tenant-agnostic capability catalog.

  • HTTP: GET /social/capabilities
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

No structured input.

social.list_connections

List Social Connections

Return every tracked social account (social connection) for the tenant, newest first, excluding ones that have been disconnected. Use when the user wants to see which profiles are currently hooked up for social tracking, or before connecting a new one to check what's already there. Read-only; touches nothing.

  • HTTP: GET /social/connections
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: read, social, list

Input

No structured input.

social.list_post_metrics

List Social Post Metrics

Read the latest engagement snapshot per post for one tracked social account: likes, reposts, replies, quotes, bookmarks, and views, newest post first, capped at 25. Read when rendering a connection’s social view or answering how its recent posts are doing. Identify the connection by its id; returns the metrics plus the sync state, or null when the connection is not in the tenant.

  • HTTP: GET /social/connections/:id/metrics
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to read metrics for.

social.list_subjects

List Tracked Subjects

Read every tracked subject for the tenant, newest first - the people and orgs being followed, each with the social handles grouped under it. Read when showing who is tracked, or before creating / linking to check what already exists. Filter by relationship (internal / external). A subject with no handles yet returns an empty handles list.

  • HTTP: GET /social/subjects
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0

Input

FieldTypeRequiredDescription
relationship`enum("internal""external")`no

social.refresh_connection

Refresh Social Connection Metrics

Kick off a background metrics refresh for one tracked social account: ask amdahl-data to sync its source now and return immediately with a syncing acknowledgement (it does not wait). Call when the user wants fresh numbers on demand. Identify the connection by its id; poll the connection until is_syncing clears. Ingestion is owned by amdahl-data, not an in-app fetch.

  • HTTP: POST /social/connections/:id/refresh
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, social, metrics, refresh

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to refresh.

social.unlink_handle

Unlink Handle from Subject

Ungroup a social connection from its subject by clearing the link - the reverse of linking a handle. Use when a handle was grouped under the wrong subject, or to detach it. The connection itself is kept (handle data and metrics untouched); it just stops belonging to any subject. A non-existent or non-social connection id is a clean not-found.

  • HTTP: POST /social/subjects/:subject_id/unlink
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, social, subject, unlink

Input

FieldTypeRequiredDescription
connection_idstringyesUUID of the social connection (data source) to ungroup.
subject_idstringnoSubject the connection is being detached from (path context; not required).

social.update_connection

Update Social Connection

Update a tracked social account (social connection) in place: set or clear its nickname, pause or resume tracking, and/or set the per-connection lookback window (how far back posts are snapshotted). Use when the user wants to rename a connection, toggle whether it syncs, or change its history window. Identify the connection by its id; only the fields you pass are changed. Returns the updated connection, or a not-found error if it is not in the tenant.

  • HTTP: PATCH /social/connections/:id
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, social, update

Input

FieldTypeRequiredDescription
idstringyesUUID of the connection to update.
nickname`stringnull`no
status`enum("active""paused")`no
lookback_days`integernull`no

social.update_subject

Update Tracked Subject

Patch a tracked subject - rename it, retag internal/external, set or clear the workspace member it represents, edit notes or the CRM link. Use when subject details change. Only the fields you pass are touched. Rejects a change that would leave an external subject owning a member, or a member who is not in this workspace. A non-existent id is a clean not-found.

  • HTTP: PATCH /social/subjects/:id
  • Required scopes: data:write
  • Required role: editor
  • Stability: stable
  • Version: 1.0
  • Tags: write, social, subject, identity

Input

FieldTypeRequiredDescription
idstringyesUUID of the subject to update.
relationship`enum("internal""external")`no
display_name`stringnull`no
member_user_id`stringnull`no
crm_contact_ref`objectnull`no
notes`stringnull`no

social.verify_connection

Verify Social Connection

Resolve a social handle to its live account plus most recent post, or a typed reason it couldn't be confirmed (not_found / no_posts / private / provider_error). Use when a tenant is hooking up a profile for social tracking and you must confirm the handle points at the right account before anything is saved. Read-only probe against the channel provider; writes nothing.

  • HTTP: POST /social/verify
  • Required scopes: data:read
  • Required role: viewer
  • Stability: stable
  • Version: 1.0
  • Tags: read, social, verify

Input

FieldTypeRequiredDescription
channel`enum("twitter""linkedin")`yes
handlestringyesHandle to verify: a bare name, an @name, or a full profile URL.