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

# Morphik

> Main client for document operations in Morphik

## Usage

<Tabs>
  <Tab title="Sync">
    ```python theme={null}
    from morphik import Morphik

    # Without authentication
    db = Morphik()

    # With authentication
    db = Morphik("morphik://owner_id:token@api.morphik.ai")
    ```
  </Tab>

  <Tab title="Async">
    ```python theme={null}
    from morphik import AsyncMorphik

    # Without authentication
    async with AsyncMorphik() as db:
        doc = await db.ingest_text("Sample content")

    # With authentication
    async with AsyncMorphik("morphik://owner_id:token@api.morphik.ai") as db:
        doc = await db.ingest_text("Sample content")
    ```
  </Tab>
</Tabs>

## User and Folder Scoping

Morphik supports organizing and isolating data by user and folder. This provides a way to build multi-tenant applications and organize documents across projects.

### Quick Overview

<Tabs>
  <Tab title="Sync">
    ```python theme={null}
    # Folder scoping - organize by project or category
    folder = db.create_folder("project_x")
    doc = folder.ingest_text("This document belongs to Project X")

    # User scoping - isolate data by end user
    user_scope = db.signin("user123")
    doc = user_scope.ingest_text("This belongs to user123 only")

    # Combined scoping - organize by both user and folder
    user_folder_scope = folder.signin("user123")
    doc = user_folder_scope.ingest_text("This belongs to user123 in project_x")
    ```
  </Tab>

  <Tab title="Async">
    ```python theme={null}
    # Folder scoping - organize by project or category
    folder = db.create_folder("project_x")
    doc = await folder.ingest_text("This document belongs to Project X")

    # User scoping - isolate data by end user
    user_scope = db.signin("user123")
    doc = await user_scope.ingest_text("This belongs to user123 only")

    # Combined scoping - organize by both user and folder
    user_folder_scope = folder.signin("user123")
    doc = await user_folder_scope.ingest_text("This belongs to user123 in project_x")
    ```
  </Tab>
</Tabs>

Nested folders are supported across the SDK. Use canonical paths (e.g., `"/projects/alpha/specs"`) when creating or scoping folders, and pass `folder_depth` on retrieval/list helpers to include descendant folders.

For detailed documentation and examples:

* [Folder Management](/python-sdk/folders) - Organizing documents by logical groups
* [User Management](/python-sdk/users) - Multi-tenant isolation and user-level data management

## Constructor

Both clients share the same constructor parameters:

<Tabs>
  <Tab title="Sync">
    ```python theme={null}
    Morphik(
        uri: Optional[str] = None,
        timeout: int = 30,
        is_local: bool = False,
        http2: Optional[bool] = None,
        http2_fallback: bool = True,
    )
    ```
  </Tab>

  <Tab title="Async">
    ```python theme={null}
    AsyncMorphik(
        uri: Optional[str] = None,
        timeout: int = 30,
        is_local: bool = False,
        http2: Optional[bool] = None,
        http2_fallback: bool = True,
    )
    ```
  </Tab>
</Tabs>

### Parameters

* `uri` (str, optional): Morphik URI in format "morphik://\<owner\_id>:\<token>@\<host>". If not provided, connects to [http://localhost:8000](http://localhost:8000) without authentication.
* `timeout` (int, optional): Request timeout in seconds. Defaults to 30.
* `is_local` (bool, optional): Whether connecting to local development server. Defaults to False.
* `http2` (bool, optional): Enable HTTP/2 when possible. Defaults to None (auto-disabled for local).
* `http2_fallback` (bool, optional): Fall back to HTTP/1.1 if HTTP/2 fails. Defaults to True.

## Methods

Morphik provides the following methods. Each method page includes both synchronous and asynchronous versions.

### Document Ingestion

* [ingest\_text](/python-sdk/ingest_text)
* [ingest\_file](/python-sdk/ingest_file)
* [ingest\_files](/python-sdk/ingest_files)
* [ingest\_directory](/python-sdk/ingest_directory)
* [query\_document](/python-sdk/query_document)

### Document Retrieval

* [retrieve\_chunks](/python-sdk/retrieve_chunks)
* [retrieve\_chunks\_grouped](/python-sdk/retrieve_chunks_grouped)
* [retrieve\_docs](/python-sdk/retrieve_docs)
* [query](/python-sdk/query)
* [list\_documents](/python-sdk/list_documents)
* [search\_documents](/python-sdk/search_documents)
* [get\_document](/python-sdk/get_document)
* [get\_document\_by\_filename](/python-sdk/get_document_by_filename)

### Document Updates & Summaries

* [update\_document\_with\_text](/python-sdk/update_document_with_text)
* [update\_document\_with\_file](/python-sdk/update_document_with_file)
* [update\_document\_metadata](/python-sdk/update_document_metadata)
* [update\_document\_by\_filename\_with\_text](/python-sdk/update_document_by_filename_with_text)
* [update\_document\_by\_filename\_with\_file](/python-sdk/update_document_by_filename_with_file)
* [update\_document\_by\_filename\_metadata](/python-sdk/update_document_by_filename_metadata)
* [get\_document\_summary](/python-sdk/get_document_summary)
* [upsert\_document\_summary](/python-sdk/upsert_document_summary)
* [get\_document\_status](/python-sdk/get_document_status)
* [wait\_for\_document\_completion](/python-sdk/wait_for_document_completion)

### Document Management

* [get\_document\_file](/python-sdk/get_document_file)
* [extract\_document\_pages](/python-sdk/extract_document_pages)
* [get\_document\_download\_url](/python-sdk/get_document_download_url)
* [delete\_document](/python-sdk/delete_document)
* [delete\_document\_by\_filename](/python-sdk/delete_document_by_filename)
* [batch\_get\_documents](/python-sdk/batch_get_documents)
* [batch\_get\_chunks](/python-sdk/batch_get_chunks)

### Folder & User Scoping

* [folders](/python-sdk/folders)
* [create\_folder](/python-sdk/create_folder)
* [list\_folders](/python-sdk/list_folders)
* [get\_folder](/python-sdk/get_folder)
* [get\_folder\_by\_name](/python-sdk/get_folder_by_name)
* [get\_folder\_summary](/python-sdk/get_folder_summary)
* [upsert\_folder\_summary](/python-sdk/upsert_folder_summary)
* [get\_folders\_summary](/python-sdk/get_folders_summary)
* [get\_folders\_details](/python-sdk/get_folders_details)
* [add\_document\_to\_folder](/python-sdk/add_document_to_folder)
* [remove\_document\_from\_folder](/python-sdk/remove_document_from_folder)
* [delete\_folder](/python-sdk/delete_folder)
* [users](/python-sdk/users)

### Apps & Ops

* [list\_apps](/python-sdk/list_apps)
* [create\_app](/python-sdk/create_app)
* [generate\_cloud\_uri](/python-sdk/generate_cloud_uri)
* [rename\_app](/python-sdk/rename_app)
* [rotate\_app\_token](/python-sdk/rotate_app_token)
* [delete\_app](/python-sdk/delete_app)
* [requeue\_ingestion\_jobs](/python-sdk/requeue_ingestion_jobs)
* [get\_logs](/python-sdk/get_logs)
* [get\_health](/python-sdk/get_health)
* [get\_app\_storage\_usage](/python-sdk/get_app_storage_usage)
* [ping](/python-sdk/ping)

### Chat & Conversation

* [list\_chat\_conversations](/python-sdk/list_chat_conversations)
* [get\_chat\_history](/python-sdk/get_chat_history)

### Client Management

* [close](/python-sdk/close)

## Context Manager

Using the Morphik client as a context manager ensures that resources are properly closed when the context exits.

<Tabs>
  <Tab title="Sync">
    ```python theme={null}
    with Morphik() as db:
        doc = db.ingest_text("Sample content")
    ```
  </Tab>

  <Tab title="Async">
    ```python theme={null}
    async with AsyncMorphik() as db:
        doc = await db.ingest_text("Sample content")
    ```
  </Tab>
</Tabs>
