/question hands you one concise grounded answer with citations, drawn from that customer's own index plus anything you indexed organisation-wide for all customers (see Shared content across all customers).
Reach for it when the result goes straight into your UI, or when you are feeding an agent and would rather spend a few hundred tokens than the user's full context. When you want the raw passages for your own model instead, use GET /context.
Concise grounded answer
One short paragraph plus citations, cheap enough to render directly and small enough to keep an agent's context window intact:
The default response stays exactly as shown above. To receive the answer in the same structured shape as GET /context, add response_format=structured:
The structured response has zero or one result and never has a top-level result. When present, its content is the answer, position is null, rank is 1, score is null, and content_sha is the answer's SHA-256 digest. sources contains the cited documents and their citation numbers and connection metadata. No context and a 503 model failure both return markdown: null and empty results in this format; the HTTP status distinguishes the model failure. If response_format is absent or has any value other than structured, /question returns the existing result, answer, citations, and format payload unchanged.
Response fields
resultstringok, no_context, or llm_unavailable.answerstringnull on no_context and on llm_unavailable.citationsarrayresult is ok.citations[].nintegercitations[].titlestringUntitled when it has none.citations[].urlstringnull for content with no address such as pushed or memory posts.formatstringmarkdown.The fields above describe the default response.
Structured response:
| Field | Type | Description |
|---|---|---|
format |
string | Always structured. |
query |
string | The question used to generate the answer. |
markdown |
string or null | The answer as markdown, or null when no answer was generated. |
results |
array | Zero or one answer result. |
results[].content |
string | The grounded answer. |
results[].position |
null | Always null. |
results[].rank |
integer | Always 1. |
results[].score |
null | Always null. |
results[].content_sha |
string | SHA-256 digest of the answer. |
results[].sources |
array | The sources cited by the answer. |
results[].sources[].citation |
integer | The marker number used for that source in the answer. |
results[].sources[].uid |
string | The source document's public identifier. |
results[].sources[].title |
string | The source document's title. |
results[].sources[].url |
string | The source document's URL, or null when it has none. |
results[].sources[].source_updated_at |
string | When the source document was last updated, in ISO 8601 format. |
results[].sources[].connection |
object | The source connection's uid, type, name, and absolute logo_url. |
Reading result in the default response
| Value | Meaning |
|---|---|
ok |
An answer was grounded in that customer's content. |
no_context |
Nothing in that customer's index was relevant. answer is null. |
llm_unavailable |
The model call failed. Served with a 503. |
Asking one customer's token about another customer's content returns no_context in the default response, or markdown: null and empty results in the structured response; that is the isolation boundary doing its job.
Rate limit: 2 requests per 10 seconds, per token. Each request costs an LLM call of its own, which is why it is tighter than /context.
Health check for a stored token: GET /api/v1/ping with the same header.
/question and /context accept the token in either Authorization: Bearer <token> or the bare Authorization: <token> form. Everything else in this guide requires the Bearer prefix.