What Search does
POST https://tako.com/api/v3/search takes a natural-language query and returns both data results — Tako knowledge cards (interactive, embeddable data visualizations with structured fields, named sources, and methodology) — and web search results, with no synthesized answer on top. Reach for it when you want to render or post-process the results yourself. Responses are compact and fast, so you can call it frequently and in parallel inside agentic loops.
Unlike a web-search API that returns text snippets, each Tako card is a live visualization backed by structured data and attribution — so you get renderable, citable results, not just links.
- Base URL:
https://tako.com/api/ - Auth: send your API key in the
X-API-Keyrequest header (not a bearer token). Create a key in the Tako console. - Request body is shared with Answer — the only difference is Answer adds a synthesized
answerstring.
Install
Minimal working example
Each snippet makes the same call and is complete after you setTAKO_API_KEY.
Request parameters
The body is aSearchRequest. Only query is required.
instant effort cannot be combined with sources.data.defer_data_retrieval — instant serves cached embeds and skips the retrieval that defer_data_retrieval defers.Forcing entity boundaries in query
Tako identifies the entities in the query before it searches. Double quotes force a phrase to be exactly one entity, and an optional :LABEL suffix sets its type. Use this when you already know the entity — an agent usually does.
PERSON, ORG, GPE, LOC, PRODUCT, DATE, EVENT, MONEY, CARDINAL, METRIC, TIME_PERIOD, UNITS.
Quoting is all-or-nothing: every " in the query must belong to a non-empty pair of 80 characters or less. If one quote is unmatched, Tako ignores every quote in that query and searches as usual, so an ordinary web-style phrase query still works. An unrecognized label stays in the query text. The quotes never reach the search text. Answer accepts the same syntax.
Latency
Target p50 latency (not a guarantee), byeffort:
Choosing sources
By default Search queries both Tako’s curated knowledge graph (data) and the live web (web), 5 results each. sources is an object whose keys select the indexes — a source is searched only if its key is present.
Each source takes optional per-source settings:
The legacy key
tako is accepted as a synonym for data and is mapped to it. Prefer data in new code.What a response looks like
A200 returns a SearchResponse:
Each card (
TakoCard) carries:
When to use Search
Search is for fast, structured data retrieval — cards and web results you render or post-process yourself, with no synthesized answer. Reach for it when:- You want structured results, not prose. No answer-synthesis LLM call in the path, so responses come back fast — about 500 ms on the default
fasteffort (see Latency) — call it frequently and fan out across many entities in parallel. - You’re feeding an agentic loop that needs a lot of accurate data, fast. One query per entity; act on the structured cards instead of waiting on generated text.
- You want more than a single value. Each result is a knowledge card — a full series with named sources and methodology — so one call returns the surrounding context too, ready to render or compute on.
- You want broad coverage. Search queries Tako’s curated knowledge graph and the live web by default, so you get a meaningful result across far more queries than either source alone.
Downloading the underlying data
A result whose data is downloadable includes acontent descriptor. Pass that result’s webpage_url (for a card) or url (for a web result) to Contents (POST /v1/contents) to download it — a CSV of a Tako card’s data, or extracted text for a web page.
Not every result carries one: when a result’s underlying data can’t be exported, content is omitted. Treat its absence as “no download available” and skip the Contents call for that result.
See the Contents For Your Coding Agent page for the full request and response reference, including url vs inline delivery modes. To skip the second call, inline the data in this response with the per-source include_contents setting.
Common mistakes
Errors
Failures return aBaseAPIError body: { "error_message": "...", "error_type": "..." }.