# Read the directory by machine

> From the root pointer to the manifest in two hops, and how to check liveness before you call.


Machine access is the primary access: everything sits language-neutral at the root of openhelvetia.swiss. No account, no key, no cookies.

## Steps {#schritte}

1. **Read the root pointer.** `GET /.well-known/openhelvetia.json`: the association's identity and an object `pointers` with ten pointers, among them `directory`, `standard`, `publish`, `llms`, `security`.
2. **Fetch the index.** `pointers.directory` leads to `/directory.json`: an envelope with `version`, `$schema`, `authority` and `entries`.
3. **Fetch the manifest when it matters.** Every entry row carries the absolute URL of its manifest. `authority = manifest` means: on any divergence the manifest governs, the index is derived.
4. **Check liveness before you call.** `interfaces[].probe` names the minimal harmless call (`kind`) and what counts as an answer (`expect`); optionally `target` names a probe URL that differs from the endpoint. The probe kinds are in the [reference](../reference/probes.md).

## The envelope {#index}

```json
{
  "$schema": "https://ld.openhelvetia.swiss/ns/directory/0.2/schema",
  "authority": "manifest",
  "entries": [],
  "version": "0.2"
}
```

This is the envelope without entries; it is valid even then. Today `entries` carries the association's two own entries. The key order is the one served.

## What an entry row carries {#zeile}

- `slug` — registry identifier, also the path under `/directory/`
- `name`, `description` — language maps
- `publisher`, `license` — IRIs
- `manifest` — absolute URL of the byte-identical manifest copy
- `interfaces[]` — `type`, `endpoint`, optional `tier`, `docs` and `probe`

Every surface at the root: [Machine surfaces](../reference/machine-surfaces.md).

---

Source: docs/en/how-to/read-the-directory.md
