Docs

Endpoints

The synchronous endpoint surface - Search, Enrich, and Lookalike - plus the async Agents door, and how the verbs chain into one motion

Amdahl's public API is a small set of endpoints: synchronous primitives that answer in one blocking call, plus the async Agents door for anything that needs a real investigation. Reach for an endpoint when you already know the shape of the answer — a filtered slice, a similarity ranking, a brief on one subject — and for Chat when you want Amdahl to figure out the shape for you.

  • Searchsearch.query, one routed door over your warehouse with a typed-filter lane, an NL→SQL lane, and a meaning-based semantic lane, plus the search.fields vocabulary catalog. (The plain-language fast lane, search.run, has its own guide.)
  • Enrichenrich.company / enrich.person / enrich.topic, tiered: a cached brief instantly, your own first-party evidence on a miss while the full fused brief rebuilds in the background, or mode: "full" to block for the deep version.
  • Lookalikelookalike.find + lookalike.similar_themes, "more like this one" over your own conversation corpus, honest about coverage while centroids materialize.
  • Agents — the async surface: the Chat ask-door, the reusable agent library, and cron Routines.

Every endpoint at a glance

EndpointOperationRESTMCP tool + actionScopeStabilityTypical latency
Fast NL searchsearch.runPOST /searchsearchrundata:readbeta~6s
Routed searchsearch.queryPOST /search/querysearchquerydata:readbeta~2s
Field catalogsearch.fieldsGET /search/fieldssearchfieldsdata:readbetasub-second
Enrich a companyenrich.companyPOST /enrich/companyenrichcompanydata:read (¹)beta~2s fast path
Enrich a personenrich.personPOST /enrich/personenrichpersondata:read (¹)beta~2s fast path
Enrich a topicenrich.topicPOST /enrich/topicenrichtopicdata:read (¹)beta~2s fast path
Nearest entitieslookalike.findPOST /lookalikelookalikefinddata:readbeta~1s
Nearest themeslookalike.similar_themesPOST /lookalike/themeslookalikethemesdata:readbeta~2s
Score against ground truthevals.runPOST /evalsevalsrundata:readcoming soon
What-if projectionsimulate.runPOST /simulatesimulaterundata:readcoming soon
Start a Chatchat.startPOST /chatagentsstart_chatconversations:writestableasync (handles now)
Agent library CRUDagents.*_agent/agents[...]agents*_agentagents:read / agents:writestablesub-second
Routines CRUD + fireroutines.*/routines[...]agents*_routineroutines:read / routines:writestablesub-second

(¹) The paid enrich tiers — the background refresh and mode: "full" — additionally need external_search:execute, and degrade instead of failing without it (refresh_omitted: "missing_scope").

The eval and simulate endpoints are not live yet: their pages document the planned shapes so you can design against them, and they are deliberately absent from the OpenAPI spec and tool catalog until launch.

Every synchronous endpoint shares the same contract style: past parameter validation it returns success: true with typed fields for every degradation (a missing scope, an unmaterialized index, an empty corpus) — partial and honest beats a 500. The only non-2xx you should plan for are the gate codes: feature_disabled, not_on_public_api, and quota_exceeded.

How the endpoints chain

Each endpoint is one blocking call, which makes them composable — the canonical chain is the expansion motion:

code
1. structured search   POST /search/query      "closed-won deals this year, largest first"
        │                                       → real pipeline company ids
        ▼
2. lookalike           POST /lookalike          seed = your best closed-won company
        │                                       → the accounts that TALK like it
        ▼
3. enrich              POST /enrich/company     one fast tiered call per match
        │                                       → cached brief or first-party evidence now,
        │                                         deep briefs rebuilding behind you
        ▼
4. semantic search     POST /search/query       mode=semantic + company_id IN (matches)
                                                → the objections those accounts already raised

Four synchronous calls, no agent run — a briefed expansion list with the evidence attached. When a step's answer needs judgment rather than retrieval ("which of these should we actually pursue and why"), hand the thread to Chat: the async lane exists precisely for the asks the endpoints cannot settle in one call.

Two more chains worth knowing:

  • Discovery-first search: GET /search/fields → compose typed filters → POST /search/query. The catalog is derived from the same schema the compiler validates against, so it cannot drift — and a wrong field name comes back as a typed invalid_argument naming the allowed set.
  • Warm-the-cache enrichment: fast-enrich tomorrow's accounts this afternoon; each cache miss queues a background refresh (refresh_enqueued: true), so by meeting time the same calls land on tier: "cached".

Prerequisites

Your workspace must be on Agent Platform v2

Everything on this page is gated per workspace by the agent_v2 flag:

  • On REST: a gated call on a flag-off workspace returns 403 with error.code: "feature_disabled".
  • On MCP: if your connected session lists a search tool and an agents tool (the newest surface also carries enrich + lookalike), you are on v2. If it still lists blueprints / pages and no search / agents, ask your Amdahl admin to enable Agent Platform v2 for the workspace.

An API key with the right scopes

Mint a key in the console (Settings → Developer, see Authentication) and send it as X-API-Key on every request. The base URL is:

code
https://app.amdahl.co/api/platform/v1

Per family:

FamilyScope
search.run / search.query / search.fieldsdata:read
enrich.*data:read (+ external_search:execute for the paid tiers; degrades without it)
lookalike.*data:read
Start / rename a Chatconversations:write
Read a Chat / poll a runconversations:read
Answer a pause / cancel a runworkflows:write
Agent library read / writeagents:read / agents:write
Routines read / writeroutines:read / routines:write

A read-only key can call every synchronous endpoint on this page (enrich serves its cache + first-party tiers and reports refresh_omitted: "missing_scope" instead of queueing the paid refresh) and read Chats — but cannot start a Chat, answer a pause, or write an agent or routine.

See also