`/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](/docs/white-label/upsert-post)).

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`](/docs/white-label/query-customer).

## Concise grounded answer

One short paragraph plus citations, cheap enough to render directly and small enough to keep an agent's context window intact:

```bash
curl "https://context-link.ai/api/v1/question?query=what+is+the+refund+window" \
  -H "Authorization: Bearer $ACME_TOKEN"
```

```json
{
  "result": "ok",
  "answer": "Opened items can be returned within 14 days only if they are faulty.",
  "citations": [ { "n": 1, "title": "Acme Supply refund policy", "url": null } ],
  "format": "markdown"
}
```

## Response fields

| Field | Type | Description |
|---|---|---|
| `result` | string | The outcome: `ok`, `no_context`, or `llm_unavailable`. |
| `answer` | string | The grounded answer, `null` on `no_context` and on `llm_unavailable`. |
| `citations` | array | The sources the model actually cited, empty unless `result` is `ok`. |
| `citations[].n` | integer | The marker number used for that source in the answer text. |
| `citations[].title` | string | The source document's title, or `Untitled` when it has none. |
| `citations[].url` | string | The source document's URL, `null` for content with no address such as pushed or memory posts. |
| `format` | string | Always `markdown`. |

## Reading `result`

| 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`; 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`](/docs/white-label/query-customer) accept the token in either `Authorization: Bearer <token>` or the bare `Authorization: <token>` form. Everything else in this guide requires the `Bearer` prefix.
