Answers and citations

How ODEN returns synthesized answers and ranked citations, when to request each, and how to attribute sources in your LLM responses correctly.

Documentation1 min readUpdated 2026-07-30

Every ODEN call returns two things that work together: a synthesized answer and the ranked citations it was built from. This page is about using both well.

The answer#

results.answer is a short, synthesized answer to your query, generated from the retrieved sources and written in the query's language. It is meant to drop straight into a model's context window or a user-facing reply.

Turn it off when you only want sources — for example, when your own model will do the synthesis and you just need clean, relevant material:

{ "query": "GDPR data-transfer mechanisms 2026", "answer": false }

With answer: false, results.answer is omitted and you get citations only.

The citations#

results.citations is a ranked list, highest score first. Each entry is source metadata:

{
  "title": "Standard Contractual Clauses — European Commission",
  "url": "https://commission.europa.eu/...",
  "score": 0.938,
  "snippet": "The SCCs are model clauses adopted by the Commission for transfers to third countries."
}
  • Use score to threshold: dropping everything under, say, 0.6 is a cheap way to keep weak sources out of your context.
  • Set include_snippets: true to get one attributed sentence per source. Snippets are useful for showing users why a source was cited without fetching the page.

Attributing sources in an LLM reply#

The point of citations is that your model can attribute its claims. A simple pattern: pass the answer and the citation URLs into your prompt and ask the model to cite inline.

data = search("who won the 2026 nobel prize in physics")
sources = data["results"]["citations"]

context = data["results"]["answer"] + "\n\nSources:\n" + "\n".join(
    f"[{i+1}] {c['title']} — {c['url']}" for i, c in enumerate(sources)
)
# Feed `context` to your model with an instruction to cite [n] inline.

Caching#

Watch the cached flag. Identical queries return from cache in tens of milliseconds and are the cheapest path to the same answer. If you build an agent that may repeat queries, cache on your side too and let cached confirm when ODEN served a warm result.

Next steps#