Docs

Amdahl Platform API

v1.0.0

REST API for Amdahl customer intelligence. Two surfaces: **Search** — the synchronous fast-search lane over your customer conversations — and **Agents** — the async automation surface (multi-turn Chat, a reusable agent library, and cron-driven Routines).

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

Workflows

Workflow orchestration endpoints.

post/api/platform/v1/agents/{session_id}/resume
API keyorBearer JWT

Resume Agent Session

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

Parameters

session_idpathstring <uuid>required

Request body

application/jsonrequired

inputobjectrequired

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

Responses

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

Cancel Agent Session

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

Parameters

session_idpathstring <uuid>required

Request body

application/json

reasonstringoptional

Optional operator note describing why the run was canceled.

max length 500

Responses

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

List Workspace Agents

List the workspace agent roster - Amdahl-shipped library agents merged with tenant-authored ones - as lean rows of slug, name, description, and provenance. Read when choosing which named agent should handle a task or rendering the agent directory. Library entries are code-defined and locked; tenant rows carry their creation time.

Responses

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

Create Workspace Agent

Save a new tenant-authored agent: a named, reusable prompt the workspace can dispatch later by its stable kebab-case slug. Use when a user wants to capture a custom instruction set as a workspace agent. Rejects a slug that shadows an Amdahl library agent (those ship in code and cannot be replaced) and surfaces tenant slug collisions as a typed conflict.

Request body

application/jsonrequired

slugstringoptional

Optional stable kebab-case dispatch key (lowercase letters, digits, single dashes). Omitted: derived from the name and uniquified automatically.

min length 2max length 64
namestringrequired

Display name.

min length 1max length 120
descriptionstringoptional

Optional one-line blurb for the agent directory.

max length 2000
tool_blocklistarray of stringoptional

Operation ids to subtract from this agent tool kit at run time (all kit tools are on by default; empty list = no restriction). Runner-inline tools are refused.

promptstringrequired

The prompt the agent runs with.

min length 1

Responses

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

Get Agent By Id Or Slug

Fetch one named agent by slug or id, including the full prompt text it runs with. Resolves the Amdahl code library first, then falls back to the tenant row. Read when inspecting exactly what instructions an agent carries before dispatching, editing, or duplicating it. Returns null for another tenant or a missing id.

Parameters

idpathstringrequired

UUID or slug of the agent to read.

Responses

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

Update Workspace Agent

Revise a tenant-authored agent's name, description, or prompt in place, keeping its slug stable. Call when refining how a saved agent behaves after seeing its output. Amdahl library agents are code-defined and immutable, so edits targeting one are refused with a locked error rather than silently ignored.

Parameters

idpathstringrequired

UUID or slug of the agent to patch.

Request body

application/json

namestringoptional

New display name.

min length 1max length 120
descriptionstringoptional

New directory blurb.

max length 2000
promptstringoptional

New prompt body.

min length 1
tool_blocklistarray of stringoptional

Operation ids to subtract from this agent tool kit at run time (all kit tools are on by default; empty list = no restriction). Runner-inline tools are refused.

Responses

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

Archive Workspace Agent

Retire a tenant-authored agent by soft-archiving it out of the roster; the row is retained and nothing is destroyed. Use when the workspace no longer dispatches a saved agent. Archived agents disappear from listings immediately, while Amdahl library agents cannot be archived at all - they are code-defined and always available.

Parameters

idpathstringrequired

UUID or slug of the agent to archive.

Responses

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

List Routines

List the workspace Routines, newest first: each entry carries the prompt, cadence (cron + timezone), agent pin, per-fire config, and last/next fire bookkeeping. Read when rendering the Routines page, checking what refreshes on a schedule, or picking one to update or fire now. Filter by enabled; paginate via limit + offset.

Parameters

enabledquerybooleanoptional

Filter by enabled state. As a query param, accepts ONLY the exact strings "true" or "false"; any other value (or omitted) applies no filter.

limitqueryintegeroptional
offsetqueryintegeroptional

Responses

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

Create Routine

Create a Routine: a cron that fires a Chat each occurrence, running one Master agent turn in a fresh named Chat. Use when the user asks for a standing refresh or a recurring investigation. Provide name, prompt, and cron (plus optional timezone and per-fire config like write_outputs or an agents roster); the fire never pauses on a human and each occurrence opens a new Chat.

Request body

application/jsonrequired

namestringrequired

Human label. Each fired Chat is named "{name} — {date}".

promptstringrequired

The Chat input every fire starts the Master turn with.

cronstringrequired

Cron expression (e.g. "0 9 * * 1"). Validated before the row is stored.

timezonestringoptional

IANA timezone the cron evaluates in. Defaults to UTC.

agentstringoptional

LEGACY single-agent pin the Master turn runs as (library slug/uuid or workspace agent id/slug). Prefer config.agents; passing both rejects.

configobjectoptional

Per-fire Chat config. on_question is always none (headless); write_outputs defaults true for routines; agents picks the roster ("all", one pin, or a delegate allowlist).

depthstringoptional
quickstandarddeep
agentsanyoptional

Agents the routine employs: "all" for unrestricted delegation, one ref to run AS that agent (pin), or several refs to restrict delegation to that roster.

actions_allowedarray of stringoptional

Outbound actions each fired run may invoke. Absent = ALL cataloged actions (default ON); pass a list to narrow, [] to disable.

write_outputsbooleanoptional

Allow living-doc commits from fired runs. Default true for routines.

write_memorybooleanoptional

Allow long-term memory commits from fired runs. Default false.

external_searchbooleanoptional

Allow market fan-outs (external_search.execute in the kit). Default false.

include_divergencebooleanoptional

Fuse the divergence map on external_search.execute (else evidence-only). Default false.

enabledbooleanoptional

Whether the routine fires. Defaults to true.

Responses

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

Get Routine

Fetch one Routine in full: prompt, cadence, agent roster, per-fire config, enabled state, and the last fire pointers (Chat + run ids). Read when opening a routine detail view or before patching one. Unknown and cross-workspace ids return null.

Parameters

idpathstringrequired

Responses

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

Update Routine

Patch an existing Routine: rename it, change its prompt or cadence, re-pin the agent, adjust per-fire config, or enable/disable it. Use when tuning a standing scheduled ask without recreating it. Only the supplied fields change; a cadence change is re-validated first and takes effect on the next scheduler tick.

Parameters

idpathstringrequired

The routine id.

Request body

application/json

namestringoptional

New human label.

promptstringoptional

New Chat input for future fires.

cronstringoptional

New cron expression (validated before storing).

timezonestringoptional

New IANA timezone.

agentstring | nulloptional

LEGACY single-agent pin, or null to clear back to the plain Master. Prefer config.agents; passing both rejects.

configobjectoptional

Replacement per-fire config (replaces the whole object, including the agents roster).

depthstringoptional
quickstandarddeep
agentsanyoptional

Agents the routine employs: "all" for unrestricted delegation, one ref to run AS that agent (pin), or several refs to restrict delegation to that roster.

actions_allowedarray of stringoptional

Outbound actions each fired run may invoke. Absent = ALL cataloged actions (default ON); pass a list to narrow, [] to disable.

write_outputsbooleanoptional

Allow living-doc commits from fired runs. Default true for routines.

write_memorybooleanoptional

Allow long-term memory commits from fired runs. Default false.

external_searchbooleanoptional

Allow market fan-outs (external_search.execute in the kit). Default false.

include_divergencebooleanoptional

Fuse the divergence map on external_search.execute (else evidence-only). Default false.

enabledbooleanoptional

Enable or disable firing.

Responses

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

Delete Routine

Permanently remove a Routine so its cadence stops firing. Use when the user no longer wants the standing scheduled ask. Deletion affects only future fires - Chats and documents earlier fires produced are untouched. Prefer disabling (routines.update enabled=false) when the user may want it back.

Parameters

idpathstringrequired

The routine id to delete.

Responses

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

Run Routine Now

Fire one Routine immediately, off-cadence: opens a fresh Chat and starts the Master turn exactly as the cron would. Use when the user wants the standing refresh right now instead of waiting for the next occurrence. Returns the Chat and run handles (stream/read/resume URLs) so the fire can be watched like any Chat.

Parameters

idpathstringrequired

The routine id to fire.

Request body

application/json

object

Responses

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

Conversations

post/api/platform/v1/chat
API keyorBearer JWT

Chat

Ask the workspace anything: opens or continues a named Chat and enqueues one Master agent turn. Use when starting an investigation over company data, memory, and connected sources. Always returns handles immediately (chat_id, run_id, stream/read/resume URLs) - subscribe to stream_url or poll read_url with wait_ms for the answer; never blocks.

Request body

application/jsonrequired

inputstringrequired

The ask, in plain language. Becomes the Master turn user message.

min length 1max length 32000
chat_idstring <uuid>optional

Continue an existing Chat. Omit to open a new one.

namestringoptional

Name for a NEW Chat. Omitted: auto-titled from the input.

min length 1max length 120
agentstringoptional

Optional agent pin: an Amdahl library slug/uuid or workspace agent id/slug the Master turn runs as (Master privileges; the agent prompt is the specialization).

max length 200
configobjectoptional

The only knobs. No model, temperature, or stream fields exist.

depthstringoptional
quickstandarddeep
actions_allowedarray of stringoptional

Outbound actions this run may invoke. Absent = ALL cataloged actions (default ON); pass a list to narrow, [] to disable.

write_outputsbooleanoptional

Allow living-doc commits. Default false.

write_memorybooleanoptional

Allow long-term memory commits. Default false on API keys.

on_questionstringoptional

ask_a_human behavior: pause (interactive), auto (default), none (headless).

pauseautonone
external_searchbooleanoptional

Allow market fan-outs (external_search.execute stays in the kit). Default false; deep depth forces true.

include_divergencebooleanoptional

Fuse the divergence map on external_search.execute (else mode:evidence). Default false; deep depth forces true.

Responses

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

List Chats

List Chats for this workspace, newest activity first. Read when picking a Chat to continue, rendering a recents rail, or checking what the team has been asking. Each entry is a lean snapshot (name, status, turn count, last activity); filter by status or paginate via limit + offset.

Parameters

statusquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

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

Get Chat

Fetch one Chat snapshot: name, status, its runs (with read handles), which runs are still in flight, and any pending human asks with their resume URLs. Read when rendering a Chat view, deciding whether to continue it, or surfacing an awaiting question to the human. Returns null for unknown or cross-workspace ids.

Parameters

idpathstringrequired

Responses

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

Rename Chat

Rename one Chat so the thread is findable later. Use when a chat was auto-titled from its first ask and deserves a human name, or when its focus shifted. Renames the underlying conversation title in place; runs, substrate, and handles are untouched. Returns the updated chat snapshot.

Parameters

idpathstring <uuid>required

Chat UUID.

Request body

application/jsonrequired

namestringrequired

The new chat name.

min length 1max length 120

Responses

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

Get Chat Run

Read one Chat run snapshot: status, pause payload when awaiting input, the answer envelope (answer_text plus the ordered content_blocks with query and snapshot data), answered asks, and usage. Read when polling a started Chat for its result; pass wait_ms (max 30000) to long-poll until the run settles instead of tight-looping. Pass include=events to also get the persisted activity trace for transcript replay.

Parameters

idpathstringrequired

Chat (conversation) UUID.

run_idpathstringrequired

Run (turn) UUID from the START response.

wait_msqueryintegeroptional

Optional long-poll budget in ms; hard-capped at 30000.

includequerystringoptional

Optional: 'events' includes the persisted activity trace (parent + sub-agent tool calls, capped) so a reloaded transcript can replay what the run did.

Responses

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

Get Chat Preferences

Fetch the calling user's saved Chat settings for this workspace: their default run-config knobs (depth, on_question, write_outputs/memory, external_search, include_divergence, actions_allowed) and their agent block list. Read when opening the Chat settings surface to seed its controls. Returns defaults when nothing is saved yet.

Responses

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

Update Chat Preferences

Save the calling user's Chat settings for this workspace: their default run-config knobs and/or their agent block list (the agents the Master may not delegate to). Use when the user changes a control in the Chat settings surface. A top-level PATCH — only the keys you send change; the block list applies to new Chat turns server-side.

Request body

application/json

run_configobjectoptional

Default Chat run knobs. Replaces the stored run_config wholesale when sent.

depthstringoptional
quickstandarddeep
actions_allowedarray of stringoptional
write_outputsbooleanoptional
write_memorybooleanoptional
on_questionstringoptional
pauseautonone
external_searchbooleanoptional
include_divergencebooleanoptional
blocked_agentsarray of stringoptional

Agent slugs / refs the Master may NOT delegate to for this user. Empty = every agent usable.

Responses

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

Data

Data exploration - SQL queries, hybrid search, and ML clusters.

post/api/platform/v1/search
API keyorBearer JWT

Fast Search

Run a fast, synchronous search in ONE blocking call — the low-latency lane beside Chat. Use when you want an answer NOW rather than a full agent run: it plans the ask into one or more sub-questions, writes SQL over the interactions warehouse for each, and runs them in parallel; in blended mode it also does a quick web + news citation pass. Returns the per-question groups (rows + the SQL that ran) and any citations. Point open-ended, multi-step asks at Chat instead.

Request body

application/jsonrequired

querystringrequired

The ask, in plain language. Example: "objection-tagged calls in the last 30 days".

min length 1max length 2000
modestringoptional

internal (default) = warehouse only. blended = also fan out web + news for citations (requires the external_search:execute scope; degrades to internal-only without it).

internalblended
limitintegeroptional

Internal row cap. Default 50; hard max 1000.

min 1max 1000
external_limitintegeroptional

Blended citation cap. Default 10; hard max 24.

min 1max 24
synthesizebooleanoptional

Opt into a one-paragraph Haiku headline over the merged evidence. Default false (the fast lane returns data, not prose, unless asked).

Responses

200OK
dataobjectrequired
successbooleanrequired
querystringoptional
modestringoptional
internalobjectoptional
groupsarray of anyoptional
externalobject | nulloptional
external_omittedstring | nulloptional
synthesisstring | nulloptional
messagestringoptional
coverageobject | nulloptional
escalate_to_chatbooleanoptional
escalate_reasonstring | nulloptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/search/query
API keyorBearer JWT

Routed Warehouse Search

One routed door over tenant warehouse data: each ask lands on typed structured filters, an NL-to-SQL pass, or meaning-based vector similarity. Use for lookups where you hold a plain question OR typed field predicates and want the cheapest lane chosen automatically (force one via mode). Replies with which lane ran, rows or similarity matches, any compiled statement, and mirror freshness. Discover filterable fields via search_field://list first.

Request body

application/json

querystringoptional

Free-text ask. Meaning-shaped wording ("what do customers say about…") routes to the semantic lane; other questions route to the NL-to-SQL fuzzy lane.

max length 2000
modestringoptional

Lane override. Default auto: filters-with-no-query → filter; meaning-shaped query → semantic; else fuzzy.

autofilterfuzzysemantic
surfacestringoptional

Warehouse surface for the filter lane. Default interactions.

interactionsdealsdeal_qualification
filtersarray of objectoptional

Typed predicates (ANDed). Semantic mode supports only company_id / occurred_at / speaker_type; the filter lane supports every field the catalog advertises.

array items

fieldstringrequired

A field from search_field://list.

opstringrequired
eqneqinnot_incontainsgtgteltltebetweenis_nullnot_null
valueanyoptional

Scalar for eq/neq/gt/gte/lt/lte/contains; array for in/not_in; [low, high] for between; omitted for is_null/not_null.

order_byobjectoptional

Filter lane: order by a vocabulary field or a metric alias (e.g. "count").

fieldstringrequired
dirstringrequired
ascdesc
limitintegeroptional

Row / match cap. Default 100; hard max 1000.

min 1max 1000
group_byarray of stringoptional

Filter lane: group fields (requires at least one metric).

metricsarray of objectoptional

Filter lane: aggregations (sum/avg need a numeric field).

array items

fnstringrequired
countcount_distinctsumavgminmax
fieldstringoptional

Required for every fn except count.

Responses

200OK
dataobjectrequired
successbooleanrequired
mode_ranstringoptional
resultsarray of anyoptional
compiledobjectoptional
freshnessobjectoptional
timingobjectoptional
detailobjectoptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/search/fields
API keyorBearer JWT

Search Filter Fields

Read when composing typed predicates for the routed search verb: the per-surface field catalog (interactions, deals, deal_qualification) listing each field with its type, description, and the comparison operators it admits. Derived live from the warehouse schema catalog - exactly what the filter compiler validates against, so it can never drift from the accepted vocabulary.

Responses

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

Tiered Company Enrichment

Tiered account intelligence for one company, keyed by domain or by name (a bare name is matched against companies in your own conversation data). Use when preparing for an account: a cached brief returns instantly; on a miss you get the tenant’s own conversation evidence about that account in a bounded read while a background job rebuilds the full brief. Pass mode=full to wait for the complete web + LinkedIn + Crunchbase fusion instead.

Request body

application/json

domainstringoptional

Company domain, e.g. "stripe.com" — the brief cache key. Optional if `name` is given.

min length 3max length 253
namestringoptional

Company name. Sharpens evidence + the full fan-out when a domain is given; when NO domain is given it is matched against companies in your own data to resolve the account.

modestringoptional

fast (default) = cache → first-party evidence + background refresh. full = run the synchronous fused composite inline (requires external_search:execute; degrades to fast without it).

fastfull

Responses

200OK
dataobjectrequired
successbooleanrequired
tierstringoptional
briefobjectoptional
artifact_idstring | nulloptional
captured_atstring | nulloptional
evidenceobjectoptional
refresh_enqueuedbooleanoptional
refresh_omittedstring | nulloptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/enrich/person
API keyorBearer JWT

Tiered Person Enrichment

Tiered background on one person, keyed by linkedin_url or email (a bare name is refused as unresolvable). Call before an outreach or a meeting: a cache hit returns the stored person brief immediately; otherwise first-party mentions of them come back within seconds and the deep profile refresh is queued behind the scenes. mode=full blocks for the fused profile.

Request body

application/json

linkedin_urlstringoptional

LinkedIn profile URL — the person-brief cache key. Preferred identifier.

emailstringoptional

Work email. Resolves the person + company; an email-only call skips the cache tier (the brief cache keys on linkedin_url).

namestringoptional

Optional display name. Supplementary only — never sufficient by itself.

modestringoptional

fast (default) = cache → first-party evidence + background refresh. full = the synchronous fused composite (requires external_search:execute; degrades to fast).

fastfull

Responses

200OK
dataobjectrequired
successbooleanrequired
tierstringoptional
briefobjectoptional
artifact_idstring | nulloptional
captured_atstring | nulloptional
evidenceobjectoptional
refresh_enqueuedbooleanoptional
refresh_omittedstring | nulloptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/enrich/topic
API keyorBearer JWT

Tiered Topic Enrichment

Tiered market read on a topic or category term. Call when scoping a theme: a fresh topic brief from the store returns at once; on a miss the customer-voice evidence for that topic arrives in a bounded read while the full market fan-out regenerates behind the scenes. mode=full runs the whole divergence-map synthesis inline before answering.

Request body

application/jsonrequired

topicstringrequired

Topic / category term, e.g. "AI SDRs" — the topic-brief cache key (verbatim match).

min length 2max length 300
modestringoptional

fast (default) = cache → customer-voice evidence + background refresh. full = the synchronous fused topic composite (requires external_search:execute; degrades to fast).

fastfull

Responses

200OK
dataobjectrequired
successbooleanrequired
tierstringoptional
briefobjectoptional
artifact_idstring | nulloptional
captured_atstring | nulloptional
evidenceobjectoptional
refresh_enqueuedbooleanoptional
refresh_omittedstring | nulloptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/lookalike
API keyorBearer JWT

Entity Lookalikes

Find the entities most similar to a seed company or deal, ranked by centroid cosine similarity over the tenant’s own conversation corpus. Use for "more accounts like this one" prospect-expansion asks: give an entity_id (or a domain for companies) and get the nearest neighbours with scores. Honest degradation: when centroids are not materialized yet it says so instead of guessing.

Request body

application/jsonrequired

entity_typestringrequired

Which centroid family to search.

companydeal
entity_idstringoptional

The seed entity id (company id / deal id as the pipeline emits them). Preferred.

domainstringoptional

Company seeds only: resolved to the tenant’s company_id via the conversation warehouse before the centroid lookup. An unmapped domain returns available=false with reason domain_unresolved rather than a guess.

limitintegeroptional

Max neighbours. Default 10; cap 50.

min 1max 50

Responses

200OK
dataobjectrequired
successbooleanrequired
availablebooleanoptional
reasonstring | nulloptional
seedobjectoptional
matchesarray of anyoptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
post/api/platform/v1/lookalike/themes
API keyorBearer JWT

Similar Themes

Rank the tenant’s ML conversation themes nearest in meaning to a free-text description. Use to locate which existing themes an idea, campaign angle, or complaint maps onto — a millisecond centroid match when the fast vector mirror is synced, transparently falling back to the warehouse theme index otherwise. Returns theme ids, labels, member counts, and similarity scores.

Request body

application/jsonrequired

querystringrequired

Free-text description of the idea / angle / complaint to map onto themes.

min length 2max length 1000
limitintegeroptional

Max themes. Default 10; cap 50.

min 1max 50

Responses

200OK
dataobjectrequired
successbooleanrequired
resultsarray of anyoptional
freshnessobjectoptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional

Observability

Audit logs and execution telemetry.

post/api/platform/v1/evals/run
API keyorBearer JWT

Run Eval

Grade content against your workspace data and get a run id to poll. Use when scoring a prompt or a drafted message: pass inputs (the prompt, the message, or both) to the prompt-and-message-eval — it retrieves real customer quotes, an LLM judge scores grounding/specificity/tone with per-dimension reasoning + cited quotes + a rewrite. Returns the run handle (eval_run://<id>) immediately; reuse=cached reuses the last run for the same inputs. Read the scorecard from the run resource.

Request body

application/json

evalstringoptional

Eval slug or id. Default 'prompt-and-message-eval'. Discover options + their input fields via eval://list.

inputsobjectoptional

Run inputs for the eval's declared fields. prompt-and-message-eval expects a prompt and/or a message (+ optional audience). Read the exact schema from eval://<slug>. Omit for a pure generated eval.

reusestringoptional

cached (default) reuses an active run for the same target (fingerprint); force always starts a fresh run.

cachedforce

Responses

200OK
dataobjectrequired
successbooleanrequired
run_idstringoptional
reusedbooleanoptional
statusstringoptional
eval_slugstringoptional
eval_versionstringoptional
resourcestringoptional
errorobjectoptional
400Invalid input - failed schema validation
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
401Authentication required
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
403Forbidden - missing scope or role
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
500Internal server error
errorobjectrequired
codestringrequired
messagestringrequired
detailsobjectoptional
get/api/platform/v1/evals
API keyorBearer JWT

List Evals

List every eval available to this workspace (prompt-and-message-eval, plus any you authored). Use when choosing which grader to run or rendering an eval picker. Returns slug, name, version, description, input_schema, and case count per eval; fetch eval://<slug> for the full cases + graders.

Responses

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

Create Eval

Create a custom eval — a configured grading pipeline (declared input fields + cases + graders) stored for your workspace. Use when the built-in graders don't fit and you want your own scored report card. Pass slug, name, input_schema, and cases; the whole definition is validated and you get back the new eval's slug + id, or a structured validation_failed with the exact field errors. Built-in slugs are reserved.

Request body

application/jsonrequired

slugstringrequired

kebab-case identifier, unique in your workspace.

namestringrequired
descriptionstringoptional
versionstringoptional

semver, default 1.0.0.

input_schemaobjectoptional

Declared run-input fields ({ fields: [...] }).

casesarray of objectrequired

Cases: each a subject + its graders.

Responses

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

Get Eval

Fetch one eval by slug or id, with its input_schema and full cases — each case subject (a provided input field or a generated target) and the graders (rule checks, system-of-record anchors, judge and evidence-judge rubrics) applied to it. Use when building a run form or inspecting what a grader measures. Returns null for an unknown id.

Parameters

slugpathstringrequired

Responses

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

Update Eval

Revise one of your workspace's authored evals in place. Use when tuning a custom grader's rubric, thresholds, input fields, or cases. Pass the slug plus the fields to change; the merged definition is re-validated before it is stored, returning the slug + version or a structured validation error. Built-in evals cannot be edited.

Parameters

slugpathstringrequired

The authored eval to revise.

Request body

application/json

namestringoptional
descriptionstringoptional
versionstringoptional
input_schemaobjectoptional
casesarray of objectoptional

Responses

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

Delete Eval

Archive one of your workspace's authored evals so it no longer lists or runs. Use when retiring a custom grader you no longer need; the slug frees up for re-use and a soft archive keeps the audit trail. Pass the slug. Built-in evals cannot be archived. Returns whether a matching eval was found and archived.

Parameters

slugpathstringrequired

Responses

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

Validate Eval

Dry-run validate a custom eval definition without storing it. Use when building an eval in a form and you want author-time feedback before saving: it runs the same structural checks as creating one (input-schema shape, subject-to-input-field integrity, per-grader config) and returns valid plus a flat list of path + message errors. Never writes anything.

Request body

application/jsonrequired

slugstringrequired
namestringrequired
descriptionstringoptional
versionstringoptional
input_schemaobjectoptional
casesarray of objectrequired

Responses

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

List Eval Runs

List this workspace eval runs, newest first, filterable by eval_slug and status (queued|running|complete|failed|canceled). Use when rendering an eval run history or checking whether a report card has finished. Returns lean rows; fetch eval_run://<id> for the full verdict.

Parameters

eval_slugquerystringoptional
statusquerystringoptional
limitqueryintegeroptional
offsetqueryintegeroptional

Responses

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

Get Eval Run

Fetch one eval run by id: its status and, once complete, the verdict — the overall score, the pass/partial/fail bucket, and per-case + per-grader scores with rationale + evidence. Use when polling a run started via evals.run or rendering a report card. Returns null for a missing id.

Parameters

idpathstringrequired

Responses

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

List Grader Kinds

List every grader kind an eval can use: deterministic (rule checks, no LLM), sor_anchored (compare a figure to a ground-truth warehouse count), and judge (LLM scores a rubric). Use when authoring or explaining an eval. Returns id, name, description, and whether the kind makes an LLM call.

Responses

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

Get Grader Kind

Fetch one grader kind by id (deterministic / sor_anchored / judge). Use when rendering a single grader-kind detail card. Returns its name, description, and llm-usage flag, or null for an unknown id.

Parameters

idpathstringrequired

Responses

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