> ## 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.

# ConareDB quickstart

> Provision a ConareDB key, upsert vectored rows into a namespace, and run a hybrid vector plus keyword plus chronological search in three requests.

<Steps>
  <Step title="Get a key">
    Provision a `cdb_...` key from the [ConareDB console](https://db.conare.ai). Keys are scoped to your namespace prefix with `read`/`write` permissions, shown once, and sent as a Bearer token:

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

  <Step title="Write rows">
    Namespaces are created on the first write — no schema, no ceremony. Each row is a node with an external `id`, properties, and an optional vector. The vector dimension is fixed by the first vectored write and validated on every subsequent one.

    ```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` is a full-row replace keyed on `id` — write the same `id` again and the old row (and its vector) is replaced, not merged.
  </Step>

  <Step title="Search">
    One request runs up to three ranked branches — vector ANN, BM25 keyword, and chronological — over the same filtered row set:

    ```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}
    }
    ```

    Branches return independent ranked lists so you control fusion (RRF or your own) client-side — the same architecture Conare's own memory plane uses.
  </Step>
</Steps>

<Note>
  Need vectors? `POST /api/v1/embeddings` on the [Embeddings API](/embeddings/overview) returns unit-normalized 1024-dim vectors ready to store.
</Note>

Next: the full [search reference](/db/search), [writes & bulk ingest](/db/writes), or [namespaces & keys](/db/namespaces).
