Skip to content

Deepset API SDK

The Deepset API SDK provides a Python interface for interacting with the deepset AI Platform. It enables developers to build, manage, and deploy AI-powered applications through a structured, asynchronous API.

How-to Guides

How to Set Up the Client

This guide shows you how to authenticate and configure the AsyncDeepsetClient for your environment.

Using environment variables (recommended):

from deepset_mcp.api import AsyncDeepsetClient

# Reads DEEPSET_API_KEY from environment
async with AsyncDeepsetClient() as client:
    workspaces = await client.workspaces().list()
    print(f"Available workspaces: {len(workspaces)}")

Providing credentials directly:

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient(api_key="your-api-key") as client:
    # Your code here
    pass

Configuring for self-hosted instances:

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient(
    base_url="https://your-instance.deepset.ai/api"
) as client:
    # Your code here  
    pass

How to Create and Deploy Pipelines

This guide shows you how to create, validate, and deploy AI pipelines from YAML configurations.

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient() as client:
    pipelines = client.pipelines("my-workspace")

    # Create pipeline from YAML
    yaml_config = """
components:
  llm:
    type: haystack.components.generators.openai.OpenAIGenerator
    params:
      model: gpt-5
  answer_builder:
    type: haystack.components.builders.answer_builder.AnswerBuilder
connections:
    - sender: llm.replies
      receiver: answer_builder.replies
inputs:
    query:
        llm.prompt
        answer_builder.query
outputs:
    answers: answer_builder.answers
    """

    # Validate before creating
    validation = await pipelines.validate(yaml_config)
    if validation.valid:
        # Create the pipeline
        pipeline = await pipelines.create(
            pipeline_name="my-rag-pipeline",
            yaml_config=yaml_config
        )

        # Deploy the pipeline
        deployment = await pipelines.deploy("my-rag-pipeline")
        if deployment.valid:
            print("Pipeline deployed successfully!")
        else:
            print("Deployment failed:", deployment.errors)

How to Search with Pipelines

This guide shows you how to perform both standard and streaming searches with deployed pipelines.

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient() as client:
    pipelines = client.pipelines("my-workspace")

    # Standard search
    results = await pipelines.search(
        pipeline_name="my-rag-pipeline",
        query="What is artificial intelligence?",
        params={"top_k": 5},
    )

    # Real-time streaming search
    print("Streaming response:", end=" ")
    async for event in pipelines.search_stream(
        pipeline_name="my-rag-pipeline", 
        query="Explain machine learning"
    ):
        if event.type == "delta":
            print(event.delta.text, end="")
        elif event.type == "result":
            print(f"\n\nFinal result received: \n\n{event.result}")

How to Create Indexes

This guide shows you how to set up indexes for RAG applications or other applications that need access to indexed data.

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient() as client:
    indexes = client.indexes("my-workspace")

    # Create an index for document storage
    index_config = """
    document_store:
      type: WeaviateDocumentStore
      params:
        host: "http://localhost"
        port: 8080
    indexing_pipeline:
      type: Pipeline
      components:
        converter:
          type: TextFileToDocument
        embedder:
          type: SentenceTransformersDocumentEmbedder
          params:
            model: "sentence-transformers/all-MiniLM-L6-v2"
        writer:
          type: DocumentWriter
          params:
            document_store:
              type: WeaviateDocumentStore
              params:
                host: "http://localhost"
                port: 8080
    """

    await indexes.create(
        index_name="document-index",
        yaml_config=index_config,
        description="Document index for RAG pipeline"
    )

    await indexes.deploy(index_name="document-index")

How to Organize Resources with Workspaces

Workspaces separate data, indexes, and pipelines. This guide shows you how to create and manage workspaces for organizing your resources.

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient() as client:
    workspaces_client = client.workspaces()

    # Create development and production workspaces
    await workspaces_client.create(name="development")
    await workspaces_client.create(name="production")

    # List all workspaces
    workspaces = await workspaces_client.list()
    for workspace in workspaces:
        print(f"Workspace: {workspace.name} (ID: {workspace.workspace_id})")

    # Use workspace-specific resources
    dev_pipelines = client.pipelines("development")
    prod_pipelines = client.pipelines("production")

How to Use Pipeline Templates

This guide shows you how to find and use existing pipeline templates to accelerate development.

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient() as client:
    templates = client.pipeline_templates("my-workspace")

    # Find suitable templates
    available_templates = await templates.list_templates(
        limit=10
    )

    # Use a template to create a pipeline
    if available_templates.data:
        template = await templates.get_template(available_templates.data[0].name)

        pipelines = client.pipelines("my-workspace")
        await pipelines.create(
            pipeline_name="pipeline-from-template",
            yaml_config=template.yaml_config
        )

How to Handle Large Datasets with Pagination

This guide shows you how to work with paginated responses for large datasets using both automatic and manual approaches.

Automatic iteration across all pages:

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient() as client:
    pipelines = client.pipelines("my-workspace")

    # Get first page
    paginator = await pipelines.list(limit=2)

    # Automatically iterate through ALL pages and items
    all_pipelines = []
    async for pipeline in paginator:  # Handles pagination automatically
        all_pipelines.append(pipeline)
        print(f"Processing pipeline: {pipeline.name}")

    print(f"Processed {len(all_pipelines)} total pipelines")

Manual pagination with cursor control:

If you need more control over pagination, you can use the next_cursor attribute on the PaginatedResponse to iterate manually over pages.

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient() as client:
    pipelines = client.pipelines("my-workspace")

    # Manual pagination using next_cursor
    current_page = await pipelines.list(limit=2)
    page_number = 1
    all_pipelines = []

    while current_page:
        print(f"Processing page {page_number}: {len(current_page.data)} pipelines")
        all_pipelines.extend(current_page.data)

        # Get next page manually using the cursor
        if current_page.has_more and current_page.next_cursor:
            current_page = await pipelines.list(limit=2, after=current_page.next_cursor)
            page_number += 1
        else:
            current_page = None

    print(f"Manual pagination: {len(all_pipelines)} total pipelines")

How to Manage Secrets and Integrations

This guide shows you how to securely store API keys and configure external service integrations.

from deepset_mcp.api import AsyncDeepsetClient

async with AsyncDeepsetClient() as client:
    # Manage secrets for API keys
    secrets_client = client.secrets()
    await secrets_client.create(
        name="openai-api-key",
        secret="sk-your-openai-key"
    )

    # Check available integrations
    integrations = client.integrations()
    available = await integrations.list()

    for integration in available.integrations:
        print(f"Provider: {integration.provider}")
        print(f"Domain: {integration.provider_domain}")

How to Handle Errors

This guide shows you how to implement proper error handling for different types of API failures.

from deepset_mcp.api import AsyncDeepsetClient
from deepset_mcp.api.exceptions import (
    BadRequestError,
    ResourceNotFoundError,
    UnexpectedAPIError
)

async with AsyncDeepsetClient() as client:
    pipelines = client.pipelines("my-workspace")

    try:
        pipeline = await pipelines.get("non-existent-pipeline")
    except ResourceNotFoundError:
        print("Pipeline not found - creating new one...")
        # Create pipeline logic here
    except BadRequestError as e:
        print(f"Invalid request parameters: {e}")
    except UnexpectedAPIError as e:
        print(f"API error occurred: {e}")
        # Log error and retry logic here

How to Configure Custom Transport Settings

This guide shows you how to customize HTTP client behavior for specific requirements. The transport_config is passed through to httpx.AsyncClient. See all possible parameters in their documentation.

from deepset_mcp.api import AsyncDeepsetClient

# Configure custom timeouts and retry behavior
transport_config = {
    "timeout": 60.0,  # 60 second timeout
    "headers": {
        "SOME-CUSTOM": "HEADER",
    }
}

async with AsyncDeepsetClient(
    transport_config=transport_config
) as client:
    # Client uses custom transport settings
    pass

How to Debug and Monitor Pipelines

This guide shows you how to troubleshoot pipeline issues using debug information and logs.

from deepset_mcp.api import AsyncDeepsetClient
from deepset_mcp.api.pipeline.models import LogLevel

async with AsyncDeepsetClient() as client:
    pipelines = client.pipelines("my-workspace")

    # Search with debugging enabled
    debug_results = await pipelines.search(
        pipeline_name="my-pipeline",
        query="test query",
        debug=True,           # Enable debug info
    )

    # Access debug information
    if debug_results.debug:
        print("Debug info:", debug_results.debug)

    # Get pipeline logs for troubleshooting
    logs = await pipelines.get_logs(
        pipeline_name="my-pipeline",
        limit=100,
        level=LogLevel.ERROR
    )

    for log_entry in logs.data:
        print(f"[{log_entry.timestamp}] {log_entry.level}: {log_entry.message}")

How to Use in Synchronous Environments

This guide shows how to make API requests through the client in synchronous contexts.

import asyncio
from deepset_mcp.api import AsyncDeepsetClient

client = AsyncDeepsetClient()
pipelines = client.pipelines("my-workspace")
my_pipeline = asyncio.run(pipelines.get("my-pipeline"))

valid = asyncio.run(pipelines.validate(my_pipeline.yaml_config))

if valid.valid:
    print("The pipeline is valid!")