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

# List watched folders

> The folders someone linked, as opposed to the documents inside them. Adding a folder
creates one document per file and would otherwise forget the folder itself, which is the
only record that files arriving LATER were asked for too.

`enabled` is false when the daemon has watching switched off (`MEMLOOM_SYNC=off`).
"Nothing is watched" and "watching is off" are different answers, and a client that
cannot tell them apart will report the wrong one.




## OpenAPI

````yaml /openapi.yaml get /context/roots
openapi: 3.1.0
info:
  title: memloom local API
  version: 0.1.0
  description: >
    The HTTP API served by the `memloom serve` daemon on your machine. The CLI,
    the MCP server,

    and the viewer all route through this API, so every client shares one
    consistent view of

    your memories.


    ## Owners


    One daemon can serve more than one owner. Every owner-scoped endpoint, reads
    as well as

    writes, acts for the owner named by the `X-Memloom-Owner` request header: a
    uuid, sent on

    every request by a client bound to that owner. A request without the header
    gets the

    daemon's own default owner (`MEMLOOM_OWNER_ID` in its environment, or the
    sentinel owner

    when that is unset), which is what a single-owner install has always used
    and what the

    browser-based Console gets. `GET /health` reports that default.


    A malformed header is refused with 400 rather than coerced. The three
    endpoints that also

    accept an `ownerId` in their body (`/memory/save`, `/context/add`,
    `/context/url`) refuse a

    body value that disagrees with the header, rather than silently preferring
    one.


    Store-wide endpoints carry no owner: the speech-model catalog, reconcile
    settings, the

    connector scopes, the ingest queue, and `/health`.


    No authentication: the daemon binds to `127.0.0.1` only and is reachable
    solely from your

    own machine. Browser clients on other localhost ports are allowed via CORS.
    The owner header

    is therefore a separation mechanism, not an authentication one: any process
    on your machine

    can name any owner. It keeps two agents or two people out of each other's
    memories; it is

    not a boundary between untrusted users.
servers:
  - url: http://127.0.0.1:4319
    description: Local memloom daemon
security: []
paths:
  /context/roots:
    get:
      summary: List watched folders
      description: >
        The folders someone linked, as opposed to the documents inside them.
        Adding a folder

        creates one document per file and would otherwise forget the folder
        itself, which is the

        only record that files arriving LATER were asked for too.


        `enabled` is false when the daemon has watching switched off
        (`MEMLOOM_SYNC=off`).

        "Nothing is watched" and "watching is off" are different answers, and a
        client that

        cannot tell them apart will report the wrong one.
      operationId: listContextRoots
      parameters:
        - $ref: '#/components/parameters/OwnerHeader'
      responses:
        '200':
          description: Linked folders, newest first.
          content:
            application/json:
              schema:
                type: object
                properties:
                  enabled:
                    type: boolean
                    description: The daemon is watching. False under MEMLOOM_SYNC=off.
                  roots:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        path:
                          type: string
                        watching:
                          type: boolean
                        documents:
                          type: integer
                          description: >-
                            Documents in the store whose path sits under this
                            root.
                        lastScanAt:
                          type: string
                          format: date-time
                          nullable: true
                          description: >
                            The catch-up watermark. A rescan only reads entries
                            modified since

                            this, plus anything the store has never seen.
                        createdAt:
                          type: string
                          format: date-time
                  stats:
                    type: object
                    description: Present only while watching is enabled.
                    properties:
                      roots:
                        type: integer
                      files:
                        type: integer
                        description: >-
                          Files watched individually, outside any watched
                          folder.
                      queued:
                        type: integer
                        description: >-
                          Paths handed to the ingest queue since the daemon
                          started.
                      missing:
                        type: integer
                        description: Documents marked missing since the daemon started.
                      capped:
                        type: boolean
                        description: The last rescan hit the walk cap.
components:
  parameters:
    OwnerHeader:
      name: X-Memloom-Owner
      in: header
      required: false
      description: >
        The owner this request acts for. Applies to every owner-scoped endpoint,
        reads as well

        as writes. Omit it and the daemon's own default owner answers (see `GET
        /health`), which

        is what a single-owner install has always used. A value that is not a
        uuid is refused

        with 400 rather than coerced.
      schema:
        type: string
        format: uuid
      example: 11111111-1111-4111-8111-111111111111

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.