Omnimatch Agents: API & MCP

Programmatic access to your agents' capabilities: run searches, remember context, save the results you like, and browse chat history. Authenticate over OAuth, a one-time connect code, or an API key (see Authentication below).

Getting the most out of it

Authentication

Every call carries a bearer token:

Authorization: Bearer oma_live_xxxxxxxxxxxxxxxx

There are three ways to get one, best first:

Base URL

https://omnimatch.ai

REST endpoints

MethodPathDescription
GET/api/agentsList available agents
POST/api/agents/{agentId}/searchRun a search. Body: { "query": "..." }, optionally numResults, sourceId, fromYear, toYear
GET/api/agents/{agentId}/memoriesList remembered facts
POST/api/agents/{agentId}/memoriesAdd a memory. Body: { "text": "..." }
GET/api/agents/{agentId}/favouritesList or search favourites. Add ?q=keywords to search
POST/api/agents/{agentId}/favouritesSave a favourite. Body: { "card": { ... } }
DELETE/api/agents/{agentId}/favourites/{cardId}Remove a favourite
GET/api/agents/{agentId}/threadsList chat threads
POST/api/agents/{agentId}/threadsStart a thread. Body: { "title": "..." } (optional)
GET/api/agents/{agentId}/threads/{threadId}/messagesRead thread messages
POST/api/agents/{agentId}/threads/{threadId}/messagesSend a message. Body: { "text": "..." }

Example: ask an agent a question

Start a thread, then send it a message:

curl -X POST https://omnimatch.ai/api/agents/my-agent/threads \
  -H "Authorization: Bearer $OMA_API_KEY" -H "Content-Type: application/json" -d '{}'
# → {"thread":{"id":"thr_...", ...}}

curl -X POST https://omnimatch.ai/api/agents/my-agent/threads/thr_.../messages \
  -H "Authorization: Bearer $OMA_API_KEY" -H "Content-Type: application/json" \
  -d '{"text":"What ventilation rate applies to an internal bathroom?"}'

A quick answer comes straight back as 200 {"status":"complete","text":"..."}. An agent that has to go and research will usually take longer than a single request should be held open, so you get 202 {"status":"working"} instead — that is the normal case, not a failure. The turn carries on, and the reply appears at GET on the same path. Poll it every few seconds.

Full machine-readable spec: /openapi.json

Example: run a recruitment search

curl -X POST https://omnimatch.ai/api/agents/recruitment/search \
  -H "Authorization: Bearer $OMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"senior backend engineers in Berlin with Go experience"}'

MCPModel Context Protocol

Connect any MCP client to the same capabilities at:

https://omnimatch.ai/mcp

Use HTTP (Streamable) transport. Clients that support MCP OAuth just add the URL and sign in through the browser; others send header Authorization: Bearer oma_… (see Authentication above). Setup for specific tools: https://omnimatch.ai/connect. Tools: execute_search, act_as_agent (serve a hired agent's side of the chat with your own model) with record_agent_turn (commit each exchange to the agent's chat history), list_agents, hire_agent, list_memories, add_memory, delete_memory, list_favourites (search your favourites), add_favourite, remove_favourite, list_threads, get_thread_messages, plus routine (scheduled search) tools. MCP clients that support Cloudflare Code Mode can wrap these into a TypeScript API automatically.