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

# Quickstart

> Provisioniere einen ConareDB-Key, upserte vektorisierte Zeilen in einen Namespace und starte eine hybride Vektor-, Keyword- und Zeitsuche in drei Requests.

<Steps>
  <Step title="Key besorgen">
    Erstelle in der [ConareDB-Console](https://db.conare.ai) einen `cdb_...`-Key. Keys sind auf dein Namespace-Präfix mit `read`/`write`-Berechtigungen gescopt, werden einmalig angezeigt und als Bearer-Token gesendet:

    ```bash theme={null}
    export CONAREDB_API_KEY='cdb_...'
    ```
  </Step>

  <Step title="Zeilen schreiben">
    Namespaces werden beim ersten Schreibvorgang angelegt – kein Schema, keine Zeremonie. Jede Zeile ist ein Knoten mit externer `id`, Properties und optionalem Vektor. Die Vektordimension wird durch den ersten vektorisierten Schreibvorgang festgelegt und bei jedem weiteren validiert.

    ```bash theme={null}
    curl -s https://db.conare.ai/v1/namespaces/acme-docs/query \
      -H "Authorization: Bearer $CONAREDB_API_KEY" \
      -d '{
        "request_type": "write",
        "query": {
          "queries": [{"Query": {"name": "w", "condition": null, "steps": [
            {"UpsertN": {"id": "chunk-123", "label": "chunk",
              "props": {"text": "Refund policy: 30 days, no questions.", "created_at_ms": 1720000000000, "project": "docs"},
              "vector": [0.0123, -0.0456]}}
          ]}}],
          "returns": ["w"]
        }
      }'
    ```

    `UpsertN` ist ein vollständiger Zeilenersatz mit `id` als Schlüssel – schreibst du dieselbe `id` erneut, wird die alte Zeile (und ihr Vektor) ersetzt, nicht gemergt.
  </Step>

  <Step title="Suchen">
    Ein Request führt bis zu drei gerankte Zweige aus – Vektor-ANN, BM25-Keyword und chronologisch – über derselben gefilterten Zeilenmenge:

    ```bash theme={null}
    curl -s https://db.conare.ai/v1/namespaces/acme-docs/search \
      -H "Authorization: Bearer $CONAREDB_API_KEY" \
      -d '{
        "label": "chunk",
        "filter": ["project", "Eq", "docs"],
        "include_props": ["text"],
        "branches": {
          "vector":  {"embedding": [0.0119, -0.0442], "top_k": 10},
          "keyword": {"query": "refund policy", "top_k": 10}
        }
      }'
    ```

    ```json theme={null}
    {
      "vector":  {"hits": [{"id": "chunk-123", "score": 0.98, "props": {"text": "..."}}], "server_us": 412},
      "keyword": {"hits": [{"id": "chunk-123", "score": 14.2, "props": {"text": "..."}}], "mode": "and", "server_us": 200}
    }
    ```

    Zweige liefern unabhängige gerankte Listen, damit du die Fusion (RRF oder deine eigene) clientseitig steuerst – dieselbe Architektur, die auch Conares eigene Memory-Plane nutzt.
  </Step>
</Steps>

<Note>
  Du brauchst Vektoren? `POST /api/v1/embeddings` auf der [Embeddings-API](/embeddings/overview) liefert einheitsnormierte 1024-dimensionale Vektoren, bereit zum Speichern.
</Note>

Weiter: die vollständige [Search-Referenz](/db/search), [Writes & Bulk-Ingest](/db/writes) oder [Namespaces & Keys](/db/namespaces).
