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.
/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/agentsList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agentsCreate 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
slugstringoptionalOptional stable kebab-case dispatch key (lowercase letters, digits, single dashes). Omitted: derived from the name and uniquified automatically.
namestringrequiredDisplay name.
descriptionstringoptionalOptional one-line blurb for the agent directory.
tool_blocklistarray of stringoptionalOperation 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.
promptstringrequiredThe prompt the agent runs with.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agents/{id}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
idpathstringrequiredUUID or slug of the agent to read.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agents/{id}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
idpathstringrequiredUUID or slug of the agent to patch.
Request body
application/json
namestringoptionalNew display name.
descriptionstringoptionalNew directory blurb.
promptstringoptionalNew prompt body.
tool_blocklistarray of stringoptionalOperation 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/agents/{id}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
idpathstringrequiredUUID or slug of the agent to archive.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/routinesList 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
enabledquerybooleanoptionalFilter by enabled state. As a query param, accepts ONLY the exact strings "true" or "false"; any other value (or omitted) applies no filter.
limitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/routinesCreate 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
namestringrequiredHuman label. Each fired Chat is named "{name} — {date}".
promptstringrequiredThe Chat input every fire starts the Master turn with.
cronstringrequiredCron expression (e.g. "0 9 * * 1"). Validated before the row is stored.
timezonestringoptionalIANA timezone the cron evaluates in. Defaults to UTC.
agentstringoptionalLEGACY single-agent pin the Master turn runs as (library slug/uuid or workspace agent id/slug). Prefer config.agents; passing both rejects.
configobjectoptionalPer-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).
depthstringoptionalquickstandarddeepagentsanyoptionalAgents 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 stringoptionalOutbound actions each fired run may invoke. Absent = ALL cataloged actions (default ON); pass a list to narrow, [] to disable.
write_outputsbooleanoptionalAllow living-doc commits from fired runs. Default true for routines.
write_memorybooleanoptionalAllow long-term memory commits from fired runs. Default false.
external_searchbooleanoptionalAllow market fan-outs (external_search.execute in the kit). Default false.
include_divergencebooleanoptionalFuse the divergence map on external_search.execute (else evidence-only). Default false.
enabledbooleanoptionalWhether the routine fires. Defaults to true.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/routines/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/routines/{id}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
idpathstringrequiredThe routine id.
Request body
application/json
namestringoptionalNew human label.
promptstringoptionalNew Chat input for future fires.
cronstringoptionalNew cron expression (validated before storing).
timezonestringoptionalNew IANA timezone.
agentstring | nulloptionalLEGACY single-agent pin, or null to clear back to the plain Master. Prefer config.agents; passing both rejects.
configobjectoptionalReplacement per-fire config (replaces the whole object, including the agents roster).
depthstringoptionalquickstandarddeepagentsanyoptionalAgents 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 stringoptionalOutbound actions each fired run may invoke. Absent = ALL cataloged actions (default ON); pass a list to narrow, [] to disable.
write_outputsbooleanoptionalAllow living-doc commits from fired runs. Default true for routines.
write_memorybooleanoptionalAllow long-term memory commits from fired runs. Default false.
external_searchbooleanoptionalAllow market fan-outs (external_search.execute in the kit). Default false.
include_divergencebooleanoptionalFuse the divergence map on external_search.execute (else evidence-only). Default false.
enabledbooleanoptionalEnable or disable firing.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/routines/{id}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
idpathstringrequiredThe routine id to delete.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/routines/{id}/run-nowRun 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
idpathstringrequiredThe routine id to fire.
Request body
application/json
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalConversations
/api/platform/v1/chatChat
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
inputstringrequiredThe ask, in plain language. Becomes the Master turn user message.
chat_idstring <uuid>optionalContinue an existing Chat. Omit to open a new one.
namestringoptionalName for a NEW Chat. Omitted: auto-titled from the input.
agentstringoptionalOptional 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).
configobjectoptionalThe only knobs. No model, temperature, or stream fields exist.
depthstringoptionalquickstandarddeepactions_allowedarray of stringoptionalOutbound actions this run may invoke. Absent = ALL cataloged actions (default ON); pass a list to narrow, [] to disable.
write_outputsbooleanoptionalAllow living-doc commits. Default false.
write_memorybooleanoptionalAllow long-term memory commits. Default false on API keys.
on_questionstringoptionalask_a_human behavior: pause (interactive), auto (default), none (headless).
pauseautononeexternal_searchbooleanoptionalAllow market fan-outs (external_search.execute stays in the kit). Default false; deep depth forces true.
include_divergencebooleanoptionalFuse the divergence map on external_search.execute (else mode:evidence). Default false; deep depth forces true.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/chatsList 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
statusquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/chats/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/chats/{id}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>requiredChat UUID.
Request body
application/jsonrequired
namestringrequiredThe new chat name.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/chats/{id}/runs/{run_id}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
idpathstringrequiredChat (conversation) UUID.
run_idpathstringrequiredRun (turn) UUID from the START response.
wait_msqueryintegeroptionalOptional long-poll budget in ms; hard-capped at 30000.
includequerystringoptionalOptional: 'events' includes the persisted activity trace (parent + sub-agent tool calls, capped) so a reloaded transcript can replay what the run did.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/chat/preferencesGet 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/chat/preferencesUpdate 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_configobjectoptionalDefault Chat run knobs. Replaces the stored run_config wholesale when sent.
depthstringoptionalquickstandarddeepactions_allowedarray of stringoptionalwrite_outputsbooleanoptionalwrite_memorybooleanoptionalon_questionstringoptionalpauseautononeexternal_searchbooleanoptionalinclude_divergencebooleanoptionalblocked_agentsarray of stringoptionalAgent slugs / refs the Master may NOT delegate to for this user. Empty = every agent usable.
Responses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalData
Data exploration - SQL queries, hybrid search, and ML clusters.
/api/platform/v1/searchFast 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
querystringrequiredThe ask, in plain language. Example: "objection-tagged calls in the last 30 days".
modestringoptionalinternal (default) = warehouse only. blended = also fan out web + news for citations (requires the external_search:execute scope; degrades to internal-only without it).
internalblendedlimitintegeroptionalInternal row cap. Default 50; hard max 1000.
external_limitintegeroptionalBlended citation cap. Default 10; hard max 24.
synthesizebooleanoptionalOpt into a one-paragraph Haiku headline over the merged evidence. Default false (the fast lane returns data, not prose, unless asked).
Responses
dataobjectrequiredsuccessbooleanrequiredquerystringoptionalmodestringoptionalinternalobjectoptionalgroupsarray of anyoptionalexternalobject | nulloptionalexternal_omittedstring | nulloptionalsynthesisstring | nulloptionalmessagestringoptionalcoverageobject | nulloptionalescalate_to_chatbooleanoptionalescalate_reasonstring | nulloptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/search/queryRouted 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
querystringoptionalFree-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.
modestringoptionalLane override. Default auto: filters-with-no-query → filter; meaning-shaped query → semantic; else fuzzy.
autofilterfuzzysemanticsurfacestringoptionalWarehouse surface for the filter lane. Default interactions.
interactionsdealsdeal_qualificationfiltersarray of objectoptionalTyped predicates (ANDed). Semantic mode supports only company_id / occurred_at / speaker_type; the filter lane supports every field the catalog advertises.
array items
fieldstringrequiredA field from search_field://list.
opstringrequiredeqneqinnot_incontainsgtgteltltebetweenis_nullnot_nullvalueanyoptionalScalar for eq/neq/gt/gte/lt/lte/contains; array for in/not_in; [low, high] for between; omitted for is_null/not_null.
order_byobjectoptionalFilter lane: order by a vocabulary field or a metric alias (e.g. "count").
fieldstringrequireddirstringrequiredascdesclimitintegeroptionalRow / match cap. Default 100; hard max 1000.
group_byarray of stringoptionalFilter lane: group fields (requires at least one metric).
metricsarray of objectoptionalFilter lane: aggregations (sum/avg need a numeric field).
array items
fnstringrequiredcountcount_distinctsumavgminmaxfieldstringoptionalRequired for every fn except count.
Responses
dataobjectrequiredsuccessbooleanrequiredmode_ranstringoptionalresultsarray of anyoptionalcompiledobjectoptionalfreshnessobjectoptionaltimingobjectoptionaldetailobjectoptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/search/fieldsSearch 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/enrich/companyTiered 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
domainstringoptionalCompany domain, e.g. "stripe.com" — the brief cache key. Optional if `name` is given.
namestringoptionalCompany 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.
modestringoptionalfast (default) = cache → first-party evidence + background refresh. full = run the synchronous fused composite inline (requires external_search:execute; degrades to fast without it).
fastfullResponses
dataobjectrequiredsuccessbooleanrequiredtierstringoptionalbriefobjectoptionalartifact_idstring | nulloptionalcaptured_atstring | nulloptionalevidenceobjectoptionalrefresh_enqueuedbooleanoptionalrefresh_omittedstring | nulloptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/enrich/personTiered 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_urlstringoptionalLinkedIn profile URL — the person-brief cache key. Preferred identifier.
emailstringoptionalWork email. Resolves the person + company; an email-only call skips the cache tier (the brief cache keys on linkedin_url).
namestringoptionalOptional display name. Supplementary only — never sufficient by itself.
modestringoptionalfast (default) = cache → first-party evidence + background refresh. full = the synchronous fused composite (requires external_search:execute; degrades to fast).
fastfullResponses
dataobjectrequiredsuccessbooleanrequiredtierstringoptionalbriefobjectoptionalartifact_idstring | nulloptionalcaptured_atstring | nulloptionalevidenceobjectoptionalrefresh_enqueuedbooleanoptionalrefresh_omittedstring | nulloptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/enrich/topicTiered 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
topicstringrequiredTopic / category term, e.g. "AI SDRs" — the topic-brief cache key (verbatim match).
modestringoptionalfast (default) = cache → customer-voice evidence + background refresh. full = the synchronous fused topic composite (requires external_search:execute; degrades to fast).
fastfullResponses
dataobjectrequiredsuccessbooleanrequiredtierstringoptionalbriefobjectoptionalartifact_idstring | nulloptionalcaptured_atstring | nulloptionalevidenceobjectoptionalrefresh_enqueuedbooleanoptionalrefresh_omittedstring | nulloptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/lookalikeEntity 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_typestringrequiredWhich centroid family to search.
companydealentity_idstringoptionalThe seed entity id (company id / deal id as the pipeline emits them). Preferred.
domainstringoptionalCompany 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.
limitintegeroptionalMax neighbours. Default 10; cap 50.
Responses
dataobjectrequiredsuccessbooleanrequiredavailablebooleanoptionalreasonstring | nulloptionalseedobjectoptionalmatchesarray of anyoptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/lookalike/themesSimilar 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
querystringrequiredFree-text description of the idea / angle / complaint to map onto themes.
limitintegeroptionalMax themes. Default 10; cap 50.
Responses
dataobjectrequiredsuccessbooleanrequiredresultsarray of anyoptionalfreshnessobjectoptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalObservability
Audit logs and execution telemetry.
/api/platform/v1/evals/runRun 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
evalstringoptionalEval slug or id. Default 'prompt-and-message-eval'. Discover options + their input fields via eval://list.
inputsobjectoptionalRun 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.
reusestringoptionalcached (default) reuses an active run for the same target (fingerprint); force always starts a fresh run.
cachedforceResponses
dataobjectrequiredsuccessbooleanrequiredrun_idstringoptionalreusedbooleanoptionalstatusstringoptionaleval_slugstringoptionaleval_versionstringoptionalresourcestringoptionalerrorobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/evalsList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/evalsCreate 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
slugstringrequiredkebab-case identifier, unique in your workspace.
namestringrequireddescriptionstringoptionalversionstringoptionalsemver, default 1.0.0.
input_schemaobjectoptionalDeclared run-input fields ({ fields: [...] }).
casesarray of objectrequiredCases: each a subject + its graders.
Responses
dataobjectrequiredsuccessbooleanrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/evals/{slug}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
slugpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/evals/{slug}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
slugpathstringrequiredThe authored eval to revise.
Request body
application/json
namestringoptionaldescriptionstringoptionalversionstringoptionalinput_schemaobjectoptionalcasesarray of objectoptionalResponses
dataobjectrequiredsuccessbooleanrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/evals/{slug}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
slugpathstringrequiredResponses
dataobjectrequiredsuccessbooleanrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/evals/validateValidate 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
slugstringrequirednamestringrequireddescriptionstringoptionalversionstringoptionalinput_schemaobjectoptionalcasesarray of objectrequiredResponses
dataobjectrequiredvalidbooleanrequirederrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/eval-runsList 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_slugquerystringoptionalstatusquerystringoptionallimitqueryintegeroptionaloffsetqueryintegeroptionalResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/eval-runs/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/grader-kindsList 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
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional/api/platform/v1/grader-kinds/{id}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
idpathstringrequiredResponses
dataanyoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptionalerrorobjectrequiredcodestringrequiredmessagestringrequireddetailsobjectoptional