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
/api/platform/v1/sessionsList sessions
Responses
idstringrequiredcreated_atstringrequiredupdated_atstringrequired/api/platform/v1/sessionsCreate a new session
Creates a substrate session for accumulating data across multiple API calls.
Responses
idstringrequiredbusiness_idstring <uuid>requireduser_idstring <uuid>requiredcreated_atstringrequiredupdated_atstringrequirederrorstringrequired/api/platform/v1/sessions/{id}Delete a session
Parameters
idpathstringrequiredResponses
deletedbooleanrequirederrorstringrequiredData
Data exploration, SQL queries, and search
/api/platform/v1/data/exploreExplore available data
Discover schema columns, sample values, cluster availability, and KB inventory.
Request body
application/json
scopestringoptionalallschemaclustersknowledgeinclude_samplesbooleanoptionalResponses
/api/platform/v1/data/queryExecute SQL query
Run a SQL query against the BigQuery interactions table.
Request body
application/json
sqlstringrequiredlimitintegeroptionalResponses
rowCountnumberrequiredtruncatedbooleanrequiredrowsarray of objectrequirederrorstringrequired/api/platform/v1/data/searchSearch knowledge base
Hybrid semantic + keyword search over knowledge base documents.
Request body
application/json
querystringrequiredmodestringoptionalhybridsemantickeywordlimitintegeroptionalsource_typestringoptionalResponses
resultCountnumberrequiredresultsarray of objectrequiredarray items
idstringrequiredtitlestring | nullrequiredoriginstring | nullrequiredsnippetsarray of stringrequired/api/platform/v1/data/clusters/searchSearch conversation clusters
Semantic search over pre-computed ML conversation clusters.
Request body
application/json
querystringrequiredmatch_thresholdnumberoptionallimitintegeroptionalResponses
/api/platform/v1/data/clusters/{cluster_id}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 | stringrequiredThe cluster_id returned by `data.cluster_search` (or any prior cluster listing). Integer on V1; opaque string on V2 — pass it back verbatim.
limitqueryintegeroptionalOptional cap on related content. Reserved for future use; service applies its own caps today.
as_ofquerystringoptionalOptional 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/data/askAsk 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
questionstringrequiredPlain-English question describing what the user wants to know. Example: "How many objection-tagged utterances came from Finance Managers in the last 30 days?"
priorTurnsarray of objectoptionalOptional 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
questionstringrequiredsqlstringrequiredexplanationstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge_base/documentsUpload 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
filenamestringrequiredOriginal filename with extension (e.g. "proposal.pdf", "notes.md"). Required.
file_contentstringoptionalBase64-encoded raw file bytes. Use this for PDF, DOCX, PPTX, and similar binary formats that need Marker conversion. Max 50 MB decoded.
markdown_contentstringoptionalPlain markdown body. Use this when you already have markdown and want to skip Marker. The document is chunked and embedded synchronously.
titlestringoptionalOptional display title. Defaults to the filename when omitted.
descriptionstringoptionalOptional description used in UI listings.
document_typestringoptionalOptional document type tag (e.g. "proposal", "contract", "meeting-notes").
agent_usage_instructionsstringoptionalOptional 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_daysintegeroptionalOptional freshness-review cadence in days. Omit (or null) for a doc that never goes stale; otherwise the console flags the doc for review every N days.
tagsarray of stringoptionalOptional free-form tags. Stored as-is on the document row if present.
auto_convertbooleanoptionalWhen true (default), trigger Marker conversion + embedding. Set false to stage the raw file without kicking off the pipeline.
document_group_idstringoptionalOptional 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_labelstringoptionalOptional human-readable label for the version (e.g. "Jun 2026").
version_as_ofstringoptionalOptional ISO-8601 instant the version’s content reflects (e.g. a report date).
version_sourcestringoptionalProvenance of the version. Defaults to "manual". "blueprint_run" marks an automated append (it still lands proposed — same human gate).
blueprint_runmanualsource_run_idstringoptionalOptional id of the blueprint run that produced this version (audit only; not an FK).
version_changesarray of objectoptionalOptional 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_anchorstringrequiredThe exact heading text the change lands under, or a "Parent > Child" path for a nested section.
what_changedstringrequiredShort plain-English description of the edit to this section.
whystringrequiredThe reason / evidence motivating the edit.
evidence_refsarray of stringrequiredSource tags you consulted (e.g. document or call ids).
base_version_idstringoptionalLevel 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 objectoptionalLevel 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
opstringrequiredreplacedelete_blockinsertblock_idstringoptionalanchorstringoptionalheading_pathstringoptionalcontent_hashstringoptionalcontentstringoptionalrationalestringoptionalevidence_refsarray of stringoptionalasyncbooleanoptionalPresent 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.
Responses
dataobjectrequiredidstringrequiredstatusstringrequiredchunk_countintegerrequiredembedding_statusstringrequireddocument_group_idstringoptionalversion_numberintegeroptionalversion_statusstringoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge_base/documents/{id}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>requiredUUID of the document to patch.
Request body
application/json
descriptionstring | nulloptionalShort human-readable description shown in the KB UI. Pass null to clear the existing value.
document_typestring | nulloptionalFree-form category tag (e.g. "proposal", "sales_call", "icp_research"). Pass null to clear.
filenamestringoptionalOriginal filename including extension. Stored as `original_filename` on the row.
user_notesstring | nulloptionalCaller-authored notes about the document. Pass null to clear.
is_archivedbooleanoptionalSoft-archive flag. Archived docs are excluded from default list responses; pass false to unarchive.
visibilitystringoptionalToggle tenant-only ("private") vs anonymous-readable ("public") reads via /api/public/kb/:id. Mirrors platform_artifacts.visibility.
privatepublicagent_usage_instructionsstring | nulloptionalGuidance on HOW agents should use this doc (distinct from description, which says WHAT it is). Pass null to clear.
review_interval_daysinteger | nulloptionalFreshness-review cadence in days. Pass null to clear (the doc then never goes stale).
last_reviewed_atstring <date-time>optionalISO-8601 timestamp the doc was last reviewed. The console "mark reviewed" action sets this to now, resetting the freshness clock.
Responses
dataobjectrequiredUpdated knowledge_bank_documents row.
idstringoptionaloriginal_filenamestringoptionaldescriptionstring | nulloptionaldocument_typestring | nulloptionaluser_notesstring | nulloptionalis_archivedbooleanoptionalvisibilitystringoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge_base/documents/{id}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>requiredUUID of the document.
hard_deletequerybooleanoptionalWhen true, permanently remove storage files, chunks, and the row. Requires knowledge_base:delete scope.
Responses
dataobjectrequiredsuccessbooleanrequiredidstringrequiredmodestringrequiredarchivedhard_deletederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge_base/searchSearch 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
querystringrequiredNatural-language search query.
modestringoptionalRetrieval mode. hybrid merges pgvector similarity and FTS via RRF (default). semantic uses pgvector only; keyword uses FTS only.
hybridsemantickeywordlimitintegeroptionalMax chunks to return. 1-100, default 20.
document_idsarray of stringoptionalOptional list of document source_id UUIDs to restrict the search to.
source_typesarray of stringoptionalOptional list of source types to include. Defaults to ["knowledge_bank"].
Responses
dataobjectrequiredresultsarray of anyrequiredcountintegerrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge_base/chatChat 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
querystringrequiredThe user question to answer against the knowledge bank.
document_idsarray of stringoptionalOptional scope. Pass one id for single-document chat; pass several to restrict cross-document retrieval to those documents.
include_sourcesbooleanoptionalWhen true (default), return the retrieved source chunks alongside the answer.
max_turnsintegeroptionalInformational cap on retrieval/generation iterations. The underlying service runs a single RAG turn today; this field is reserved for future agentic expansion.
Responses
dataobjectrequiredanswerstringrequiredsourcesarray of anyrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/starStar 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>requiredUUID of the KB document.
Request body
application/json
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/unstarUnstar 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>requiredUUID of the KB document.
Request body
application/json
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/commentsList 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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/commentsCreate 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
idpathstringrequiredThe version (knowledge_bank_documents id).
Request body
application/jsonrequired
bodystringrequiredThe comment text.
block_idstringoptionalOptional block id the thread anchors to (from the diff ops / block anchors).
thread_root_idstringoptionalOptional root comment id when replying; omit to start a new thread.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/comments/{comment_id}/resolveResolve 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
idpathstringrequiredThe version the thread lives on.
comment_idpathstringrequiredThe comment (or its thread root) to resolve.
Request body
application/json
resolvedbooleanoptionaltrue to resolve (default), false to reopen.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/external-search/executeExternal 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
actionstringrequiredComposite picker. See the description for action grammar.
searchenrich_companyenrich_personenrich_topicquerystringoptionalFree-text query (search action; reserved for the unified search shape).
domainstringoptionalCompany domain (e.g. stripe.com) for enrich_company. The underlying scrapers resolve the canonical platform URL via web search (cached 90d).
namestringoptionalName. For enrich_person this is the person name; for enrich_company this is the company name.
emailstringoptionalEmail for enrich_person. Server derives both name (from local-part) and company (from domain).
linkedin_urlstringoptionalLinkedIn URL for enrich_person.
twitter_handlestringoptionalTwitter handle for enrich_person.
topicstringoptionalTopic for enrich_topic.
sincestringoptionalISO-8601 lower bound for enrich_topic.
personasarray of stringoptionalPersona labels for enrich_topic synthesis.
sourcesarray of stringoptionalSource mix for enrich_topic. Default [web, reddit, twitter].
max_resultsintegeroptionalResult cap for free-text web / news fan-outs inside the composites.
max_itemsintegeroptionalItem cap for twitter / reddit fan-outs inside the composites.
include_domainsarray of stringoptionalWeb/news include allowlist applied during free-text fan-outs.
exclude_domainsarray of stringoptionalWeb/news exclude list applied during free-text fan-outs.
force_refreshbooleanoptionalBypass the brief cache check and run a fresh fan-out + synthesis regardless of TTL. Default false.
skip_persistbooleanoptionalSkip the brief write entirely. Inline result is still returned. Default false.
recency_biasstringoptionalFor action=search: weight news vs general web in synthesis. "auto" lets synthesis decide; "news" leans recent editorial; "general" leans evergreen pages.
autonewsgeneralskip_query_enrichmentbooleanoptionalFor action=search: opt out of the Haiku query-enrichment rewrite. Default false.
include_internalbooleanoptionalFor action=search: include the tenant interaction corpus pull. Default true. Set false for a market-only brief.
include_socialbooleanoptionalFor action=search: include the reddit + twitter fan-out. Default true. Set false to skip social signals.
modestringoptionalOutput mode. "brief" (default) runs synthesis and returns the structured fusion brief. "evidence" skips synthesis and returns raw post-rerank items.
briefevidenceResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connections/catalogList 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
kindquerystringoptionalFilter to one ingestion stack. first_party (amdahl-data pullers) is the only stack today; use category=social to filter the social UI grouping.
categoryquerystringoptionalFilter to one UI category.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connectionsList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connectionsConnect 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_typestringrequiredCatalog connector type to connect (e.g. hubspot, fathom, twitter).
namestringoptionalOptional display label for this connection instance.
scopestringoptionalOwnership: business (workspace-wide) or personal. Defaults from the catalog.
businesspersonalapi_keystringoptionalFor api_key connectors: the API key / token to store (encrypted).
account_handlestringoptionalFor social (handle) connectors: the resolved bare account handle.
external_account_idstringoptionalFor social (handle) connectors: the provider's stable account id.
display_namestringoptionalFor social (handle) connectors: display name snapshot.
avatar_urlstringoptionalFor social (handle) connectors: avatar image URL snapshot.
followersintegeroptionalFor social (handle) connectors: follower count snapshot.
return_tostringoptionalFor oauth connectors: console URL to redirect back to after the handshake (first-party origins only).
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connections/{id}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
idpathstringrequiredUUID of the connection to read.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connections/{id}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
idpathstringrequiredUUID of the connection to update.
Request body
application/json
namestringoptionalNew 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 | nulloptionalThe workspace member (auth user id) this personal connection belongs to. Pass null to clear the owner. Only valid for personal connectors (Gmail, Outlook).
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connections/{id}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
idpathstringrequiredUUID of the connection to disconnect.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connections/{id}/statusGet 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
idpathstringrequiredUUID of the connection to read the sync state for.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connections/{id}/runsList 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
idpathstringrequiredUUID of the connection to list sync runs for.
limitqueryintegeroptionalMax runs to return, newest first (default 25, capped at 100).
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/connections/{id}/reconnectReconnect 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
idpathstringrequiredUUID of the connection to reconnect.
Request body
application/json
api_keystringoptionalFor api_key connectors: the replacement API key / token to store (encrypted) on the existing source. Ignored for oauth and social-handle connectors.
return_tostringoptionalFor oauth connectors: console URL to redirect back to after the re-handshake (first-party origins only).
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notion-sync/{id}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
idpathstringrequiredThe outbound Notion sync connection id.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notion-sync/{id}/statusGet 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
idpathstringrequiredThe outbound Notion sync connection id.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notion-sync/{id}/sendsList 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
idpathstringrequiredThe outbound Notion sync connection id.
limitquerynumberoptionalMax rows (1-200, default 50).
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notion-sync/{id}/pagesList 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
idpathstringrequiredThe outbound Notion sync connection id.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notion-sync/{id}/configureConfigure 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
idpathstringrequiredThe outbound Notion sync connection id.
Request body
application/jsonrequired
parent_page_idstringrequiredThe Notion page the synced database is created under.
database_titlestringoptionalOptional title for the synced database.
enabledbooleanoptionalWhether the sync is active (default true).
version_policystringoptionalWhich versions to mirror.
current_onlyall_promotedon_kb_deletestringoptionalWhat to do with the Notion page when a KB doc is removed.
archiveleavedrift_policystringoptionalHow to handle a human-edited Notion page.
preserveoverwriteincludeobjectoptionalOptional scope filters.
document_typesarray of stringoptionalstarred_onlybooleanoptionalgroup_idsarray of stringoptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notion-sync/{id}/backfillBackfill 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
idpathstringrequiredThe outbound Notion sync connection id.
Request body
application/json
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notion-sync/{id}/unsyncUnsync 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
idpathstringrequiredThe outbound Notion sync connection id.
Request body
application/json
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-baseList 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
statusquerystringoptionalembedding_statusquerystringoptionaldocument_typequerystringoptionalsearchquerystringoptionalis_archivedquerystringoptionalinclude_versionsquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/versionsList 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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/contentGet 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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/accessGet 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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/knowledge-base/{id}/diffDiff 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
idpathstringrequiredbasequerystringoptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalContext
Business context, substrate intelligence, and Q&A
/api/platform/v1/context/summaryGet business summary
Company profile, authors, and writing sample counts.
Responses
/api/platform/v1/context/substrateGet substrate status
Current session substrate counts and top items. Requires X-Session-Id header.
Responses
errorstringrequired/api/platform/v1/context/substrate/queryQuery substrate intelligence
Intent-driven smart query over accumulated substrate data. Requires X-Session-Id header.
Request body
application/json
intentSubstrateIntentrequiredanswer_questionfind_metricsresearch_overviewsummarize_researchevidence_for_writingenrich_with_quotesassess_viabilityquerystringoptionallimitintegeroptionalsource_filterarray of stringoptionalResponses
errorstringrequired/api/platform/v1/context/askAsk a question
Agent-powered synthesized answer over session data + web search. 10-15s latency. Requires X-Session-Id header.
Request body
application/json
querystringrequiredResponses
answerstringrequiredsubstrateStatsobjectrequiredevidenceSearchednumberrequiredclustersSearchednumberrequiredmetricsAvailablenumberrequirederrorstringrequired/api/platform/v1/context/rememberPush an observation
Add external evidence to the session substrate. Requires X-Session-Id header.
Request body
application/json
textstringrequiredsourcestringoptionalwebkgreference_docbigqueryclustercompany_namestringoptionalResponses
evidenceIdstringrequiredtotalEvidenceCountnumberrequiredpersistedbooleanrequiredWhether the substrate was durably persisted to DB
/api/platform/v1/context/entries/writeWrite 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
actionstringrequiredWhich mutation to perform.
createupdatedeleteidstringoptionalEntry UUID. Required for update / delete.
typestringoptionalDotted type identifier (e.g. "brand.colors"). Required for create.
titlestringoptionalHuman-readable title. Required for create; optional for update.
contentobjectoptionalArbitrary structured content. Required for create; optional for update.
sourcestringoptionalOrigin of the entry. Defaults to manual on create.
manualauto_detectedimportedResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/context/review-kitContext 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_idstringoptionalOptional 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalWebhooks
Event webhook registration and delivery
/api/platform/v1/webhooksList webhooks
Responses
/api/platform/v1/webhooksRegister a webhook
Register a URL to receive POST callbacks on events. Returns the webhook secret for HMAC verification.
Request body
application/json
urlstring <uri>requiredeventsarray of WebhookEventrequiredResponses
idstring <uuid>requiredbusiness_idstring <uuid>requireduser_idstring <uuid>requiredurlstring <uri>requiredeventsarray of WebhookEventrequiredactivebooleanrequiredcreated_atstringrequiredsecretstringoptionalOnly returned on creation
errorstringrequired/api/platform/v1/webhooks/{id}Delete a webhook
Responses
deletedbooleanrequirederrorstringrequired/api/platform/v1/webhooks/{id}/deliveriesGet delivery history
Returns up to 50 recent delivery attempts for a webhook.
Responses
idstring <uuid>requiredwebhook_idstring <uuid>requiredeventstringrequiredpayloadobjectrequiredstatus_codenumber | nullrequiredattemptintegerrequirederrorstring | nullrequiredcreated_atstringrequiredPlatform
Platform-level resources - sessions, webhooks, and plumbing.
/api/platform/v1/resourcesRead 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
uriquerystringrequiredThe 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/promptsList 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
schemequerystringoptionalOptional namespace prefix. Names look like `<scheme>/<leaf>` (briefing/account). Pass scheme="briefing" to return only briefing-family prompts.
Responses
dataobjectrequiredpromptsarray of objectrequiredPrompt catalog entries visible to the caller after scope filtering.
array items
idstringrequirednamestringrequireddescriptionstringrequiredschemestringrequiredargsSchemaobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/prompts/useUse 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
namestringrequiredGlobally unique prompt slug returned by list_prompts (e.g. briefing/account).
argumentsobjectoptionalOptional arguments for the prompt, validated against the prompt's declared argsSchema. Omit for prompts that take no arguments.
Responses
dataobjectrequiredmessagesarray of objectrequiredThe resolver's messages (role + content). Embed in your reasoning.
array items
rolestringrequireduserassistantcontentstringrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/webhooks/writeWrite 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
actionstringrequiredcreateupdatedeleteidstring <uuid>optionalurlstring <uri>optionaleventsarray of stringoptionalsecretstringoptionalOptional HMAC secret for create. Must be >= 16 chars. Stored encrypted.
descriptionstringoptionalactivebooleanoptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/webhooks/{id}/testTest 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>requiredUUID of the webhook to fire.
Request body
application/json
eventstringoptionalEvent name for the test payload. Defaults to "test.ping".
payloadobjectoptionalOptional payload body. Defaults to { test: true, timestamp: <iso-now> } when omitted.
Responses
dataobjectrequireddelivery_idstring | nullrequiredstatus_codeinteger | nullrequiredresponse_bodystring | nullrequiredduration_msintegerrequiredsuccessbooleanrequirederrorstring | nullrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalWorkflows
Workflow orchestration endpoints.
/api/platform/v1/knowledge_base/documents/{id}/make-livingMake 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>requiredUUID of the knowledge base document to make living.
Request body
application/json
schedule_cronstringoptionalOptional 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_timezonestringoptionalOptional IANA timezone for the schedule (e.g. "America/New_York"). Defaults to UTC. Ignored when schedule_cron is omitted.
Responses
dataobjectrequiredblueprint_idstringrequiredblueprint_slugstringrequiredschedule_idstring | nullrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agents/runStart 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_idstringrequiredRegistered agent profile id (e.g. content_writer).
taskstringrequiredNatural-language task description used as the initial user message.
input_paramsobjectoptionalStructured task parameters consumed by the profile (channel, content_type, project_id, etc.).
asyncbooleanoptionalIf true (default), enqueue and return immediately. If false, wait up to 60s for completion.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agents/{session_id}/resumeResume 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>requiredRequest body
application/jsonrequired
inputobjectrequiredThe user's resume payload. Must match the run's persisted pending_input_schema.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agents/{session_id}/cancelCancel 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>requiredRequest body
application/json
reasonstringoptionalOptional operator note describing why the run was canceled.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/forkFork 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
sourcestringrequiredSlug or UUID of the source blueprint. Resolves against starters first, then tenant DB.
new_slugstringoptionalOptional slug for the fork (3-60 chars, /^[a-z0-9-]+$/). Auto-generated as `<source>-fork` when omitted.
new_namestringoptionalOptional display name for the fork. Defaults to `Copy of <source name>`.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}/runRun 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
idpathstringrequiredStarter slug / UUID or tenant agent_blueprint artifact id to run.
Request body
application/json
inputsobjectoptionalResolved input values keyed by the blueprint's declared input names. Required inputs without defaults must be supplied.
as_ofstringoptionalOptional ISO-8601 date for a backtest. When set, the run is forced read-only and reads tenant data as of that date.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}/schedulesCreate 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
idpathstringrequiredStarter slug / UUID or tenant agent_blueprint artifact id to schedule.
Request body
application/jsonrequired
cronstringrequiredCron expression (5- or 6-field, e.g. "0 9 * * 1" for 9am every Monday). Validated before the schedule is stored.
timezonestringoptionalIANA timezone the cron is evaluated in (e.g. "America/New_York"). Defaults to UTC.
inputsobjectoptionalResolved input values keyed by the blueprint's declared input names. Declared defaults fill the rest at fire time.
namestringoptionalOptional human label for the schedule.
enabledbooleanoptionalWhether the schedule is active. Defaults to true.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-schedulesList 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_idquerystringoptionalenabledquerybooleanoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-schedules/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-schedules/{id}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
idpathstringrequiredSchedule id to update.
Request body
application/json
cronstringoptionalNew cron expression (validated).
timezonestringoptionalNew IANA timezone.
inputsobjectoptionalNew input values keyed by the blueprint's input names.
namestring | nulloptionalNew human label (or null to clear).
enabledbooleanoptionalEnable (true) or disable (false) the schedule.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-schedules/{id}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
idpathstringrequiredSchedule id to delete.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}/backtest/previewPreview 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
idpathstringrequiredStarter slug / UUID or tenant agent_blueprint artifact id.
Request body
application/jsonrequired
startstringrequiredISO-8601 date for the oldest end of the range (inclusive).
endstringrequiredISO-8601 date for the newest end of the range (inclusive).
cadencestringrequiredSpacing of the as-of points.
monthlyweeklyResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}/backtestBacktest 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
idpathstringrequiredStarter slug / UUID or tenant agent_blueprint artifact id.
Request body
application/jsonrequired
startstringrequiredISO-8601 date for the oldest end of the range (inclusive).
endstringrequiredISO-8601 date for the newest end of the range (inclusive).
cadencestringrequiredSpacing of the as-of points.
monthlyweeklycumulativebooleanoptionalWhen true, runs the sweep sequentially so each run can seed off the prior run output. Default false (independent, parallel).
inputsobjectoptionalInputs forwarded to every child run, keyed by the blueprint's declared input names.
acknowledge_largebooleanoptionalConfirms a sweep whose run count is above the soft threshold. Required when preview reports requires_acknowledge.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprintsList 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
statusquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprintsCreate 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
contentobjectrequiredThe v1 agent_blueprint DSL body. Read `step_kind://list` for the grammar.
titlestringoptionaldescriptionstringoptionalstatusstringoptionaltagsarray of stringoptionalmetadataobjectoptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}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
idpathstringrequiredArtifact UUID of the tenant blueprint.
Request body
application/json
contentobjectoptionalFull replacement v1 DSL body. Omit to patch surface fields only.
titlestringoptionaldescriptionstringoptionalstatusstringoptionaltagsarray of stringoptionalmetadataobjectoptionalchange_summarystringoptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}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
idpathstringrequiredArtifact UUID of the tenant blueprint.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}/unarchiveUnarchive 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
idpathstringrequiredArtifact UUID of the archived tenant blueprint.
Request body
application/json
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/validateValidate 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
contentobjectrequiredCandidate v1 agent_blueprint DSL body to validate.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-blueprints/{id}/promotePromote 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
idpathstringrequiredStarter slug / UUID or tenant agent_blueprint artifact id to set the canonical for.
Request body
application/json
output_idstringoptionalThe blueprint_outputs row id (registered version) to promote.
kb_doc_idstringoptionalA knowledge_bank_documents id to promote directly (registered as a candidate first if needed).
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/external-search-jobs/{jobId}/streamExternal 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
jobIdpathstringrequiredThe external_search job id (UUID) returned by external_search.execute when called with subscribe_to_events=true.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-runsList 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
statusquerystringoptionalprofile_idquerystringoptionaluser_idquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-runs/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agent-profilesList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/step-kindsList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/step-kinds/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/trigger-kindsList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/trigger-kinds/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-runsList 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_idquerystringoptionalstatusquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-runs/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-backtestsList 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_idquerystringoptionalstatusquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-backtests/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-outputsList 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_idquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-outputs/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-outputs/{id}/diffDiff 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
idpathstringrequiredbasequerystringoptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/blueprint-outputs/{id}/commentsList 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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/prompt-fragmentsList 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
schemequerystringoptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/prompt-fragments/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalConversations
/api/platform/v1/conversationsList 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
statusquerystringoptionalprofile_idquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/conversationsCreate 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_idstringrequiredRegistered agent profile id (e.g. copilot).
titlestringoptionalOptional initial title. If omitted, may be auto-generated post-first-turn.
input_paramsobjectoptionalStructured creation-time params forwarded into every run.
first_turn_messagestringoptionalOptional first user turn. When supplied, a run is enqueued immediately.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/conversations/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/conversations/{id}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>requiredConversation UUID.
Request body
application/json
titlestringoptionalNew title. Non-empty after trim.
statusstringoptionalNew lifecycle status.
activearchivedResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/conversations/{id}/turnsAppend 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>requiredConversation UUID.
Request body
application/jsonrequired
messagestringrequiredUser message that kicks off the new turn.
input_paramsobjectoptionalStructured per-turn params. Reserved; the run currently inherits conversation.input_params.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/conversations/{id}/turns/{turn_id}/resumeResume 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>requiredConversation UUID.
turn_idpathstring <uuid>requiredTurn (agent run) UUID.
Request body
application/jsonrequired
inputobjectrequiredResume payload matching the turns persisted pending_input_schema.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/conversations/{id}/turns/{turn_id}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>requiredConversation UUID.
turn_idpathstring <uuid>requiredTurn (agent run) UUID.
reasonquerystringoptionalOptional operator note describing why the turn was canceled.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalAssets
Artifacts - unified output storage with version history and hierarchy.
/api/platform/v1/metrics/{id}/evaluateEvaluate 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
idpathstringrequiredRequest body
application/jsonrequired
metric_idstring <uuid>requiredUUID of the metric artifact to evaluate.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pagesList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pagesAuthor 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
namestringrequiredHuman-readable page name. Seeds the slug when omitted.
summarystringoptionalOptional one-line description of the page.
categorystringoptionalOptional grouping label for the library view.
tagsarray of stringoptionalOptional free-form tags for filtering / search.
specobjectrequiredThe 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 objectoptionalNamed data bindings the page may invoke at render time (host-run, scoped).
slugstringoptionalOptional explicit URL slug; auto-derived from name when omitted.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/{id}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
idpathstringrequiredUUID of the page to read.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/{id}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
idpathstringrequiredUUID of the page to revise.
Request body
application/jsonrequired
namestringrequiredHuman-readable page name.
summarystringoptionalOptional one-line description of the page.
categorystringoptionalOptional grouping label for the library view.
tagsarray of stringoptionalOptional free-form tags for filtering / search.
specobjectrequiredThe 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 objectoptionalNamed data bindings the page may invoke at render time (host-run, scoped).
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/{id}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
idpathstringrequiredUUID of the page to archive.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/validateDry-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
namestringoptionalOptional name (only affects an auto-derived slug).
summarystringoptionalOptional one-line description of the page.
categorystringoptionalOptional grouping label for the library view.
tagsarray of stringoptionalOptional free-form tags for filtering / search.
specobjectrequiredThe page body spec tree (catalog nodes + optional Custom node) to verify.
declared_queriesarray of objectoptionalNamed data bindings to structurally validate against the workspace.
slugstringoptionalOptional explicit URL slug.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/{id}/renderRun 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
idpathstringrequiredUUID of the page to run.
Request body
application/json
paramsobjectoptionalBound values for the page's declared named query params.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/{id}/hard-deletePermanently 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
idpathstringrequiredUUID of the page to permanently delete.
Request body
application/json
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/templatesList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/templates/{slug}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
slugpathstringrequiredSlug or deterministic UUID of the template to read.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/pages/{id}/embed-tokenMint 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
idpathstringrequiredUUID of the page to mint an embed link for.
Request body
application/json
audiencestringoptionalWho 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.
selfworkspacepublicrulesarray of objectoptionalOptional 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_secondsnumberoptionalOptional token lifetime in seconds (default 3600, max 2592000 = 30 days).
originsarray of stringoptionalOptional allowed framing origins (CSP frame-ancestors). Empty + public audience ⇒ any origin.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalTeam
Team management - members, roles, and invites.
/api/platform/v1/notifications/email-memberEmail 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>requiredRecipient email addresses. Each MUST belong to a current member of this workspace; a non-member address fails the whole call.
subjectstringrequiredEmail subject line.
bodystringrequiredPlain-text email body. Rendered into a branded HTML email plus a plain-text fallback; line breaks are preserved.
cc_emailsarray of string <email>optionalOptional additional recipients. Also member-validated and merged with recipient_emails.
idempotency_keystringoptionalOptional 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
dataobjectrequiredsuccessbooleanrequiredsentarray of objectoptionalfailedarray of objectoptionalskipped_duplicatebooleanoptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notifications/sendsList 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
limitqueryintegeroptionalMax rows to return (default 50, capped at 200).
recipient_emailquerystringoptionalNarrow to one recipient email address (exact match).
blueprint_run_idquerystringoptionalNarrow to one blueprint run's sends.
sincequerystringoptionalISO-8601 lower bound; only sends recorded at or after this instant.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/notifications/recipientsList 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
limitqueryintegeroptionalMax recipients to return (default 200, capped at 500).
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalObservability
Audit logs and execution telemetry.
/api/platform/v1/operationsList 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
namespacequerystringoptionalkindquerystringoptionalinclude_adminquerystringoptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/operations/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional