> ## Documentation Index
> Fetch the complete documentation index at: https://docs.locusmedical.fr/llms.txt
> Use this file to discover all available pages before exploring further.

# sources

> GET /v2/sources — the publishers a retrieval can be restricted to.

Every document in the graph comes from a publisher: HAS, ebmfrance, … This route
publishes the ones that have **current** documents, and therefore the only
values `POST /v2/retrieve` accepts in `sources` and `exclude_sources`.

```json theme={null}
[
  { "id": "HAS", "name": "Haute Autorité de Santé", "docs": 412 },
  { "id": "ebmfrance", "name": "EBMFrance", "docs": 88 }
]
```

`docs` counts the publisher's current documents: it is what tells you whether
restricting a question to that source will return anything. A publisher with no
active document left is **not listed** — publishing it would let a restriction
through that can only answer empty.

## Restricting a question

```json theme={null}
{ "query": "fever in a 2-year-old", "sources": ["HAS"] }
```

Ids are case-insensitive (`"has"` matches `HAS`), but nothing more: no fuzzy
matching, no lookup on the full name. An unknown source is **refused with a 400**
(`UNKNOWN_SOURCE`) and the list of the ones that exist — serving an empty answer
would make a typo read as a gap in the corpus.

An **empty list** is refused too: "no source ticked" and "every source" are
opposite intents, and conflating them would serve the whole corpus to a client
that believed it had restricted it. To restrict nothing, omit the field.

`exclude_sources` does the reverse — drop one publisher without enumerating all
the others. The response carries `source_scope`, the restriction actually
applied, in canonical ids.

## What the restriction covers

**Every path through the graph**: excerpts, decision tables, citable units found
by concepts as well as by vectors, and the neighbourhood between units — the one
path that jumps from document to document, and therefore the only one an
excluded publisher could come back through. The second reading (`deliberate`)
fires further searches: those are restricted as well.

Two deliberate exceptions:

* **concepts** — a concept belongs to no document; it is a shared registry term.
  The citable units it brings back are restricted;
* **drugs** — the SmPC subgraph comes from the ANSM reference, not from a
  guideline publisher. Hiding a contraindication because the guideline corpus was
  narrowed would be a failure mode, not a feature.

<Note>
  On a very small publisher, vector search may return fewer than `chunk_k`
  excerpts: the vector index ranks over the whole corpus and the filter applies
  afterwards. The server oversamples to compensate, but truncation stays possible —
  better known than discovered.
</Note>
