Docs

Amdahl Platform API

v1.0.0

REST API exposing atomic building blocks for customer intelligence. Create sessions, explore data, run SQL queries, search knowledge bases, query substrate intelligence, manage artifacts with version history, and register webhooks for async event delivery.

Base URL https://app.amdahl.co. All paths below include the full /api/platform/v1 prefix. Every operation has a Try it runner that calls the live API from your browser.

Need a key? Create one in the console: open console.amdahl.co, then your workspace then Settings then Developer then Create key. Paste it into any Try it panel below (it is saved in this browser only, never sent anywhere but the API).

Sessions

Substrate session management

get/api/platform/v1/sessions
API keyorBearer JWT

List sessions

Responses

200Session list
idstringrequired
created_atstringrequired
updated_atstringrequired
post/api/platform/v1/sessions
API keyorBearer JWT

Create a new session

Creates a substrate session for accumulating data across multiple API calls.

Responses

201Session created
idstringrequired
business_idstring <uuid>required
user_idstring <uuid>required
created_atstringrequired
updated_atstringrequired
401Unauthorized
errorstringrequired
delete/api/platform/v1/sessions/{id}
API keyorBearer JWT

Delete a session

Parameters

idpathstringrequired

Responses

200Session deleted
deletedbooleanrequired
404Not found
errorstringrequired

Data

Data exploration, SQL queries, and search

post/api/platform/v1/data/explore
API keyorBearer JWT

Explore available data

Discover schema columns, sample values, cluster availability, and KB inventory.

Request body

application/json

scopestringoptional
allschemaclustersknowledge
default "all"
include_samplesbooleanoptional
default true

Responses

200Exploration results
post/api/platform/v1/data/query
API keyorBearer JWT

Execute SQL query

Run a SQL query against the BigQuery interactions table.

Request body

application/json

sqlstringrequired
min length 1
limitintegeroptional
min 1max 1000default 100

Responses

200Query results
rowCountnumberrequired
truncatedbooleanrequired
rowsarray of objectrequired
400Invalid SQL
errorstringrequired
post/api/platform/v1/data/search
API keyorBearer JWT

Search knowledge base

Hybrid semantic + keyword search over knowledge base documents.

Request body

application/json

querystringrequired
min length 1
modestringoptional
hybridsemantickeyword
default "hybrid"
limitintegeroptional
min 1max 50default 10
source_typestringoptional

Responses

200Search results
resultCountnumberrequired
resultsarray of objectrequired

array items

idstringrequired
titlestring | nullrequired
originstring | nullrequired
snippetsarray of stringrequired
post/api/platform/v1/data/clusters/search
API keyorBearer JWT

Search conversation clusters

Semantic search over pre-computed ML conversation clusters.

Request body

application/json

querystringrequired
min length 1
match_thresholdnumberoptional
min 0max 1
limitintegeroptional
min 1max 50default 10

Responses

200Cluster search results
get/api/platform/v1/data/clusters/{cluster_id}
API keyorBearer JWT

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.

Parameters

cluster_idpathinteger | stringrequired

The cluster_id returned by `data.cluster_search` (or any prior cluster listing). Integer on V1; opaque string on V2 — pass it back verbatim.

limitqueryintegeroptional

Optional cap on related content. Reserved for future use; service applies its own caps today.

as_ofquerystringoptional

Optional 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.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/data/ask
API keyorBearer JWT

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.

Request body

application/jsonrequired

questionstringrequired

Plain-English question describing what the user wants to know. Example: "How many objection-tagged utterances came from Finance Managers in the last 30 days?"

min length 1max length 2000
priorTurnsarray of objectoptional

Optional 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.

array items

questionstringrequired
sqlstringrequired
explanationstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/knowledge_base/documents
API keyorBearer JWT

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.

Request body

application/jsonrequired

filenamestringrequired

Original filename with extension (e.g. "proposal.pdf", "notes.md"). Required.

min length 1
file_contentstringoptional

Base64-encoded raw file bytes. Use this for PDF, DOCX, PPTX, and similar binary formats that need Marker conversion. Max 50 MB decoded.

markdown_contentstringoptional

Plain markdown body. Use this when you already have markdown and want to skip Marker. The document is chunked and embedded synchronously.

titlestringoptional

Optional display title. Defaults to the filename when omitted.

descriptionstringoptional

Optional description used in UI listings.

document_typestringoptional

Optional document type tag (e.g. "proposal", "contract", "meeting-notes").

agent_usage_instructionsstringoptional

Optional 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_daysintegeroptional

Optional 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.

min 1
tagsarray of stringoptional

Optional free-form tags. Stored as-is on the document row if present.

auto_convertbooleanoptional

When true (default), trigger Marker conversion + embedding. Set false to stage the raw file without kicking off the pipeline.

default true
document_group_idstringoptional

Optional 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_labelstringoptional

Optional human-readable label for the version (e.g. "Jun 2026").

version_as_ofstringoptional

Optional ISO-8601 instant the version’s content reflects (e.g. a report date).

version_sourcestringoptional

Provenance of the version. Defaults to "manual". "blueprint_run" marks an automated append (it still lands proposed — same human gate).

blueprint_runmanual
source_run_idstringoptional

Optional id of the blueprint run that produced this version (audit only; not an FK).

version_changesarray of objectoptional

Optional 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.

array items

heading_anchorstringrequired

The exact heading text the change lands under, or a "Parent > Child" path for a nested section.

what_changedstringrequired

Short plain-English description of the edit to this section.

whystringrequired

The reason / evidence motivating the edit.

evidence_refsarray of stringrequired

Source tags you consulted (e.g. document or call ids).

base_version_idstringoptional

Level 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 of objectoptional

Level 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.

array items

opstringrequired
replacedelete_blockinsert
block_idstringoptional
anchorstringoptional
heading_pathstringoptional
content_hashstringoptional
contentstringoptional
rationalestringoptional
evidence_refsarray of stringoptional
asyncbooleanoptional

Present 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.

default true

Responses

201Created
dataobjectrequired
idstringrequired
statusstringrequired
chunk_countintegerrequired
embedding_statusstringrequired
document_group_idstringoptional
version_numberintegeroptional
version_statusstringoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
patch/api/platform/v1/knowledge_base/documents/{id}
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the document to patch.

Request body

application/json

descriptionstring | nulloptional

Short human-readable description shown in the KB UI. Pass null to clear the existing value.

document_typestring | nulloptional

Free-form category tag (e.g. "proposal", "sales_call", "icp_research"). Pass null to clear.

filenamestringoptional

Original filename including extension. Stored as `original_filename` on the row.

min length 1
user_notesstring | nulloptional

Caller-authored notes about the document. Pass null to clear.

is_archivedbooleanoptional

Soft-archive flag. Archived docs are excluded from default list responses; pass false to unarchive.

visibilitystringoptional

Toggle tenant-only ("private") vs anonymous-readable ("public") reads via /api/public/kb/:id. Mirrors platform_artifacts.visibility.

privatepublic
agent_usage_instructionsstring | nulloptional

Guidance on HOW agents should use this doc (distinct from description, which says WHAT it is). Pass null to clear.

review_interval_daysinteger | nulloptional

Freshness-review cadence in days. Pass null to clear (the doc then never goes stale).

min 1
last_reviewed_atstring <date-time>optional

ISO-8601 timestamp the doc was last reviewed. The console "mark reviewed" action sets this to now, resetting the freshness clock.

Responses

200OK
dataobjectrequired

Updated knowledge_bank_documents row.

idstringoptional
original_filenamestringoptional
descriptionstring | nulloptional
document_typestring | nulloptional
user_notesstring | nulloptional
is_archivedbooleanoptional
visibilitystringoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
delete/api/platform/v1/knowledge_base/documents/{id}
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the document.

hard_deletequerybooleanoptional

When true, permanently remove storage files, chunks, and the row. Requires knowledge_base:delete scope.

Responses

200OK
dataobjectrequired
successbooleanrequired
idstringrequired
modestringrequired
archivedhard_deleted
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/knowledge_base/search
API keyorBearer JWT

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.

Request body

application/jsonrequired

querystringrequired

Natural-language search query.

min length 1
modestringoptional

Retrieval mode. hybrid merges pgvector similarity and FTS via RRF (default). semantic uses pgvector only; keyword uses FTS only.

hybridsemantickeyword
default "hybrid"
limitintegeroptional

Max chunks to return. 1-100, default 20.

min 1max 100default 20
document_idsarray of stringoptional

Optional list of document source_id UUIDs to restrict the search to.

source_typesarray of stringoptional

Optional list of source types to include. Defaults to ["knowledge_bank"].

Responses

200OK
dataobjectrequired
resultsarray of anyrequired
countintegerrequired
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/knowledge_base/chat
API keyorBearer JWT

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.

Request body

application/jsonrequired

querystringrequired

The user question to answer against the knowledge bank.

min length 1
document_idsarray of stringoptional

Optional scope. Pass one id for single-document chat; pass several to restrict cross-document retrieval to those documents.

include_sourcesbooleanoptional

When true (default), return the retrieved source chunks alongside the answer.

default true
max_turnsintegeroptional

Informational cap on retrieval/generation iterations. The underlying service runs a single RAG turn today; this field is reserved for future agentic expansion.

min 1max 10default 3

Responses

200OK
dataobjectrequired
answerstringrequired
sourcesarray of anyrequired
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/knowledge-base/{id}/star
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the KB document.

Request body

application/json

object

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/knowledge-base/{id}/unstar
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the KB document.

Request body

application/json

object

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/knowledge-base/{id}/comments
API keyorBearer JWT

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.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/knowledge-base/{id}/comments
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The version (knowledge_bank_documents id).

Request body

application/jsonrequired

bodystringrequired

The comment text.

min length 1
block_idstringoptional

Optional block id the thread anchors to (from the diff ops / block anchors).

thread_root_idstringoptional

Optional root comment id when replying; omit to start a new thread.

Responses

201Created
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/knowledge-base/{id}/comments/{comment_id}/resolve
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The version the thread lives on.

comment_idpathstringrequired

The comment (or its thread root) to resolve.

Request body

application/json

resolvedbooleanoptional

true to resolve (default), false to reopen.

default true

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/external-search/execute
API keyorBearer JWT

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.

Request body

application/jsonrequired

actionstringrequired

Composite picker. See the description for action grammar.

searchenrich_companyenrich_personenrich_topic
querystringoptional

Free-text query (search action; reserved for the unified search shape).

domainstringoptional

Company domain (e.g. stripe.com) for enrich_company. The underlying scrapers resolve the canonical platform URL via web search (cached 90d).

namestringoptional

Name. For enrich_person this is the person name; for enrich_company this is the company name.

emailstringoptional

Email for enrich_person. Server derives both name (from local-part) and company (from domain).

linkedin_urlstringoptional

LinkedIn URL for enrich_person.

twitter_handlestringoptional

Twitter handle for enrich_person.

topicstringoptional

Topic for enrich_topic.

sincestringoptional

ISO-8601 lower bound for enrich_topic.

personasarray of stringoptional

Persona labels for enrich_topic synthesis.

sourcesarray of stringoptional

Source mix for enrich_topic. Default [web, reddit, twitter].

max_resultsintegeroptional

Result cap for free-text web / news fan-outs inside the composites.

min 1
max_itemsintegeroptional

Item cap for twitter / reddit fan-outs inside the composites.

min 1
include_domainsarray of stringoptional

Web/news include allowlist applied during free-text fan-outs.

exclude_domainsarray of stringoptional

Web/news exclude list applied during free-text fan-outs.

force_refreshbooleanoptional

Bypass the brief cache check and run a fresh fan-out + synthesis regardless of TTL. Default false.

skip_persistbooleanoptional

Skip the brief write entirely. Inline result is still returned. Default false.

recency_biasstringoptional

For action=search: weight news vs general web in synthesis. "auto" lets synthesis decide; "news" leans recent editorial; "general" leans evergreen pages.

autonewsgeneral
skip_query_enrichmentbooleanoptional

For action=search: opt out of the Haiku query-enrichment rewrite. Default false.

include_internalbooleanoptional

For action=search: include the tenant interaction corpus pull. Default true. Set false for a market-only brief.

include_socialbooleanoptional

For action=search: include the reddit + twitter fan-out. Default true. Set false to skip social signals.

modestringoptional

Output mode. "brief" (default) runs synthesis and returns the structured fusion brief. "evidence" skips synthesis and returns raw post-rerank items.

briefevidence

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/social/verify
API keyorBearer JWT

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.

Request body

application/jsonrequired

channelstringrequired

Social channel to verify against. Supported: twitter, linkedin.

twitterlinkedin
handlestringrequired

Handle to verify: a bare name, an @name, or a full profile URL.

min length 1max length 200

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/connections
API keyorBearer JWT

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.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/social/connections
API keyorBearer JWT

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.

Request body

application/jsonrequired

channelstringrequired

Social channel of the account. Supported: twitter, linkedin.

twitterlinkedin
handlestringrequired

Resolved bare handle of the account being tracked.

min length 1max length 200
external_account_idstringrequired

Provider's stable account id (e.g. Twitter id_str); the dedup key.

min length 1max length 200
display_namestringoptional

Display name snapshot at connect time.

nicknamestringoptional

Optional tenant-defined label for this account (e.g. 'Founder - personal'), distinct from the provider display_name.

max length 200
avatar_urlstringoptional

Avatar image URL snapshot.

followersintegeroptional

Follower count snapshot.

author_idstring <uuid>optional

Optional author profile this account belongs to.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/connections/{id}
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the connection to fetch.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
patch/api/platform/v1/social/connections/{id}
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the connection to update.

Request body

application/json

nicknamestring | nulloptional

Tenant-defined label for this account (e.g. 'Founder - personal'), distinct from the provider display_name. Pass null to clear it.

max length 200
statusstringoptional

Tracking status: active (syncing) or paused (kept but not syncing).

activepaused
lookback_daysinteger | nulloptional

Per-connection sweep window in days (how far back posts are snapshotted). Pass null to use the platform default; values are clamped to 1-3650.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
delete/api/platform/v1/social/connections/{id}
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the connection to disconnect.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/social/connections/{id}/refresh
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the connection to refresh.

Request body

application/json

object

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/connections/{id}/metrics
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to read metrics for.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/connections/{id}/trend
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to read the trend for.

scopequerystringoptional

connection (follower series, default) or post (one post over time).

post_idquerystringoptional

Required when scope=post: the post id to chart.

granularityquerystringoptional

Bucket size for the series. Defaults to day.

window_daysqueryintegeroptional

Lookback window in days (default 30, capped at 3650).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/connections/{id}/summary
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to summarize.

window_daysqueryintegeroptional

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

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/summary
API keyorBearer JWT

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.

Parameters

window_daysqueryintegeroptional

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

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/capabilities
API keyorBearer JWT

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.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/subjects
API keyorBearer JWT

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.

Parameters

relationshipquerystringoptional

Optional filter: internal (your own/members) or external (tracked).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/social/subjects
API keyorBearer JWT

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.

Request body

application/jsonrequired

relationshipstringrequired

'internal' = your own / a workspace member's account; 'external' = someone you track.

internalexternal
display_namestringoptional

Display label for the subject (the person/org name).

max length 300
member_user_idstring <uuid>optional

The 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_refobjectoptional

Optional CRM linkage (schema only in v1 - no resolver yet). Shape: { contact_id (required, non-empty), source?, label? }. Extra keys are dropped.

notesstringoptional

Freeform notes about who this is / why tracked.

max length 5000

Responses

201Created
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/subjects/{id}
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the subject to fetch.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
patch/api/platform/v1/social/subjects/{id}
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the subject to update.

Request body

application/json

relationshipstringoptional

Retag the subject internal/external.

internalexternal
display_namestring | nulloptional

New display label, or null to clear.

member_user_idstring | nulloptional

The workspace member this subject represents (internal only; must be a member). Pass null to clear. Cannot be set on an external subject.

crm_contact_refobject | nulloptional

CRM linkage (schema only in v1): { contact_id (required, non-empty), source?, label? }, or null to clear. Extra keys are dropped.

notesstring | nulloptional

Freeform notes, or null to clear.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
delete/api/platform/v1/social/subjects/{id}
API keyorBearer JWT

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.

Parameters

idpathstring <uuid>required

UUID of the subject to delete.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/social/subjects/{subject_id}/link
API keyorBearer JWT

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.

Parameters

subject_idpathstring <uuid>required

UUID of the subject to group the handle under.

Request body

application/jsonrequired

connection_idstring <uuid>required

UUID of the social connection (data source) to link.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/social/subjects/{subject_id}/unlink
API keyorBearer JWT

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.

Parameters

subject_idpathstring <uuid>required

Subject the connection is being detached from (path context; not required).

Request body

application/jsonrequired

connection_idstring <uuid>required

UUID of the social connection (data source) to ungroup.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/social/subjects/{id}/summary
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the subject to summarize.

window_daysqueryintegeroptional

Window in days for the follower-growth math (default 30, capped 3650).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/connections/catalog
API keyorBearer JWT

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.

Parameters

kindquerystringoptional

Filter to one ingestion stack. first_party (amdahl-data pullers) is the only stack today; use category=social to filter the social UI grouping.

categoryquerystringoptional

Filter to one UI category.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/connections
API keyorBearer JWT

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.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/connections
API keyorBearer JWT

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.

Request body

application/jsonrequired

connector_typestringrequired

Catalog connector type to connect (e.g. hubspot, fathom, twitter).

namestringoptional

Optional display label for this connection instance.

max length 200
scopestringoptional

Ownership: business (workspace-wide) or personal. Defaults from the catalog.

businesspersonal
api_keystringoptional

For api_key connectors: the API key / token to store (encrypted).

min length 1
account_handlestringoptional

For social (handle) connectors: the resolved bare account handle.

max length 200
external_account_idstringoptional

For social (handle) connectors: the provider's stable account id.

max length 200
display_namestringoptional

For social (handle) connectors: display name snapshot.

max length 200
avatar_urlstringoptional

For social (handle) connectors: avatar image URL snapshot.

followersintegeroptional

For social (handle) connectors: follower count snapshot.

return_tostringoptional

For oauth connectors: console URL to redirect back to after the handshake (first-party origins only).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/connections/{id}
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to read.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
patch/api/platform/v1/connections/{id}
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to update.

Request body

application/json

namestringoptional

New 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_idstring | nulloptional

The workspace member (auth user id) this personal connection belongs to. Pass null to clear the owner. Only valid for personal connectors (Gmail, Outlook).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
delete/api/platform/v1/connections/{id}
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to disconnect.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/connections/{id}/status
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to read the sync state for.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/connections/{id}/runs
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to list sync runs for.

limitqueryintegeroptional

Max runs to return, newest first (default 25, capped at 100).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/connections/{id}/reconnect
API keyorBearer JWT

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.

Parameters

idpathstringrequired

UUID of the connection to reconnect.

Request body

application/json

api_keystringoptional

For api_key connectors: the replacement API key / token to store (encrypted) on the existing source. Ignored for oauth and social-handle connectors.

min length 1
return_tostringoptional

For oauth connectors: console URL to redirect back to after the re-handshake (first-party origins only).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/notion-sync/{id}
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The outbound Notion sync connection id.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/notion-sync/{id}/status
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The outbound Notion sync connection id.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/notion-sync/{id}/sends
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The outbound Notion sync connection id.

limitquerynumberoptional

Max rows (1-200, default 50).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/notion-sync/{id}/pages
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The outbound Notion sync connection id.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/notion-sync/{id}/configure
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The outbound Notion sync connection id.

Request body

application/jsonrequired

parent_page_idstringrequired

The Notion page the synced database is created under.

database_titlestringoptional

Optional title for the synced database.

enabledbooleanoptional

Whether the sync is active (default true).

version_policystringoptional

Which versions to mirror.

current_onlyall_promoted
on_kb_deletestringoptional

What to do with the Notion page when a KB doc is removed.

archiveleave
drift_policystringoptional

How to handle a human-edited Notion page.

preserveoverwrite
includeobjectoptional

Optional scope filters.

document_typesarray of stringoptional
starred_onlybooleanoptional
group_idsarray of stringoptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/notion-sync/{id}/backfill
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The outbound Notion sync connection id.

Request body

application/json

object

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/notion-sync/{id}/unsync
API keyorBearer JWT

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.

Parameters

idpathstringrequired

The outbound Notion sync connection id.

Request body

application/json

object

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/knowledge-base
API keyorBearer JWT

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.

Parameters

statusquerystringoptional
embedding_statusquerystringoptional
document_typequerystringoptional
searchquerystringoptional
is_archivedquerystringoptional
include_versionsquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/knowledge-base/{id}
API keyorBearer JWT

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.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/knowledge-base/{id}/versions
API keyorBearer JWT

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.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/knowledge-base/{id}/content
API keyorBearer JWT

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.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/knowledge-base/{id}/access
API keyorBearer JWT

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).

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/knowledge-base/{id}/diff
API keyorBearer JWT

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.

Parameters

idpathstringrequired
basequerystringoptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional

Context

Business context, substrate intelligence, and Q&A

get/api/platform/v1/context/summary
API keyorBearer JWT

Get business summary

Company profile, authors, and writing sample counts.

Responses

200Business summary
get/api/platform/v1/context/substrate
API keyorBearer JWT

Get substrate status

Current session substrate counts and top items. Requires X-Session-Id header.

Responses

200Substrate status
400Session required
errorstringrequired
post/api/platform/v1/context/substrate/query
API keyorBearer JWT

Query substrate intelligence

Intent-driven smart query over accumulated substrate data. Requires X-Session-Id header.

Request body

application/json

intentSubstrateIntentrequired
answer_questionfind_metricsresearch_overviewsummarize_researchevidence_for_writingenrich_with_quotesassess_viability
querystringoptional
limitintegeroptional
source_filterarray of stringoptional

Responses

200Intelligence results
400Invalid intent
errorstringrequired
post/api/platform/v1/context/ask
API keyorBearer JWT

Ask a question

Agent-powered synthesized answer over session data + web search. 10-15s latency. Requires X-Session-Id header.

Request body

application/json

querystringrequired
min length 1

Responses

200Answer
answerstringrequired
substrateStatsobjectrequired
evidenceSearchednumberrequired
clustersSearchednumberrequired
metricsAvailablenumberrequired
400Missing data
errorstringrequired
post/api/platform/v1/context/remember
API keyorBearer JWT

Push an observation

Add external evidence to the session substrate. Requires X-Session-Id header.

Request body

application/json

textstringrequired
min length 1max length 4000
sourcestringoptional
webkgreference_docbigquerycluster
default "web"
company_namestringoptional
max length 200

Responses

200Evidence added
evidenceIdstringrequired
totalEvidenceCountnumberrequired
persistedbooleanrequired

Whether the substrate was durably persisted to DB

post/api/platform/v1/context/entries/write
API keyorBearer JWT

Write Context Entry

Create, update, or delete a persisted context entry. Use when saving, patching, or removing brand config / audience insights / campaign themes. action="create" requires type+title+content; action="update" requires id and at least one of title/content; action="delete" requires id. Reads use the context_entry:// resource (via read_resource).

Request body

application/jsonrequired

actionstringrequired

Which mutation to perform.

createupdatedelete
idstringoptional

Entry UUID. Required for update / delete.

typestringoptional

Dotted type identifier (e.g. "brand.colors"). Required for create.

max length 100
titlestringoptional

Human-readable title. Required for create; optional for update.

max length 500
contentobjectoptional

Arbitrary structured content. Required for create; optional for update.

sourcestringoptional

Origin of the entry. Defaults to manual on create.

manualauto_detectedimported

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/context/review-kit
API keyorBearer JWT

Context Review Kit

Use after completing a blueprint run when you want to update the business's long-term context. Returns: the run's audit row (inputs/outputs/step_states/errors), the current auto_detected context entries (capped at 100 most-recent), the count of manual entries you must NOT modify, the last 10 entries changed for trend awareness, and the curation rubric inline. Bundles three reads into one so the post-run curation playbook stays single-shot. Read-only — apply changes via context_entries.write.

Request body

application/json

blueprint_run_idstringoptional

Optional UUID of the blueprint_run you just completed. When supplied, the kit's `run` field is populated with that run's audit row. When omitted, `run` is null and the kit returns context surfaces only (useful for ad-hoc curation outside a run lifecycle).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional

Webhooks

Event webhook registration and delivery

get/api/platform/v1/webhooks
API keyorBearer JWT

List webhooks

Responses

200Webhook list
post/api/platform/v1/webhooks
API keyorBearer JWT

Register a webhook

Register a URL to receive POST callbacks on events. Returns the webhook secret for HMAC verification.

Request body

application/json

urlstring <uri>required
eventsarray of WebhookEventrequired

Responses

201Webhook registered
idstring <uuid>required
business_idstring <uuid>required
user_idstring <uuid>required
urlstring <uri>required
eventsarray of WebhookEventrequired
activebooleanrequired
created_atstringrequired
secretstringoptional

Only returned on creation

400Validation error
errorstringrequired
delete/api/platform/v1/webhooks/{id}
API keyorBearer JWT

Delete a webhook

Responses

200Webhook deleted
deletedbooleanrequired
404Not found
errorstringrequired
get/api/platform/v1/webhooks/{id}/deliveries
API keyorBearer JWT

Get delivery history

Returns up to 50 recent delivery attempts for a webhook.

Responses

200Delivery list
idstring <uuid>required
webhook_idstring <uuid>required
eventstringrequired
payloadobjectrequired
status_codenumber | nullrequired
attemptintegerrequired
errorstring | nullrequired
created_atstringrequired

Platform

Platform-level resources - sessions, webhooks, and plumbing.

get/api/platform/v1/resources
API keyorBearer JWT

Read Resource

Read any resource by URI. URIs follow <scheme>://<path>[?query]. Schemes: artifact, conversation, agent_run, agent_profile, context, context_entry, knowledge_base, webhook, data, content. Examples: artifact://abc-123 returns one artifact; context://summary grounds you in the business; data://schema is the data inventory. Use when you need to read existing state. See "Available resources" in your system prompt for the full list.

Parameters

uriquerystringrequired

The resource URI to read. Example: artifact://abc-123, artifact://list?type=content_piece, conversation://list, context://summary, context_entry://list?type_prefix=brand., knowledge_base://<id>, webhook://<id>/deliveries, data://schema, content://session/<id>, agent_profile://list.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/prompts
API keyorBearer JWT

List Prompts

Enumerate author-blessed prompt templates the current caller can invoke. Each entry carries a name, description, optional scheme (namespace prefix), and optional argsSchema. Use when the user asks "what can I do" or wants to discover available prompts, filter commands, or actions for a domain. Pass scheme to narrow to one family (e.g. briefing). Call use_prompt with one of the returned names to invoke it.

Parameters

schemequerystringoptional

Optional namespace prefix. Names look like `<scheme>/<leaf>` (briefing/account). Pass scheme="briefing" to return only briefing-family prompts.

Responses

200OK
dataobjectrequired
promptsarray of objectrequired

Prompt catalog entries visible to the caller after scope filtering.

array items

idstringrequired
namestringrequired
descriptionstringrequired
schemestringrequired
argsSchemaobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/prompts/use
API keyorBearer JWT

Use Prompt

Invoke an author-blessed prompt template by name. The response is a messages array (role + content pairs) you can fold into subsequent reasoning, like expert guidance assembled from business context rather than a final answer. Use when you want to apply a saved prompt template for a briefing, battlecard, or similar task. Call list_prompts first to discover available names.

Request body

application/jsonrequired

namestringrequired

Globally unique prompt slug returned by list_prompts (e.g. briefing/account).

min length 1
argumentsobjectoptional

Optional arguments for the prompt, validated against the prompt's declared argsSchema. Omit for prompts that take no arguments.

Responses

200OK
dataobjectrequired
messagesarray of objectrequired

The resolver's messages (role + content). Embed in your reasoning.

array items

rolestringrequired
userassistant
contentstringrequired
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/webhooks/write
API keyorBearer JWT

Write Webhook

Create, update, or delete a webhook subscription. Use when registering a new destination, changing URL / event list / description / active, or removing a subscription. action="create" returns the secret once — record it. action="update" requires id and at least one patch field. action="delete" requires id. Reads use the webhook:// resource family.

Request body

application/jsonrequired

actionstringrequired
createupdatedelete
idstring <uuid>optional
urlstring <uri>optional
eventsarray of stringoptional
secretstringoptional

Optional HMAC secret for create. Must be >= 16 chars. Stored encrypted.

min length 16
descriptionstringoptional
max length 500
activebooleanoptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/webhooks/{id}/test
API keyorBearer JWT

Test Fire Webhook

Fire a signed test delivery at a webhook destination and return the captured response. Use when verifying connectivity to a new subscription, debugging signature handling, or checking the receiver is up. Signed with the production HMAC-SHA256 scheme; an X-Webhook-Test: true header lets receivers no-op safely. One attempt only, no retries. Does not affect failure_count or last_delivery_at aggregates.

Parameters

idpathstring <uuid>required

UUID of the webhook to fire.

Request body

application/json

eventstringoptional

Event name for the test payload. Defaults to "test.ping".

min length 1default "test.ping"
payloadobjectoptional

Optional payload body. Defaults to { test: true, timestamp: <iso-now> } when omitted.

Responses

200OK
dataobjectrequired
delivery_idstring | nullrequired
status_codeinteger | nullrequired
response_bodystring | nullrequired
duration_msintegerrequired
successbooleanrequired
errorstring | nullrequired
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional

Workflows

Workflow orchestration endpoints.

post/api/platform/v1/knowledge_base/documents/{id}/make-living
API keyorBearer JWT

Make Knowledge Base Document Living

Convert a static knowledge base document into a self-refreshing living doc by synthesizing a refresh workflow (an agent_blueprint) bound to the doc version group and optionally scheduling it. Use when a user wants a KB doc to auto-regenerate on a cadence instead of going stale. Authors the recipe, forces the upload step onto the doc group, validates, persists the blueprint, and creates a cron schedule when a cron is supplied.

Parameters

idpathstring <uuid>required

UUID of the knowledge base document to make living.

Request body

application/json

schedule_cronstringoptional

Optional 5-field cron expression. When provided, the refresh blueprint is scheduled to run on this cadence; omit to create the blueprint without a schedule.

schedule_timezonestringoptional

Optional IANA timezone for the schedule (e.g. "America/New_York"). Defaults to UTC. Ignored when schedule_cron is omitted.

Responses

200OK
dataobjectrequired
blueprint_idstringrequired
blueprint_slugstringrequired
schedule_idstring | nullrequired
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agents/run
API keyorBearer JWT

Start Agent Session

Start a new agent run. Use when delegating a bounded, heavy task to a specialist profile (content_writer, researcher) or kicking off a one-shot copilot run. Returns a session id (run id) plus the underlying ephemeral conversation id. Poll agents.status or subscribe to SSE to monitor progress. Set async=false to block up to 60s. For multi-step content composition, read the matching blueprint recipe and perform its steps. For multi-turn chat, prefer conversations.* tools.

Request body

application/jsonrequired

profile_idstringrequired

Registered agent profile id (e.g. content_writer).

min length 1
taskstringrequired

Natural-language task description used as the initial user message.

min length 1
input_paramsobjectoptional

Structured task parameters consumed by the profile (channel, content_type, project_id, etc.).

asyncbooleanoptional

If true (default), enqueue and return immediately. If false, wait up to 60s for completion.

default true

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agents/{session_id}/resume
API keyorBearer JWT

Resume Agent Session

Resume an agent run that is paused on pending user input. Use when replying to an outline approval prompt, a clarification question, or a continue/finish decision. The input payload must match the run's `pending_input_schema`. After a successful resume the run transitions back to running and proceeds from where it paused.

Parameters

session_idpathstring <uuid>required

Request body

application/jsonrequired

inputobjectrequired

The user's resume payload. Must match the run's persisted pending_input_schema.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agents/{session_id}/cancel
API keyorBearer JWT

Cancel Agent Session

Cancel an in-flight agent run. Use when the user wants to stop a running agent before it finishes, or abandon a run that has gone sideways. Cascades to any sub-agents spawned from this run via agents.start — every live descendant is cancelled atomically. The runner bails at the next iteration boundary after observing the status change. Already-completed runs cannot be canceled. Pass a reason to record WHY the run was aborted in the audit trail.

Parameters

session_idpathstring <uuid>required

Request body

application/json

reasonstringoptional

Optional operator note describing why the run was canceled.

max length 500

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints/fork
API keyorBearer JWT

Fork Agent Blueprint

Duplicate a starter or tenant blueprint into the caller's namespace as a new draft artifact. Use when forking an Amdahl-shipped starter to customize it, or duplicating an existing tenant blueprint as a versioned variant. Source is either a starter slug (e.g. `plan-and-draft-window`), a starter's deterministic UUID, or a tenant blueprint UUID. Returns the new artifact id. Forks start at version 1.0.0, status `draft`, visibility `private`; promote via artifacts.update when ready.

Request body

application/jsonrequired

sourcestringrequired

Slug or UUID of the source blueprint. Resolves against starters first, then tenant DB.

min length 1
new_slugstringoptional

Optional slug for the fork (3-60 chars, /^[a-z0-9-]+$/). Auto-generated as `<source>-fork` when omitted.

new_namestringoptional

Optional display name for the fork. Defaults to `Copy of <source name>`.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints/{id}/run
API keyorBearer JWT

Run Agent Blueprint

Trigger a headless run of a saved agent_blueprint on the Claude Agent SDK. Use when launching a blueprint by id with explicit inputs (optionally as a backtest via as_of). The platform runs it out-of-process: the operation validates the blueprint, opens a blueprint_runs audit row, fires the runner asynchronously, and returns the blueprint_run_id plus a preview of the rendered prompt. Poll blueprint_run://<id> (GET /blueprint-runs/:id) or the SSE stream for progress + outputs.

Parameters

idpathstringrequired

Starter slug / UUID or tenant agent_blueprint artifact id to run.

Request body

application/json

inputsobjectoptional

Resolved input values keyed by the blueprint's declared input names. Required inputs without defaults must be supplied.

as_ofstringoptional

Optional ISO-8601 date for a backtest. When set, the run is forced read-only and reads tenant data as of that date.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints/{id}/schedules
API keyorBearer JWT

Create Blueprint Schedule

Create a recurring CRON schedule that fires a saved agent_blueprint headlessly. An agent can call this to schedule unattended runs (e.g. "run the research-report blueprint every Monday at 9am"). Provide the blueprint id, a cron expression, optional timezone (default UTC), inputs, and name; the platform validates the blueprint + cron, stores the schedule, and fires a headless run on each tick. Returns the created schedule (manage existing ones via blueprint_schedule.list/get/update/delete).

Parameters

idpathstringrequired

Starter slug / UUID or tenant agent_blueprint artifact id to schedule.

Request body

application/jsonrequired

cronstringrequired

Cron expression (5- or 6-field, e.g. "0 9 * * 1" for 9am every Monday). Validated before the schedule is stored.

min length 1
timezonestringoptional

IANA timezone the cron is evaluated in (e.g. "America/New_York"). Defaults to UTC.

inputsobjectoptional

Resolved input values keyed by the blueprint's declared input names. Declared defaults fill the rest at fire time.

namestringoptional

Optional human label for the schedule.

enabledbooleanoptional

Whether the schedule is active. Defaults to true.

Responses

201Created
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-schedules
API keyorBearer JWT

List Blueprint Schedules

List cron schedules (one per scheduled agent_blueprint) for this business, newest first. Use when rendering the schedules surface, filtering by blueprint_id, or showing only enabled/disabled schedules. Returns the schedule rows plus total/limit/offset.

Parameters

blueprint_idquerystringoptional
enabledquerybooleanoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-schedules/{id}
API keyorBearer JWT

Get Blueprint Schedule

Fetch a single blueprint cron schedule by id, including its cron, timezone, inputs, enabled flag, and last/next run bookkeeping. Use when rendering or auditing one schedule. Returns null when the schedule does not exist or belongs to a different business.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
patch/api/platform/v1/blueprint-schedules/{id}
API keyorBearer JWT

Update Blueprint Schedule

Update an existing blueprint cron schedule: change its cron, timezone, inputs, name, or enable/disable it. An agent can call this to retune or pause a scheduled run. A cron/timezone change is re-validated before it is saved. Returns the updated schedule, or not_found if it does not exist in this business.

Parameters

idpathstringrequired

Schedule id to update.

Request body

application/json

cronstringoptional

New cron expression (validated).

timezonestringoptional

New IANA timezone.

inputsobjectoptional

New input values keyed by the blueprint's input names.

namestring | nulloptional

New human label (or null to clear).

enabledbooleanoptional

Enable (true) or disable (false) the schedule.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
delete/api/platform/v1/blueprint-schedules/{id}
API keyorBearer JWT

Delete Blueprint Schedule

Delete a blueprint cron schedule by id. An agent can call this to remove a scheduled run entirely (to merely pause it, use blueprint_schedule.update with enabled:false). Returns success, or not_found if it does not exist in this business.

Parameters

idpathstringrequired

Schedule id to delete.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints/{id}/backtest/preview
API keyorBearer JWT

Preview Backtest Sweep

Dry-run a range-sweep backtest WITHOUT firing anything: given a blueprint, a date range, and a cadence (monthly|weekly), return the ordered as-of dates the sweep would run at plus the count and cap signals. Use when rendering the Run modal cost-preview so the operator confirms N before launching. Nothing is written and no runs are created.

Parameters

idpathstringrequired

Starter slug / UUID or tenant agent_blueprint artifact id.

Request body

application/jsonrequired

startstringrequired

ISO-8601 date for the oldest end of the range (inclusive).

endstringrequired

ISO-8601 date for the newest end of the range (inclusive).

cadencestringrequired

Spacing of the as-of points.

monthlyweekly

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints/{id}/backtest
API keyorBearer JWT

Backtest Blueprint Over a Range

Launch a range-sweep backtest of a saved agent_blueprint: fire a series of as-of runs across a date range at a cadence (monthly|weekly), grouped into one sweep. Use when an operator wants to see how a blueprint would have performed over time, optionally cumulative (each run seeds off the prior). Every run is forced read-only. Returns the backtest_id; poll blueprint_backtest://<id> for progress.

Parameters

idpathstringrequired

Starter slug / UUID or tenant agent_blueprint artifact id.

Request body

application/jsonrequired

startstringrequired

ISO-8601 date for the oldest end of the range (inclusive).

endstringrequired

ISO-8601 date for the newest end of the range (inclusive).

cadencestringrequired

Spacing of the as-of points.

monthlyweekly
cumulativebooleanoptional

When true, runs the sweep sequentially so each run can seed off the prior run output. Default false (independent, parallel).

inputsobjectoptional

Inputs forwarded to every child run, keyed by the blueprint's declared input names.

acknowledge_largebooleanoptional

Confirms a sweep whose run count is above the soft threshold. Required when preview reports requires_acknowledge.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/agent-blueprints
API keyorBearer JWT

List Agent Blueprints

List every agent_blueprint accessible to this business: Amdahl-shipped starters (forkable recipes in code) first, then the tenant's own DB-stored blueprints. Use when discovering which workflow recipes are available to read, fork, or compose. Recipes for reference; walk steps yourself using primitives. Direct execution from MCP is not exposed; see SERVER_INSTRUCTIONS for the rule. Each entry carries `is_starter` + `authored_by`. Fetch the full DSL via agent_blueprint://<id>.

Parameters

statusquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints
API keyorBearer JWT

Create Blueprint

Author and save a brand-new agent_blueprint recipe for this workspace from a v1 DSL body. Use when a user composes a fresh automation in the editor (or asks chat to draft one) and wants it persisted. The body runs through the full authoring moat — schema, step-id uniqueness, reference resolution, sub-blueprint cycle detection, tool-allowlist format — before any row is written; failures return a structured validation_failed list. Starters are read-only; fork one to base a recipe on it.

Request body

application/jsonrequired

contentobjectrequired

The v1 agent_blueprint DSL body. Read `step_kind://list` for the grammar.

titlestringoptional
max length 500
descriptionstringoptional
statusstringoptional
tagsarray of stringoptional
metadataobjectoptional

Responses

201Created
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/agent-blueprints/{id}
API keyorBearer JWT

Get Agent Blueprint

Fetch one agent_blueprint by id, including the full DSL content_json. The id is either a starter slug, a starter's deterministic UUID, or a tenant blueprint UUID; the reader checks code-defined starters first, then falls through to a DB lookup. Use when inspecting steps + declared inputs of a specific recipe. Recipes for reference; walk steps yourself using primitives. Direct execution from MCP is not exposed; see SERVER_INSTRUCTIONS for the rule. Returns null when nothing matches.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
patch/api/platform/v1/agent-blueprints/{id}
API keyorBearer JWT

Update Blueprint

Save edits to a workspace blueprint the caller already owns. Use when a user modifies an existing recipe and persists the change. The content field is a full replacement body re-checked through the authoring moat; title, description, status, tags, and metadata patch the surface row. Code-shipped starters reject — fork them first. A slug collision returns code slug_conflict with the conflicting artifact id for inline field UX.

Parameters

idpathstringrequired

Artifact UUID of the tenant blueprint.

Request body

application/json

contentobjectoptional

Full replacement v1 DSL body. Omit to patch surface fields only.

titlestringoptional
max length 500
descriptionstringoptional
statusstringoptional
tagsarray of stringoptional
metadataobjectoptional
change_summarystringoptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
delete/api/platform/v1/agent-blueprints/{id}
API keyorBearer JWT

Delete Blueprint

Archive a workspace blueprint so it drops out of the active library while staying recoverable. Use when a user removes a recipe they no longer need; the row is soft-deleted (hidden, reversible) rather than destroyed. Reverse it later with the unarchive op. Code-shipped starters cannot be archived; permanent removal of a tenant blueprint goes through the generic artifact delete path.

Parameters

idpathstringrequired

Artifact UUID of the tenant blueprint.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints/{id}/unarchive
API keyorBearer JWT

Unarchive Blueprint

Bring a previously archived workspace blueprint back into the active library. Use when a user undoes a blueprint removal and wants the recipe usable again. Operates only on tenant-owned rows that are currently archived; code-shipped starters have no archive state to restore.

Parameters

idpathstringrequired

Artifact UUID of the archived tenant blueprint.

Request body

application/json

object

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints/validate
API keyorBearer JWT

Validate Blueprint

Dry-run a blueprint DSL body through the full authoring moat without persisting anything. Use when an editor wants author-time feedback on a draft before saving — the response lists schema errors, duplicate step ids, unresolvable references, sub-blueprint cycles, and tool-allowlist format problems, with an overall valid flag. Nothing is written to the workspace.

Request body

application/jsonrequired

contentobjectrequired

Candidate v1 agent_blueprint DSL body to validate.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/agent-blueprints/{id}/promote
API keyorBearer JWT

Promote Blueprint Output

Promote a blueprint version to canonical — the single served document a recurring blueprint's living doc resolves to. Use when a human reviews a proposed version and publishes it: the prior canonical is superseded and archived out of retrieval, the chosen version becomes the citable doc, and the event is stamped with who/when. Name the target by output_id (a registered version) or kb_doc_id (a raw/out-of-band doc, registered on the fly). Promotion is human-gated by design.

Parameters

idpathstringrequired

Starter slug / UUID or tenant agent_blueprint artifact id to set the canonical for.

Request body

application/json

output_idstringoptional

The blueprint_outputs row id (registered version) to promote.

kb_doc_idstringoptional

A knowledge_bank_documents id to promote directly (registered as a candidate first if needed).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/external-search-jobs/{jobId}/stream
API keyorBearer JWT

External Search Job Stream

Read when discovering the live SSE event channel for a running external_search job spawned with subscribe_to_events=true. Returns a small JSON descriptor with the canonical channel URI, the companion HTTP stream path, the Redis pub/sub channel name, and content-type=text/event-stream so callers can open an SSE EventSource without re-deriving the path. Streaming itself happens on the GET HTTP route.

Parameters

jobIdpathstringrequired

The external_search job id (UUID) returned by external_search.execute when called with subscribe_to_events=true.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/agent-runs
API keyorBearer JWT

List Agent Runs

List agent runs (individual turn executions) for this business, newest first. Use when rendering per-turn activity, filtering by run status (queued|running|complete|error|canceled), a specific profile_id, or a user_id. Returns lean summaries; call agent_run://<id> for the full row.

Parameters

statusquerystringoptional
profile_idquerystringoptional
user_idquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/agent-runs/{id}
API keyorBearer JWT

Get Agent Run

Fetch a single agent run by UUID, including step_data events, the full conversation log, token usage, and final status. Use when debugging an individual turn, rendering tool traces, or auditing an agent trace. Returns null when the run does not exist or belongs to a different business.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/agent-profiles
API keyorBearer JWT

List Agent Profiles

Registered agent profiles - the specialist profiles an agent can delegate to (researcher, content_writer, orchestrator). Use when deciding whether to delegate a task and to which profile, or when planning a multi-step content or research task. Returns id, name, description, producesArtifactType, and inputParamsSchema per profile; the schema tells the caller exactly which input_params keys the profile consumes.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/step-kinds
API keyorBearer JWT

List Step Kinds

List every step kind the agent_blueprint DSL supports (tool, llm, loop, branch, parallel, blueprint, transform, assert). Use when authoring or visualizing a blueprint to discover the available control-flow + data + agent_call primitives. Returns id, name, description, category for each kind.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/step-kinds/{id}
API keyorBearer JWT

Get Step Kind

Fetch metadata for a single step kind by id (tool / llm / loop / branch / parallel / blueprint / transform / assert). Use when rendering a single canvas node or fetching catalog details for a specific step. Returns null when the id is not registered.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/trigger-kinds
API keyorBearer JWT

List Trigger Kinds

List every trigger kind the agent_blueprint DSL supports (manual today; schedule/event/webhook in later waves). Use when authoring or visualizing a blueprint to discover how it can be invoked. Returns id, name, description, category, and the wave each kind ships.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/trigger-kinds/{id}
API keyorBearer JWT

Get Trigger Kind

Fetch metadata for a single trigger kind by id (manual / schedule / event / webhook). Use when rendering a single trigger configuration card. Returns null when the id is cataloged but its handler is not yet implemented (e.g. `webhook`).

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-runs
API keyorBearer JWT

List Blueprint Runs

List blueprint runs (one per agent_blueprint invocation) for this business, newest first. Use when rendering the run-history timeline, filtering by blueprint_id, or auditing past runs by status (queued|running|complete|error|canceled). Returns lean rows; fetch blueprint_run://<id> for the full step_states + tokens.

Parameters

blueprint_idquerystringoptional
statusquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-runs/{id}
API keyorBearer JWT

Get Blueprint Run

Fetch a single blueprint run by id, including step_states, current_step_id, tokens used, and any error message. Use when rendering an individual run timeline or auditing a finished run. Returns null when the run does not exist or belongs to a different business.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-backtests
API keyorBearer JWT

List Backtest Sweeps

List range-sweep backtests (each a series of as-of blueprint runs across a date range) for this business, newest first. Use when rendering the backtest-history list, filtering by blueprint_id, or auditing past sweeps by status. Returns lean sweep rows; fetch blueprint_backtest://<id> for the per-point run rollup.

Parameters

blueprint_idquerystringoptional
statusquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-backtests/{id}
API keyorBearer JWT

Get Backtest Sweep

Fetch a single range-sweep backtest by id, with its as-of points resolved against their child blueprint runs (per-point run status) and a rolled-up status summary. Use when rendering a sweep progress timeline or auditing a finished backtest. Returns null when the sweep does not exist or belongs to a different business.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-outputs
API keyorBearer JWT

List Blueprint Outputs

List a recurring blueprint's living-doc versions for this business, newest first. Use when rendering the Versions tab, finding the current canonical (each row carries is_canonical), or auditing what was produced and when. Filter by blueprint_id. Returns lean version rows; fetch blueprint_output://<id> for full provenance.

Parameters

blueprint_idquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-outputs/{id}
API keyorBearer JWT

Get Blueprint Output

Fetch a single blueprint living-doc version by id, including promotion status, the kb_doc_id it serves, and provenance (source_run_id, as_of, diff_summary, quality_score, promoted_by/at). Use when rendering a version detail or the promote confirmation. Returns null when the version does not exist or belongs to a different business.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-outputs/{id}/diff
API keyorBearer JWT

Diff Blueprint Output Versions

Compute a line-level unified diff of a living-doc version (:id, the target) against a base version. Use for the version-diff view. Base defaults to the immediate predecessor; pass ?base=<version_id> for a specific version or ?base=current for the promoted current. Returns hunks (context + add/remove lines, word-level segments on edits), +/- stats, a truncated flag, and base_missing=true for v1. Returns null when the target is missing or cross-business.

Parameters

idpathstringrequired
basequerystringoptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/blueprint-outputs/{id}/comments
API keyorBearer JWT

List Blueprint Output Version Comments

List a workflow living-doc version’s review threads for the Workflows Versions tab (:id is the output / knowledge_bank_documents id). Use when a reviewer opens a version diff and wants the agent’s per-edit rationale plus teammate replies as resolvable threads, with the persisted block anchors. The workflows:read counterpart of knowledge_base://<id>/comments; identical data + ACL.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/prompt-fragments
API keyorBearer JWT

List Prompt Fragments

List every registered platform prompt fragment (named, version-controlled chunks of expertise that agent_blueprint llm steps can compose via prompt_resources). Use when authoring or reviewing a blueprint to discover what reusable prompt patterns exist; fetch a single fragment via prompt://<scheme>/<id> for the full body. Optional scheme filter (e.g. ?scheme=content_writer).

Parameters

schemequerystringoptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/prompt-fragments/{id}
API keyorBearer JWT

Get Prompt Fragment

Fetch a single platform prompt fragment by id (full body included). Use when a blueprint llm step's prompt_resources references prompt://<scheme>/<id>; the runner or canvas inlines the returned body verbatim. Path is the slash-namespaced fragment id (e.g. content_writer/grounding_rules). Returns null when the id is not registered.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional

Conversations

get/api/platform/v1/conversations
API keyorBearer JWT

List Conversations

List agent conversations for this business, newest activity first. Use when rendering recent chat threads, a picker UI, or an audit view. Filter by status (active|archived) or profile_id; paginate via limit + offset.

Parameters

statusquerystringoptional
profile_idquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/conversations
API keyorBearer JWT

Create Conversation

Create a new chat conversation pinned to an agent profile. Use when starting a new multi-turn session with a specific profile (copilot, researcher, etc.). If first_turn_message is supplied, the first turn is enqueued immediately and turn_id is returned. The pinned profile is immutable and governs every subsequent turn.

Request body

application/jsonrequired

profile_idstringrequired

Registered agent profile id (e.g. copilot).

min length 1
titlestringoptional

Optional initial title. If omitted, may be auto-generated post-first-turn.

input_paramsobjectoptional

Structured creation-time params forwarded into every run.

first_turn_messagestringoptional

Optional first user turn. When supplied, a run is enqueued immediately.

Responses

201Created
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/conversations/{id}
API keyorBearer JWT

Get Conversation

Fetch a single agent conversation by UUID along with its ordered turns (agent runs). Use when rendering chat history for a specific thread, resuming UI state after navigation, or auditing exactly what happened across every turn. Returns null when the conversation does not exist or belongs to a different business.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
patch/api/platform/v1/conversations/{id}
API keyorBearer JWT

Update Conversation

Patch a conversation. Use when renaming a chat (title) or archiving it (status=archived). Returns the updated row. The pinned agent profile is immutable and cannot be changed here; create a new conversation if a different profile is required.

Parameters

idpathstring <uuid>required

Conversation UUID.

Request body

application/json

titlestringoptional

New title. Non-empty after trim.

min length 1
statusstringoptional

New lifecycle status.

activearchived

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/conversations/{id}/turns
API keyorBearer JWT

Append Conversation Turn

Append a new user message to an active conversation. Use when continuing an existing chat thread instead of starting a new one. Creates a new agent run, enqueues it for the pinned profile, and returns the turn id. The conversation must be in status=active; archived conversations reject new turns.

Parameters

idpathstring <uuid>required

Conversation UUID.

Request body

application/jsonrequired

messagestringrequired

User message that kicks off the new turn.

min length 1
input_paramsobjectoptional

Structured per-turn params. Reserved; the run currently inherits conversation.input_params.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/conversations/{id}/turns/{turn_id}/resume
API keyorBearer JWT

Resume Conversation Turn

Resume a paused conversation turn with user input. Use when the user responds to a pending-input prompt on a chat turn (outline approval, clarification, continue/finish). The input payload must match the turn's pending_input_schema. Validates that the turn belongs to the claimed conversation before writing.

Parameters

idpathstring <uuid>required

Conversation UUID.

turn_idpathstring <uuid>required

Turn (agent run) UUID.

Request body

application/jsonrequired

inputobjectrequired

Resume payload matching the turns persisted pending_input_schema.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
delete/api/platform/v1/conversations/{id}/turns/{turn_id}
API keyorBearer JWT

Cancel Conversation Turn

Cancel an in-flight conversation turn. Use when the user hits a stop button on a running chat turn, or wants to abandon a turn that has gone sideways. Cascades to any sub-agents spawned from this turn — every live descendant is cancelled atomically. Already-completed turns cannot be canceled. The worker stops at the next iteration boundary after observing the status change.

Parameters

idpathstring <uuid>required

Conversation UUID.

turn_idpathstring <uuid>required

Turn (agent run) UUID.

reasonquerystringoptional

Optional operator note describing why the turn was canceled.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional

Assets

Artifacts - unified output storage with version history and hierarchy.

post/api/platform/v1/metrics/{id}/evaluate
API keyorBearer JWT

Evaluate Metric

Use when you need a live numeric value from a registered metric artifact. Pass metric_id; returns the freshly computed value with format and cache hit indicator. The metric's content_json holds the query spec; the evaluator runs that query against platform_artifacts (promoted columns for indexed filtering, JSONB containment otherwise) and respects the metric's refresh_policy for caching (on_read, cache_5m, cache_1h, invalidate_on_event).

Parameters

idpathstringrequired

Request body

application/jsonrequired

metric_idstring <uuid>required

UUID of the metric artifact to evaluate.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/pages
API keyorBearer JWT

List Pages

Read the workspace pages the caller is entitled to, newest-updated first, after dropping any the caller lacks read access to. Read when rendering the pages library sidebar or letting an agent discover the saved data views it can open. Excludes archived and deleted pages; ungated pages are always shown and admins see the full set.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/pages
API keyorBearer JWT

Author a Page

Author a new workspace page from a catalog spec: a designed UI of catalog components (plus an optional Custom sandbox node) mixing narrative, layout, and live tenant data declared as named queries the host runs server-side. Use when a user or agent wants to publish a fresh data view, dashboard, or report surface. The spec is verified before it persists; a broken draft is rejected with a per-stage verdict, and a Custom node needs the pages:admin scope.

Request body

application/jsonrequired

namestringrequired

Human-readable page name. Seeds the slug when omitted.

summarystringoptional

Optional one-line description of the page.

categorystringoptional

Optional grouping label for the library view.

tagsarray of stringoptional

Optional free-form tags for filtering / search.

specobjectrequired

The page body: a json-render-style spec tree (catalog component nodes + optional Custom sandbox node). Verified and persisted; bindings may only reference declared queries.

declared_queriesarray of objectoptional

Named data bindings the page may invoke at render time (host-run, scoped).

slugstringoptional

Optional explicit URL slug; auto-derived from name when omitted.

Responses

201Created
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/pages/{id}
API keyorBearer JWT

Get Page By Id

Fetch one page definition by its id - the TSX source, compiled module, declared data bindings, and last verification verdict - scoped to the workspace and gated by the page entitlement. Read when opening a page in the editor or inspecting what a saved view is built from. Returns null for a missing or cross-tenant id; live data is fetched separately at render time.

Parameters

idpathstringrequired

UUID of the page to read.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
patch/api/platform/v1/pages/{id}
API keyorBearer JWT

Edit a Page

Revise an existing page in place: swap its catalog spec, declared queries, or metadata. Use when a user or agent wants to change what a published page renders. The replacement spec is verified before it lands; a broken revision is rejected with a per-stage verdict, a Custom node needs the pages:admin scope, and a clean one bumps the version and snapshots history. Requires write entitlement on the target page.

Parameters

idpathstringrequired

UUID of the page to revise.

Request body

application/jsonrequired

namestringrequired

Human-readable page name.

summarystringoptional

Optional one-line description of the page.

categorystringoptional

Optional grouping label for the library view.

tagsarray of stringoptional

Optional free-form tags for filtering / search.

specobjectrequired

The replacement page body: a json-render-style spec tree (catalog component nodes + optional Custom sandbox node). Verified and persisted; bindings may only reference declared queries.

declared_queriesarray of objectoptional

Named data bindings the page may invoke at render time (host-run, scoped).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
delete/api/platform/v1/pages/{id}
API keyorBearer JWT

Archive a Page

Soft-archive a page so it leaves the default library list but stays recoverable, a reversible step distinct from a permanent removal. Use when a user wants to retire a page from view without destroying it. Requires write entitlement on the target page; returns a 404 when the page is missing or already gone.

Parameters

idpathstringrequired

UUID of the page to archive.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/pages/validate
API keyorBearer JWT

Dry-run Page Verification

Check a page spec through the catalog, prop, binding, and Custom-node code stages without saving it, returning every problem found in one verdict. Use when an editor or agent wants to see whether a draft would pass before committing a create or update. Always succeeds with the verdict as the body; a failing dry-run reports stage errors rather than throwing.

Request body

application/jsonrequired

namestringoptional

Optional name (only affects an auto-derived slug).

summarystringoptional

Optional one-line description of the page.

categorystringoptional

Optional grouping label for the library view.

tagsarray of stringoptional

Optional free-form tags for filtering / search.

specobjectrequired

The page body spec tree (catalog nodes + optional Custom node) to verify.

declared_queriesarray of objectoptional

Named data bindings to structurally validate against the workspace.

slugstringoptional

Optional explicit URL slug.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/pages/{id}/render
API keyorBearer JWT

Run a Page

Execute a page's declared data bindings live for the current viewer and return the rows the host hydrates the component with, each query tenant- and access-scoped through the shared engine. Use when the sandbox needs to fill a page with real data, or to preview what a viewer would see. Reads nothing persisted; a broken binding returns its error inline rather than failing the run.

Parameters

idpathstringrequired

UUID of the page to run.

Request body

application/json

paramsobjectoptional

Bound values for the page's declared named query params.

default {}

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/pages/{id}/hard-delete
API keyorBearer JWT

Permanently Delete a Page

Permanently remove a page so it disappears from every view, the destructive counterpart to a reversible archive. Use when a user explicitly wants a page gone for good, ideally after a confirmation step. Requires the dedicated delete scope plus write entitlement on the page; returns a 404 when the page is missing or already deleted.

Parameters

idpathstringrequired

UUID of the page to permanently delete.

Request body

application/json

object

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/pages/templates
API keyorBearer JWT

List Page Templates

Read the catalog of Amdahl-shipped page templates - ready-to-adapt starting points (pipeline health, voice of customer, competitive battlecard) an author turns into a real page. Read when picking a starting point before authoring a page, so the agent adapts a vetted template instead of building a spec from scratch. Lean list (slug, name, intent); fetch the full spec via page_template://<slug>.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/pages/templates/{slug}
API keyorBearer JWT

Get Page Template

Fetch one Amdahl-shipped page template in full - its catalog spec, declared queries, and intent - by slug or deterministic UUID. Fetch when an author has chosen a template and needs the complete spec to adapt and author a real page from. Templates are code-defined, so the read is the same for every workspace; returns null when the slug or id matches no template.

Parameters

slugpathstringrequired

Slug or deterministic UUID of the template to read.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/pages/{id}/embed-token
API keyorBearer JWT

Mint a Page Embed Link

Mint a short-lived, token-scoped embed link for one page so it can be iframed on an external site. Use when a user or agent wants a shareable live embed of a page. The embed runs the page data under a scope CLAMPED to the caller's own access (it can never show more than the caller can see), and fails closed. audience 'self' scopes to the caller; 'public' / 'workspace' need an admin caller.

Parameters

idpathstringrequired

UUID of the page to mint an embed link for.

Request body

application/json

audiencestringoptional

Who the embed is for. 'self' (default) scopes to exactly the caller's own data slice; 'public' / 'workspace' produce an unscoped (within-tenant) embed and REQUIRE an admin caller.

selfworkspacepublic
default "self"
rulesarray of objectoptional

Optional explicit data-scope allow-rules for the embed (same grammar as access-policy rules). Clamped to the caller's own rules — anything the caller lacks is dropped.

ttl_secondsnumberoptional

Optional token lifetime in seconds (default 3600, max 2592000 = 30 days).

originsarray of stringoptional

Optional allowed framing origins (CSP frame-ancestors). Empty + public audience ⇒ any origin.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional

Team

Team management - members, roles, and invites.

post/api/platform/v1/notifications/email-member
API keyorBearer JWT

Email Workspace Member

Send an email to one or more teammates in the current workspace. Use when an automation or agent needs to notify specific workspace members - a digest, an alert, a hand-off, a heads-up after a long-running job. Recipients must already be members; external or free-text addresses are rejected. Sends are capped per workspace and idempotent on an optional key.

Request body

application/jsonrequired

recipient_emailsarray of string <email>required

Recipient email addresses. Each MUST belong to a current member of this workspace; a non-member address fails the whole call.

subjectstringrequired

Email subject line.

min length 1max length 200
bodystringrequired

Plain-text email body. Rendered into a branded HTML email plus a plain-text fallback; line breaks are preserved.

min length 1
cc_emailsarray of string <email>optional

Optional additional recipients. Also member-validated and merged with recipient_emails.

idempotency_keystringoptional

Optional dedupe key. A repeat call with the same key returns the prior result without resending. When omitted on a blueprint run, a key is derived from the run + subject + recipients.

Responses

200OK
dataobjectrequired
successbooleanrequired
sentarray of objectoptional
failedarray of objectoptional
skipped_duplicatebooleanoptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/notifications/sends
API keyorBearer JWT

List Member Email Sends

Read the history of emails sent to workspace members (newest first), plus a cap-aware summary of how many sends went out in the trailing hour against the per-workspace hourly and per-run caps. Read when reviewing what notifications already fired, or before an automated email step to confirm there is room left under the rate limit. Optional recipient / run / since filters narrow the list.

Parameters

limitqueryintegeroptional

Max rows to return (default 50, capped at 200).

recipient_emailquerystringoptional

Narrow to one recipient email address (exact match).

blueprint_run_idquerystringoptional

Narrow to one blueprint run's sends.

sincequerystringoptional

ISO-8601 lower bound; only sends recorded at or after this instant.

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/notifications/recipients
API keyorBearer JWT

List Notification Recipients

Read the current workspace members you are allowed to email, as a recipient picker for sending a member notification (email + display name + user id per member). Read when you need to choose who to email before calling notifications.email_member, which only accepts current members. This is a narrow addressable-recipient list, not a full team roster. Optional limit caps the result.

Parameters

limitqueryintegeroptional

Max recipients to return (default 200, capped at 500).

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional

Observability

Audit logs and execution telemetry.

get/api/platform/v1/operations
API keyorBearer JWT

List Operations

List every operation registered in the unified operation registry, grouped by namespace (data, artifacts, context, conversations, etc.). Read when authoring an agent_blueprint or rendering a tool picker so the catalog stays registry-driven (167+ operations) instead of hardcoded. Optional filters: ?namespace, ?kind=read|write|compute|workflow, ?include_admin=false (default false).

Parameters

namespacequerystringoptional
kindquerystringoptional
include_adminquerystringoptional

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/operations/{id}
API keyorBearer JWT

Get Operation

Fetch metadata for a single operation by its dotted id (e.g. data.cluster_search, artifacts.create, context.summary). Read when a tool picker needs to render the typed input form for a specific op or when an agent_blueprint llm step references an op id. Returns the lean projection (id, namespace, name, description, kind, sensitivity, required_scopes, input_schema). Returns null when the id is not registered.

Parameters

idpathstringrequired

Responses

200OK
dataanyoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
404Not found
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional