# Anthropic
Source: https://docs.hymalaia.com/ai-configs/anthropic
Configure Hymalaia to use different Anthropic Claude models like Claude 3.5 Sonnet.
# Anthropic
Hymalaia supports Claude models from [Anthropic](https://www.anthropic.com/), including the high-performing **Claude 3.5 Sonnet**.
***
## 🔧 Configuration Steps
Setting up Anthropic in Hymalaia is simple:
1. **Get your API Key**
* Go to the [Anthropic Console](https://console.anthropic.com/)
* Sign in and generate an API key
2. **Configure in Hymalaia**
* Open the **Admin Panel**
* Navigate to **LLM Providers**
* Select **Anthropic**
* Paste your API Key into the `API Key` field
* Choose your preferred Claude model (e.g., `claude-3.5-sonnet`, `claude-3-opus`, etc.)
> ✅ Once saved, Hymalaia will route prompts through the selected Anthropic model.
***
## 💡 Notes
* Claude models are especially strong in **reasoning** and **multi-step tasks**
* The default recommended model is `claude-3.5-sonnet`
* Model switching is handled via the [`LiteLLM`](https://github.com/BerriAI/litellm) library for flexibility
***
## ⚠️ Data Policy
Be sure to review Anthropic's [data usage policies](https://www.anthropic.com/legal)\
Depending on your use case, you may prefer a model or provider with specific retention policies.
***
## 🧠 AnthropicLLMProvider
The integration with Hymalaia is handled internally through `AnthropicLLMProvider`, giving you robust Claude support with minimal setup.
***
# Azure OpenAI
Source: https://docs.hymalaia.com/ai-configs/azure-openAI
Configure Hymalaia to use GPT models hosted on Azure OpenAI.
Hymalaia supports GPT models deployed through **Azure OpenAI** for full enterprise-level flexibility and control.
***
## 🛠 Setting up Azure OpenAI Endpoint
Follow these steps to integrate Azure OpenAI with Hymalaia:
### 1. Access Azure OpenAI Service
* Go to the [Azure Portal](https://portal.azure.com/)
* Search for **Azure OpenAI Service**
### 2. Create a New Resource
* Click **"Create a resource"**
* Create a **new resource group**
* Fill in the required form fields to configure your instance
### 3. Complete Deployment
* Wait for the deployment to finish
* Navigate to [Azure OpenAI Studio](https://oai.azure.com/)
### 4. Open the Chat Panel
* In the Studio, go to the **Chat** panel
### 5. Deploy a Model
* Click **"Create a new deployment"**
* Select a **chat completion model** (e.g., `gpt-4`, `gpt-35-turbo`)
### 6. Configure Settings
* Choose your model, set any parameters
* Deploy it
### 7. Test the Configuration
* Use the chat bar on the right to test your model
### 8. Get Your Credentials
* Click **"View Code"** in the Studio
* Copy the following credentials:
* `API version`: The string after `?api-version=...`
* `API Base`: The `Endpoint` URL
* `API Key`: The obfuscated API key
***
## ✅ Using with Hymalaia
1. Go to the **Admin Panel**
2. Select **LLM Providers**
3. Choose **Azure OpenAI**
4. Paste in your credentials:
* **API Base**
* **API Key**
* **API Version**
* **Deployment name** (the name you used during model deployment)
Hymalaia will now route queries through your Azure-hosted GPT model.
***
# Custom model server
Source: https://docs.hymalaia.com/ai-configs/custom-model-server
# Custom Model Server
Hymalaia can be configured to use a custom model server through REST requests. This guide explains how to set up and integrate your own model server with Hymalaia.
## Overview
Hymalaia supports making requests to arbitrary model servers via REST API endpoints. You can optionally include an access token for authentication. For custom request formats or response handling, you may need to update and rebuild the Hymalaia containers.
## Extending Hymalaia for Your Custom Model Server
To make Hymalaia compatible with your custom model server, you'll need to implement a minimal interface that can support any arbitrary LLM Model Server. The process involves:
1. Updating the model server integration code
2. Rebuilding the necessary components
3. Configuring the connection settings
The default implementation provides a reference that you can modify according to your needs.
## Example Implementation: Llama-2-13B-chat-GGML with FastAPI
As a practical example, you can set up Hymalaia with a self-hosted Llama-2-13B-chat-GGML model using a custom FastAPI server.
### Key Components:
* FastAPI server hosting the model
* Llama-2-13B-chat-GGML model
* Custom request/response handling
### Demo Setup
You can try this implementation using Google Colab for GPU access. However, please note that Colab is not recommended for production deployments.
For detailed implementation steps and code examples, refer to our [Medium blog post](https://medium.com/your-blog-post-link).
## Configuration Steps
1. **Server Setup**
```yaml theme={null}
model_server:
type: custom
url: "http://your-model-server:port"
# Optional authentication token
access_token: "your-access-token"
```
2. **Request Format**
Customize the request format according to your model server's API:
```json theme={null}
{
"prompt": "Your prompt here",
"parameters": {
"temperature": 0.7,
"max_tokens": 500
// Add other parameters as needed
}
}
```
3. **Response Handling**
Ensure your model server returns responses in a compatible format:
```json theme={null}
{
"response": "Model generated text",
"metadata": {
// Additional response metadata
}
}
```
## Best Practices
* Implement proper error handling
* Set up authentication if needed
* Monitor server performance
* Configure appropriate timeout values
* Implement rate limiting if necessary
## Security Considerations
* Use HTTPS for production deployments
* Implement proper authentication
* Secure your API endpoints
* Monitor for unusual activity
* Regular security updates
## Troubleshooting
Common issues and solutions:
* Connection timeouts
* Authentication errors
* Response format mismatches
* Resource constraints
For additional support or questions, please refer to our documentation or community forums.
# FastChat
Source: https://docs.hymalaia.com/ai-configs/fastChat
# FastChat
Configure Hymalaia to use FastChat model servers.
Refer to [Model Configs](/docs/model-configs) for how to set the environment variables for your particular deployment.
> **Note**: While we support self hosted LLMs, you will get significantly better responses with a more powerful model like GPT-4.
## What is FastChat
FastChat is a way to easily host LLMs on cli, using their web client, or as an API server. For the Hymalaia use case we will focus on interfacing with the model through the API server. See here for more information: [FastChat OpenAI API Documentation](https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md)
In this case, we use LiteLLM's custom model server option. See here for more information: [LiteLLM Custom OpenAI Proxy Documentation](https://litellm.vercel.app/docs/providers/custom_openai_proxy)
## Set Hymalaia to use FastChat Server
On the LLM page in the Admin Panel add a Custom LLM Provider with the following settings. Note that the Provider Name is OpenAI, since FastChat provides an OpenAI compatible API.
### Hints:
* To point to other Docker containers running locally (e.g. accessible at [http://localhost](http://localhost)), use `http://host.docker.internal`.
* Don't forget to include the `/v1` in the API base.
## Environment Variables
You may also want to update some of the environment variables depending on your model choice / how you're running FastChat (e.g. on CPU vs GPU):
```bash theme={null}
# Let's also make some changes to accommodate the weaker locally hosted LLM
QA_TIMEOUT=120 # Set a longer timeout, running models on CPU can be slow
# Always run search, never skip
DISABLE_LLM_CHOOSE_SEARCH=True
# Don't use LLM for reranking, the prompts aren't properly tuned for these models
DISABLE_LLM_CHUNK_FILTER=True
# Don't try to rephrase the user query, the prompts aren't properly tuned for these models
DISABLE_LLM_QUERY_REPHRASE=True
# Don't use LLM to automatically discover time/source filters
DISABLE_LLM_FILTER_EXTRACTION=True
# Uncomment this one if you find that the model is struggling (slow or distracted by too many docs)
# Use only 1 section from the documents and do not require quotes
# QA_PROMPT_OVERRIDE=weak
```
# GenAI Overview
Source: https://docs.hymalaia.com/ai-configs/genAI-overview
Overview of the Generative AI functionality and LLM integrations in Hymalaia.
This section gives an overview of the **Generative AI capabilities** in Hymalaia and how **Large Language Models (LLMs)** are integrated into the system.
***
## LLM Options
Hymalaia supports a wide range of **cloud-based** and **self-hosted** LLMs:
### ✅ Cloud Providers Supported:
* OpenAI (e.g., GPT-4, GPT-4o)
* Anthropic (Claude 3.5 Sonnet)
* Azure OpenAI
* HuggingFace
* Replicate
* AWS Bedrock
* Cohere
* ... and many more.
### 🏠 Self-Hosted Options:
* **Ollama**
* **GPT4All**
* Any LLM compatible with **OpenAI’s API format**
> Hymalaia relies on the excellent [`LiteLLM`](https://github.com/BerriAI/litellm) and Langchain libraries to support these integrations.
***
## What are Generative AI (LLM) models used for?
LLMs are used to:
* **Interpret** relevant documents retrieved via search
* **Extract useful knowledge** from those documents
* **Generate human-readable answers** to user queries
This is the core of Hymalaia **AI Answering** functionality.
***
## What is the default LLM?
Our **default recommendation** is:
* `gpt-4` (OpenAI)
* `Claude 3.5 Sonnet` (Anthropic)
Other high-quality recommended options:
* `Azure OpenAI`
* `Claude via Bedrock`
* `Self-hosted LLaMA 3.1 70B / 405B`
These provide an excellent balance between quality, latency, and reliability.
***
## Why use a different model?
There are several reasons to **customize your LLM provider**:
* Use a **cheaper or faster model** (e.g., `gpt-4o`)
* Select a provider with a **more favorable data retention policy**
> *Note*: OpenAI and Azure OpenAI retain logs for **30 days** for misuse monitoring
* **Self-host** your own model for full **control and flexibility**
* Choose a **fine-tuned model** for a specific domain (e.g., legal, medical, technical)
> 🔐 Generative AI is the **only part of Hymalaia** that sends data to a third-party service.\
> You can avoid this by self-hosting a model — but note the potential **performance tradeoffs**.
***
## Hymalaia LLM Configs
To configure LLMs:
* Go to the **Admin Panel > LLMs**
* Add or edit your model configurations
### ✨ Unique to Hymalaia:
You can **set up multiple LLM providers** and assign them to different **assistants**.\
This allows you to mix and match models based on:
* Speed
* Quality
* Specialization
* Cost
***
## Next Steps
Check out the following examples for how to configure specific LLM providers, or go to the [Admin Panel](./admin_panel) to get started.
> 🙋 Need help? The Hymalaia team is here — don’t hesitate to reach out!
# HuggingFace Inference API
Source: https://docs.hymalaia.com/ai-configs/huggingface-inference-api
Configure Hymalaia to use HuggingFace Inference APIs
To use HuggingFace Inference APIs with Hymalaia, follow the instructions below.
## 🧾 Prerequisites
You must have a [Pro Account](https://huggingface.co/pricing) with HuggingFace to obtain an API key.
> ⚠️ **Note**: As of **November 2023**, HuggingFace no longer supports very large models (over 10GB) like `LLaMA-2-70B` on the Pro Plan. You’ll need to:
>
> * Use a **dedicated Inference Endpoint** (paid)
> * Or subscribe to an **Enterprise Plan**
>
> The Pro Plan still works with smaller models, but these may yield suboptimal results for Hymalaia.
## 🔑 Get Your Access Token
1. Go to your HuggingFace [user settings](https://huggingface.co/settings/tokens).
2. Copy your **User Access Token** (`HFAccessToken`).
## ⚙️ Set Up Hymalaia with HuggingFace
Refer to your deployment-specific documentation for setting environment variables.
## 🧠 Using LLaMA-2-70B via Inference API
To configure Hymalaia for **next-token generation** using HuggingFace's Inference API:
1. Navigate to the **LLM** page in the Hymalaia Admin Panel.
2. Add a **Custom LLM Provider** with the following identifiers:
```bash theme={null}
HFCustomLLMProvider1
HFCustomLLMProvider2
```
These custom providers allow Hymalaia to route prompt completion requests to the HuggingFace-hosted model endpoint.
***
For more detailed setup and environment configuration examples, refer to the [Model Configs](../model_configs).
# Ollama
Source: https://docs.hymalaia.com/ai-configs/ollama
Configure Hymalaia to use Ollama
To use Ollama with Hymalaia, follow the instructions below.
## 🧾 Prerequisites
You need to have [Ollama](https://ollama.ai/) installed on your system. You can find installation instructions and source code at:
* [Ollama Website](https://ollama.ai/)
* [Ollama GitHub Repository](https://github.com/jmorganca/ollama)
> ⚠️ **Note**: While we support self-hosted LLMs, you will get significantly better responses with more powerful models like GPT-4.
## 🚀 Getting Started with Ollama
1. Install Ollama following the instructions for your operating system
2. Start a model using the command:
```bash theme={null}
ollama run llama2
```
3. Verify the API works with a test request:
```bash theme={null}
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt":"Why is the sky blue?"
}'
```
## ⚙️ Set Up Hymalaia with Ollama
1. Navigate to the **LLM** page in the Hymalaia Admin Panel
2. Add a **Custom LLM Provider** with the following identifiers:
```bash theme={null}
OllamaLLMProvider1
OllamaLLMProvider2
```
> 🔍 **Note**: For the API Base, when using Docker, point to `host.docker.internal` instead of `localhost` (e.g., `http://host.docker.internal:11434`).
## 🛠️ Environment Configuration
You may want to adjust these environment variables to optimize for locally hosted LLMs:
```bash theme={null}
# Extend timeout for CPU-based model execution
QA_TIMEOUT=120
# Always run search, never skip
DISABLE_LLM_CHOOSE_SEARCH=True
# Disable LLM-based chunk filtering
DISABLE_LLM_CHUNK_FILTER=True
# Disable query rephrasing
DISABLE_LLM_QUERY_REPHRASE=True
# Disable automatic filter extraction
DISABLE_LLM_FILTER_EXTRACTION=True
# Optional: Use simplified prompting for weaker models
# QA_PROMPT_OVERRIDE=weak
```
***
For more detailed setup and environment configuration examples, refer to the [Model Configs](../model_configs).
# OpenAI
Source: https://docs.hymalaia.com/ai-configs/openAI
Configure Hymalaia to use different OpenAI models via API key.
This page explains how to configure Hymalaia to use OpenAI’s powerful LLMs like `gpt-4`, `gpt-4o`, and more.
***
## 🔧 Configuration Steps
OpenAI integration in Hymalaia is very straightforward:
1. **Get your API Key**
* Go to the [OpenAI Developer Platform](https://platform.openai.com/account/api-keys)
* Log in and generate a new API key
2. **Add your key to Hymalaia**
* Go to the **Admin Panel** in Hymalaia
* Navigate to **LLM Providers**
* Select **OpenAI**
* Paste your API Key in the `API Key` field
* Choose the model you'd like to use (e.g., `gpt-4`, `gpt-4o`)
> ✅ That’s it! Hymalaia is now connected to OpenAI’s API.
***
# Vertex AI
Source: https://docs.hymalaia.com/ai-configs/vertex-ai
Configure Hymalaia to use Vertex AI for LLMs via Google Cloud.
Hymalaia supports integration with **Vertex AI**, the managed AI platform by Google Cloud.
You can configure Vertex AI using **two methods**:
* ✅ `gcloud CLI` authentication
* 🔐 `Service Account` authentication
***
## ✅ Use the gcloud CLI to authenticate
1. **Install the gcloud CLI**\
[Install gcloud CLI](https://cloud.google.com/sdk/docs/install)
2. **Authenticate using the CLI**\
Run the following on the machine where Hymalaia is running:
```bash theme={null}
gcloud auth application-default login
```
3. **Configure in Hymalaia Admin Panel**
* Go to **Admin Panel → LLM Providers**
* Add a **Custom LLM Provider**
* Fill in the necessary fields:
* **Provider Name**: VertexAI
* **Project ID**: `YOUR_GCP_PROJECT_ID`
* **Location/Region**: (e.g. `us-central1`)
* **Model**: The LLM you want to use (e.g. `text-bison@001`)
4. **Save and Test**\
Hymalaia should now be able to call Vertex AI using the gcloud credentials.
***
## 🔐 Use a Service Account to authenticate
1. **Create a Service Account**
* Go to the [GCP Console → IAM & Admin → Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts)
* Click **+ Create Service Account**
* Name it something like `hymalaia-vertex-ai`
* Assign the **Vertex AI Administrator** role
2. **Generate a Key**
* Click into your new service account
* Go to the **Keys** tab
* Click **Add Key → Create New Key → JSON**
* Download and save the `.json` file
3. **Configure in Hymalaia Admin Panel**
* Go to **Admin Panel → LLM Providers**
* Add a **Custom LLM Provider**
* Provide:
* **Service Account Credentials**: Paste the **contents** of the JSON file
* **Project ID**
* **Location**
* **Model**
4. **Save and Confirm**\
Hymalaia will now use Vertex AI authenticated via the service account credentials.
***
# Create Custom Tool
Source: https://docs.hymalaia.com/api-reference/actions/create_custom_tool
POST /api/admin/tool/custom
# Delete Custom Tool
Source: https://docs.hymalaia.com/api-reference/actions/delete_custom_tool
DELETE /api/admin/tool/custom/{tool_id}
# Get Custom Tool
Source: https://docs.hymalaia.com/api-reference/actions/get_custom_tool
GET /api/tool/{tool_id}
# List OpenAPI Tools
Source: https://docs.hymalaia.com/api-reference/actions/list_openapi_tools
GET /api/tool/openapi
# List Tools
Source: https://docs.hymalaia.com/api-reference/actions/list_tools
GET /api/tool
# Update Custom Tool
Source: https://docs.hymalaia.com/api-reference/actions/update_custom_tool
PUT /api/admin/tool/custom/{tool_id}
# Validate Tool
Source: https://docs.hymalaia.com/api-reference/actions/validate_tool
POST /api/admin/tool/custom/validate
# Create Agent
Source: https://docs.hymalaia.com/api-reference/agents/create_persona
POST /api/persona
# Delete Agent
Source: https://docs.hymalaia.com/api-reference/agents/delete_persona
DELETE /api/persona/{persona_id}
# Get Agents Admin Paginated
Source: https://docs.hymalaia.com/api-reference/agents/get_agents_admin_paginated
GET /api/admin/agents
Paginated endpoint for listing agents (formerly personas) (admin view).
Returns items for the requested page plus total count.
Agents are ordered by display_priority (ASC, nulls last) then by ID (ASC).
# Get Agents Paginated
Source: https://docs.hymalaia.com/api-reference/agents/get_agents_paginated
GET /api/agents
Paginated endpoint for listing agents available to the user.
Returns items for the requested page plus total count.
Personas are ordered by display_priority (ASC, nulls last) then by ID (ASC).
NOTE: persona_ids filter is not supported with pagination. Use the
non-paginated endpoint if filtering by specific IDs is needed.
# Get Agent
Source: https://docs.hymalaia.com/api-reference/agents/get_persona
GET /api/persona/{persona_id}
# List Agents Admin
Source: https://docs.hymalaia.com/api-reference/agents/list_personas_admin
GET /api/admin/persona
# Undelete Agent
Source: https://docs.hymalaia.com/api-reference/agents/undelete_persona
PATCH /api/admin/persona/{persona_id}/undelete
# Update Agent
Source: https://docs.hymalaia.com/api-reference/agents/update_persona
PATCH /api/persona/{persona_id}
# Send Chat Message (Deprecated)
Source: https://docs.hymalaia.com/api-reference/chat-send-message
Endpoint for sending a chat message via Hymalaia API
# Chat Message
This endpoint allows users to send a message through the Hymalaia chat interface.
## Endpoint
`POST https://{{url_base}}/api/chat/send-message`
### URL Base Explanation
The `{{url_base}}` is a dynamic placeholder that represents the base URL for the Hymalaia API. This variable can change depending on:
* **Environment**:
* Staging: `stg-azure.hymalaia.net`
* Production: `api.hymalaia.net`
* Custom/Enterprise: Your organization's specific domain
* **Deployment Specifics**:
* Different regions
* Specific cloud instances
* Custom deployments
#### Example URL Variations
* Staging: `https://stg-azure.hymalaia.net/api/chat/send-message`
* Production: `https://api.hymalaia.net/api/chat/send-message`
* Custom: `https://your-company.hymalaia.net/api/chat/send-message`
Always use the specific URL base provided by your Hymalaia account administrator or found in your API configuration settings.
## Authentication
Authentication is required to use this endpoint. You must include a Bearer Token in the Authorization header.
Ensure you have generated an API key from the Hymalaia interface before making requests.
## Request Body
The request body is a JSON object with the following structure:
```json theme={null}
{
"alternate_assistant_id": number,
"chat_session_id": string,
"parent_message_id": string | null,
"message": string,
"prompt_id": number,
"search_doc_ids": string[] | null,
"file_descriptors": any[],
"regenerate": boolean,
"retrieval_options": {
"run_search": "auto" | string,
"real_time": boolean,
"filters": {
"source_type": string | null,
"document_set": string | null,
"time_cutoff": string | null,
"tags": string[]
}
},
"prompt_override": any | null,
"llm_override": {
"model_provider": string,
"model_version": string
},
"use_agentic_search": boolean
}
```
### Parameters Explanation
* `alternate_assistant_id`: Specify an alternative assistant (default: 0)
* `chat_session_id`: Unique identifier for the chat session
* `parent_message_id`: ID of the parent message (for context in conversation)
* `message`: The actual message text to send
* `prompt_id`: Identifier for the prompt (default: 0)
* `search_doc_ids`: Optional document IDs to search
* `file_descriptors`: Any file attachments
* `regenerate`: Whether to regenerate the response
* `retrieval_options`: Advanced search and filtering options
* `llm_override`: Specify a different LLM model if needed
* `use_agentic_search`: Enable or disable agentic search
## Example Request
```bash theme={null}
curl -X POST https://{{url_base}}/api/chat/send-message \
-H "Authorization: Bearer ${HYMALAIA_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"alternate_assistant_id": 0,
"chat_session_id": "054ee9cd-3cdd-4d95-86b3-21447b40db6e",
"message": "Hello, how are you?",
"prompt_id": 0,
"retrieval_options": {
"run_search": "auto",
"real_time": true,
"filters": {
"source_type": null,
"document_set": null,
"time_cutoff": null,
"tags": []
}
},
"llm_override": {
"model_provider": "gpt",
"model_version": "gpt-4o"
},
"use_agentic_search": false,
"parent_message_id": null,
"file_descriptors": [],
"search_doc_ids": null,
"prompt_override": null
}'
```
Replace `${HYMALAIA_API_TOKEN}` with your actual Hymalaia API token.
* Obtain your token from the Hymalaia interface
* Keep your token confidential
* Never share your token publicly
## Response
### Success Response (200 OK)
Returns the generated chat response.
### Error Responses
### 200 OK
Returns the generated chat response.
### 400 Bad Request
Invalid input
### 401 Unauthorized
Invalid or missing API key
### 403 Forbidden
Access denied due to authentication or role restrictions
```json theme={null}
{
"detail": "Access denied. User is not authenticated or lacks role information."
}
```
Possible reasons:
* User is not authenticated
* User does not have the required role or permissions
* Insufficient access rights for the requested operation
Ensure you:
* Are logged in with valid credentials
* Have the appropriate role assigned
* Have been granted access to the specific API endpoint
### Other Potential Errors
* Additional error responses based on authentication or input validation
## Obtaining an API Key
### Generating API Keys
To generate an API key for accessing Hymalaia APIs:
1. Log in to the Hymalaia Admin Panel
2. Navigate to the "API Keys" section in the sidebar
3. Click on the "+ Create API Key" button
4. The system will generate a new API token
5. Copy the generated token
### Using the API Key
Once generated, use the API key in the `Authorization` header:
```bash theme={null}
# Format
-H "Authorization: Bearer YOUR_API_TOKEN"
# Example
-H "Authorization: Bearer on_example_api_token_here"
```
* Keep your API key confidential
* Do not share your API key publicly
* You can generate multiple API keys and revoke them as needed
* Each API key can have specific permissions and access levels
### Best Practices
* Regularly rotate your API keys
* Use different keys for different environments (development, staging, production)
* Implement secure key management in your applications
* Monitor and audit API key usage
# Create New Chat Session
Source: https://docs.hymalaia.com/api-reference/chat/create_new_chat_session
POST /api/chat/create-chat-session
# Delete All Chat Sessions
Source: https://docs.hymalaia.com/api-reference/chat/delete_all_chat_sessions
DELETE /api/chat/delete-all-chat-sessions
# Delete Chat Session By Id
Source: https://docs.hymalaia.com/api-reference/chat/delete_chat_session_by_id
DELETE /api/chat/delete-chat-session/{session_id}
# Fetch Chat File
Source: https://docs.hymalaia.com/api-reference/chat/fetch_chat_file
GET /api/chat/file/{file_id}
# Get Chat Session
Source: https://docs.hymalaia.com/api-reference/chat/get_chat_session
GET /api/chat/get-chat-session/{session_id}
# Get User Chat Sessions
Source: https://docs.hymalaia.com/api-reference/chat/get_user_chat_sessions
GET /api/chat/get-user-chat-sessions
# Handle Send Chat Message
Source: https://docs.hymalaia.com/api-reference/chat/handle_send_chat_message
POST /api/chat/send-chat-message
This endpoint is used to send a new chat message.
Args:
chat_message_req (SendMessageRequest): Details about the new chat message.
- When stream=True (default): Returns StreamingResponse with SSE
- When stream=False: Returns ChatFullResponse with complete data
request (Request): The current HTTP request context.
user (User | None): The current user, obtained via dependency injection.
_ (None): Rate limit check is run if user/group/global rate limits are enabled.
Returns:
StreamingResponse | ChatFullResponse: Either streams or returns complete response.
# Search Chats
Source: https://docs.hymalaia.com/api-reference/chat/search_chats
GET /api/chat/search
Search for chat sessions based on the provided query.
If no query is provided, returns recent chat sessions.
# Seed Chat
Source: https://docs.hymalaia.com/api-reference/chat/seed_chat
POST /api/chat/seed-chat-session
# Stop Chat Session
Source: https://docs.hymalaia.com/api-reference/chat/stop_chat_session
POST /api/chat/stop-chat-session/{chat_session_id}
Stop a chat session by setting a stop signal in Redis.
This endpoint is called by the frontend when the user clicks the stop button.
# Core Concepts
Source: https://docs.hymalaia.com/api-reference/core_concepts
Essential concepts and terminology for working with Hymalaia APIs
## Actions & MCP
Actions (also called Tools in the backend)
are the functions that your Agents can perform to interact with external systems and services.
They extend your agents' capabilities beyond just the language model.
Built-in Actions:
SCIM support for common IdPs is coming soon!
Custom Actions:
* **API Integrations**: Connect to external REST APIs
* **Database Operations**: Query and update databases
* **Workflow Automation**: Trigger business processes
* **File Operations**: Read, write, and manipulate files
You can define your own Custom Actions in the Admin Panel using an OpenAPI specification.
Model Context Protocol (MCP)
is an open standard that enables AI assistants to securely access external data sources and tools.
Hymalaia can be configured as an MCP client to interact with external systems, databases,
and APIs in a controlled manner.
Key features of MCP:
* **External Data Access**: Connect to databases, APIs, and file systems
* **Authentication**: Pass through OAuth to ensure secure access to your MCP server.
## Agents
Agents are AI assistants with custom instructions, Actions, and data access that extend the base LLM's capabilities.
**Built-in Agents:**
* `id: 0` Search Agent - Uses the Search Tool to answer questions from your knowledge base
* `id: -1` General Agent - Basic chat with no tools (basic chat with an LLM)
* `id: -2` Paraphrase Agent - Uses Search Tool and quotes exact snippets from sources
* `id: -3` Art Agent - Generates images and visual content
You can create your own Agents in the Admin Panel or by API.
**Most Chat endpoints require an Agent ID**
To find your Agent ID, you can:
* Use the `GET /persona` API endpoint to list all agents
* In the Admin Panel: Click into an agent and check the first number in the URL
## Chat
The chat response system uses a packet-based architecture to deliver real-time responses to users.
Instead of waiting for a complete response,
the system breaks down the chat interaction into discrete packets that can be streamed incrementally.
Every packet follows a consistent structure defined by the `Packet` class:
```python theme={null}
class Packet(BaseModel):
ind: int # Sequential index for ordering
obj: PacketObj # The actual content including type of packet
```
**Streaming Flow:**
* A chat request triggers the streaming process
* Various packet types are generated based on the required operations
(reasoning, tool calls, AI response, documents, citations, etc.)
* Packets are sent with sequential indices to maintain order
* The frontend processes packets in real-time to update the UI
* An `OverallStop` packet signals completion
**MessageStart and MessageDelta**
These packets form the core of the streaming response system:
* **MessageStart**: Initiates a new message with initial content and final search documents (if any)
* **MessageDelta**: Delivers incremental text content as it's generated
**Session and Section Management**
Control packets manage the flow and lifecycle of the streaming process:
* **OverallStop**: Signals the end of the entire streaming session
* **SectionEnd**: Marks the completion of a packet type (reasoning, message, citations, etc.)
Tool responses are streamed in the same way as the main message response.
**Search Tools**
* SearchToolStart and SearchToolDelta handle document search operations
**Image Generation**
* ImageGenerationToolStart, ImageGenerationToolDelta, and ImageGenerationToolHeartbeat manage AI image creation
**Custom Tools**
* CustomToolStart and CustomToolDelta are used for MCP and custom Actions
The start packet signals the start of the tool response.
The delta packets stream the results as they become available.
Any reasoning steps are streamed so the frontend can render them as the system is processing.
Reasoning packets are generally the first ones sent.
* **ReasoningStart**: Begins a reasoning section
* **ReasoningDelta**: Streams the AI's reasoning process
Citation packets associate citation ids with document ids.
* **CitationStart**: Initiates citation results
* **CitationDelta**: Delivers source citations and references
## Connectors
When you see the term *Connector* in Hymalaia or elsewhere in this documentation,
we're generally referring to *ConnectorCredentialPairs*
`Connectors` in Hymalaia define the data you would like to index
* `name`: Not actually displayed in the UI if `ConnectorCredentialPairMetadata:name` is set
* `source`: Which system to connect to (see `DocumentSource` accordion below)
* `input_type`: How the `Connector` retrieves data (see `InputType` accordion below)
* `connector_specific_config`: Source-specific settings like folder paths or channels.
* `refresh_freq`: How often to check for new or updated content in seconds
* `prune_freq`: How often to remove old content from Hymalaia in seconds
* `indexing_start`: Optional datetime to specify when indexing should begin
```python Python theme={null}
class ConnectorBase(BaseModel):
name: str
source: DocumentSource
input_type: InputType
connector_specific_config: dict[str, Any]
refresh_freq: int | None = None
prune_freq: int | None = None
indexing_start: datetime | None = None
```
`Credentials` contain the authentication details needed to access data sources. These include API keys,
OAuth tokens, personal access tokens (PATs),
or service account credentials that allow Hymalaia to securely connect to your external systems.
Types of `Credentials`:
* **API Keys**: Simple token-based authentication
* **OAuth Tokens**: Delegated authorization with refresh capabilities
* **Service Accounts**: Machine-to-machine authentication
* **Personal Access Tokens**: User-specific access credentials
Behind the scenes, `Connectors` and `Credentials` are combined into a `ConnectorCredentialPair` (CC-pair).
A CC-pair is an active connection that can sync data from your external sources into Hymalaia.
CC-pairs are what you see and manage on the Admin `Connectors` page.
CC-pair functionality:
* **Active Connections**: Live data synchronization between source and Hymalaia
* **Status Monitoring**: Track sync health and performance
* **Access Control**: Manage who can see data from this connection
* **Configuration Management**: Update sync settings and credentials
If you're creating `Connectors` through the API, you must associate them with a `Credential` (CC-pair)
to make them active!
`ConnectorCredentialPairMetadata` defines the configuration and access settings for a CC-pair.
Configuration options:
* `name`: Optional display name for the CC-pair (overrides the `Connector` name)
* `access_type`: Who can access data from this CC-pair (see `AccessType` accordion below)
* `auto_sync_options`: Optional configuration for automatic synchronization settings
* `groups`: List of group IDs that have access to this CC-pair
```python Python theme={null}
class ConnectorCredentialPairMetadata(BaseModel):
name: str | None = None
access_type: AccessType
auto_sync_options: dict[str, Any] | None = None
groups: list[int] = Field(default_factory=list)
```
## Documents
`DocumentBase` is a core structure used throughout Hymalaia for storing and managing document data.
Note that the embeddings are stored in Vespa separately.
* `id`: Unique identifier. Generated by Hymalaia if not provided
* `sections`: List of content sections (see `TextSection` and `ImageSection`)
* `source`: The system this document originated from (see `DocumentSource`)
* `semantic_identifier`: Displayed in the UI as the name of the Document
* `metadata`: Arbitrary `string` or `list[string]` that will be saved as tags for this Document
* `doc_updated_at`: UTC timestamp when the document was last updated
* `chunk_count`: Number of chunks the document is split into for processing
* `primary_owners`: Metadata about people associated with the Document
* `secondary_owners`: Metadata about people associated with the Document
* `title`: Used for search (defaults to `semantic_identifier` if not specified)
* `from_ingestion_api`: Whether this document came from the Ingestion API
* `additional_info`: Connector-specific information that other parts of the code may need
* `external_access`: Permission sync data (Enterprise Edition only)
The Ingestion API extends the DocumentBase definition to include `cc_pair_id` to automatically associate a
document with a CC-pair.
```python Python expandable theme={null}
class DocumentBase(BaseModel):
"""Used for Hymalaia ingestion api, the ID is inferred before use if not provided"""
id: str | None = None
sections: list[TextSection | ImageSection]
source: DocumentSource | None = None
semantic_identifier: str
metadata: dict[str, str | list[str]]
doc_updated_at: datetime | None = None
chunk_count: int | None = None
primary_owners: list[BasicExpertInfo] | None = None
secondary_owners: list[BasicExpertInfo] | None = None
title: str | None = None
from_ingestion_api: bool = False
additional_info: Any = None
external_access: ExternalAccess | None = None
```
`DocumentSource` is an enum that defines the valid sources for a document.
Uploading files to the Ingestion API and creating `Connectors` programmatically require specifying a
`DocumentSource`.
```python Python expandable theme={null}
class DocumentSource(str, Enum):
INGESTION_API = "ingestion_api" # Special case, document passed in via Hymalaia APIs without specifying a source type
SLACK = "slack"
WEB = "web"
GOOGLE_DRIVE = "google_drive"
GMAIL = "gmail"
REQUESTTRACKER = "requesttracker"
GITHUB = "github"
GITBOOK = "gitbook"
GITLAB = "gitlab"
GURU = "guru"
BOOKSTACK = "bookstack"
CONFLUENCE = "confluence"
JIRA = "jira"
SLAB = "slab"
PRODUCTBOARD = "productboard"
FILE = "file"
NOTION = "notion"
ZULIP = "zulip"
LINEAR = "linear"
HUBSPOT = "hubspot"
DOCUMENT360 = "document360"
GONG = "gong"
GOOGLE_SITES = "google_sites"
ZENDESK = "zendesk"
LOOPIO = "loopio"
DROPBOX = "dropbox"
SHAREPOINT = "sharepoint"
TEAMS = "teams"
SALESFORCE = "salesforce"
DISCOURSE = "discourse"
AXERO = "axero"
CLICKUP = "clickup"
MEDIAWIKI = "mediawiki"
WIKIPEDIA = "wikipedia"
ASANA = "asana"
S3 = "s3"
R2 = "r2"
GOOGLE_CLOUD_STORAGE = "google_cloud_storage"
OCI_STORAGE = "oci_storage"
XENFORO = "xenforo"
NOT_APPLICABLE = "not_applicable"
DISCORD = "discord"
FRESHDESK = "freshdesk"
FIREFLIES = "fireflies"
EGNYTE = "egnyte"
AIRTABLE = "airtable"
HIGHSPOT = "highspot"
IMAP = "imap"
# Special case just for integration tests
MOCK_CONNECTOR = "mock_connector"
```
`TextSection` is a portion of a Document in Hymalaia.
* `text`: The actual text content of the section
* `link`: Optional URL that this text section relates to or was sourced from
```python Python theme={null}
class TextSection(Section):
text: str
link: str | None = None
```
`ImageSection` is an image extracted from a Document in Hymalaia.
* `image_file_id`: UUID of the image file stored in Hymalaia's file store
* `text`: Optional text description or caption for the image
* `link`: Optional URL that this image section relates to or was sourced from
```python Python theme={null}
class ImageSection(Section):
image_file_id: str
text: str | None = None
link: str | None = None
```
`AccessType` defines who can access data from a `Connector` in Hymalaia.
* `PUBLIC`: All Hymalaia users may access data from this `Connector`
* `PRIVATE`: Only the user who created the `Connector` and specified Groups may access data from this `Connector`
* `SYNC`: Only `Connectors` with permission-sync support can be set to SYNC. The `Connector` will sync access permissions with the source system.
```python Python theme={null}
class AccessType(str, Enum):
PUBLIC = "public"
PRIVATE = "private"
SYNC = "sync"
```
`InputType` defines how a `Connector` retrieves data from its source system.
* `LOAD_STATE`: Single load of data from the source
* `POLL`: Continuous polling for new data from the source (starts with a full load)
* `EVENT`: Not implemented for most `Connectors`
* `SLIM_RETRIEVAL`: For permission-syncing `Connectors`
```python Python theme={null}
class InputType(str, Enum):
LOAD_STATE = "load_state"
POLL = "poll"
EVENT = "event"
SLIM_RETRIEVAL = "slim_retrieval"
```
## Next Steps
Learn how to index files with the Ingestion API
Simple example of sending a message programmatically
# Associate Credential To Connector
Source: https://docs.hymalaia.com/api-reference/files_connectors/associate_credential_to_connector
PUT /api/manage/connector/{connector_id}/credential/{credential_id}
NOTE(rkuo): internally discussed and the consensus is this endpoint
and create_connector_with_mock_credential should be combined.
The intent of this endpoint is to handle connectors that actually need credentials.
# Connector Run Once
Source: https://docs.hymalaia.com/api-reference/files_connectors/connector_run_once
POST /api/manage/admin/connector/run-once
Used to trigger indexing on a set of cc_pairs associated with a
single connector.
# Create Connector From Model
Source: https://docs.hymalaia.com/api-reference/files_connectors/create_connector_from_model
POST /api/manage/admin/connector
# Create Credential From Model
Source: https://docs.hymalaia.com/api-reference/files_connectors/create_credential_from_model
POST /api/manage/credential
# Create Credential With Private Key
Source: https://docs.hymalaia.com/api-reference/files_connectors/create_credential_with_private_key
POST /api/manage/credential/private-key
# Create Deletion Attempt For Connector Id
Source: https://docs.hymalaia.com/api-reference/files_connectors/create_deletion_attempt_for_connector_id
POST /api/manage/admin/deletion-attempt
# Delete Connector By Id
Source: https://docs.hymalaia.com/api-reference/files_connectors/delete_connector_by_id
DELETE /api/manage/admin/connector/{connector_id}
# Delete Credential By Id
Source: https://docs.hymalaia.com/api-reference/files_connectors/delete_credential_by_id
DELETE /api/manage/credential/{credential_id}
# Delete Credential By Id Admin
Source: https://docs.hymalaia.com/api-reference/files_connectors/delete_credential_by_id_admin
DELETE /api/manage/admin/credential/{credential_id}
Same as the user endpoint, but can delete any credential (not just the user's own)
# Dissociate Credential From Connector
Source: https://docs.hymalaia.com/api-reference/files_connectors/dissociate_credential_from_connector
DELETE /api/manage/connector/{connector_id}/credential/{credential_id}
# Force Delete Credential By Id
Source: https://docs.hymalaia.com/api-reference/files_connectors/force_delete_credential_by_id
DELETE /api/manage/credential/force/{credential_id}
# Get Basic Connector Indexing Status
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_basic_connector_indexing_status
GET /api/manage/connector-status
# Get CC Pair Full Info
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_cc_pair_full_info
GET /api/manage/admin/cc-pair/{cc_pair_id}
# Get CC Pair Index Attempts
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_cc_pair_index_attempts
GET /api/manage/admin/cc-pair/{cc_pair_id}/index-attempts
# Get CC Pair Indexing Errors
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_cc_pair_indexing_errors
GET /api/manage/admin/cc-pair/{cc_pair_id}/errors
Gives back all errors for a given CC Pair. Allows pagination based on page and page_size params.
Args:
cc_pair_id: ID of the connector-credential pair to get errors for
include_resolved: Whether to include resolved errors in the results
page_num: Page number for pagination, starting at 0
page_size: Number of errors to return per page
_: Current user, must be curator or admin
db_session: Database session
Returns:
Paginated list of indexing errors for the CC pair.
# Get Cc Source Full Info
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_cc_source_full_info
GET /api/manage/admin/similar-credentials/{source_type}
# Get Connector By Id
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_connector_by_id
GET /api/manage/connector/{connector_id}
# Get Connector Indexing Status
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_connector_indexing_status
POST /api/manage/admin/connector/indexing-status
# Get Connector Status
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_connector_status
GET /api/manage/admin/connector/status
# Get Connectors
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_connectors
GET /api/manage/connector
# Get Connectors By Credential
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_connectors_by_credential
GET /api/manage/admin/connector
Get a list of connectors. Allow filtering by a specific credential id.
# Get Credential By Id
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_credential_by_id
GET /api/manage/credential/{credential_id}
# Get Currently Failed Indexing Status
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_currently_failed_indexing_status
GET /api/manage/admin/connector/failed-indexing-status
# Get Docs By Connector Credential Pair
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_docs_by_connector_credential_pair
GET /api/onyx-api/connector-docs/{cc_pair_id}
# Get Indexed Sources
Source: https://docs.hymalaia.com/api-reference/files_connectors/get_indexed_sources
GET /api/manage/indexed-sources
# List Connector Files
Source: https://docs.hymalaia.com/api-reference/files_connectors/list_connector_files
GET /api/manage/admin/connector/{connector_id}/files
List all files in a file connector.
# List Credentials
Source: https://docs.hymalaia.com/api-reference/files_connectors/list_credentials
GET /api/manage/credential
# List Credentials Admin
Source: https://docs.hymalaia.com/api-reference/files_connectors/list_credentials_admin
GET /api/manage/admin/credential
Lists all public credentials
# Prune Cc Pair
Source: https://docs.hymalaia.com/api-reference/files_connectors/prune_cc_pair
POST /api/manage/admin/cc-pair/{cc_pair_id}/prune
Triggers pruning on a particular cc_pair immediately
# Swap Credentials For Connector
Source: https://docs.hymalaia.com/api-reference/files_connectors/swap_credentials_for_connector
PUT /api/manage/admin/credential/swap
# Update CC Pair Status
Source: https://docs.hymalaia.com/api-reference/files_connectors/update_cc_pair_status
PUT /api/manage/admin/cc-pair/{cc_pair_id}/status
This method returns nearly immediately. It simply sets some signals and
optimistically assumes any running background processes will clean themselves up.
This is done to improve the perceived end user experience.
Returns HTTPStatus.OK if everything finished.
# Update Connector Files
Source: https://docs.hymalaia.com/api-reference/files_connectors/update_connector_files
POST /api/manage/admin/connector/{connector_id}/files/update
Update files in a connector by adding new files and/or removing existing ones.
This is an atomic operation that validates, updates the connector config, and triggers indexing.
# Update Credential Data
Source: https://docs.hymalaia.com/api-reference/files_connectors/update_credential_data
PUT /api/manage/admin/credential/{credential_id}
# Update Credential From Model
Source: https://docs.hymalaia.com/api-reference/files_connectors/update_credential_from_model
PATCH /api/manage/credential/{credential_id}
# Update Credential Private Key
Source: https://docs.hymalaia.com/api-reference/files_connectors/update_credential_private_key
PUT /api/manage/admin/credential/private-key/{credential_id}
# Upload Files Api
Source: https://docs.hymalaia.com/api-reference/files_connectors/upload_files_api
POST /api/manage/admin/connector/file/upload
# Send a Message to Hymalaia
Source: https://docs.hymalaia.com/api-reference/guides/chat_new_guide
Sending messages programmatically to Hymalaia
We recommend you migrate any usage of `/chat/send-message` and `/chat/send-message-simple-api` to this new API by
February 1st, 2026.
The `/chat/send-chat-message` API is used to send a message to Hymalaia.
It is the same API that the Hymalaia frontend uses to send and receive messages.
You have the option of receiving a streaming response or the complete response as a string.
This guide was explain all of the parameters you can pass in to the API and provide a code sample.
The user message to send to the Agent.
Pass an object to override the default LLM settings for this request. If `None`,
you will get the default Hymalaia behavior.
You can pass or exclude any of the following fields: `model_provider`, `model_version`, `temperature`
If you pass an invalid configuration,
for example if the default `model_provider` is OpenAI and you only specify `claude-sonnet-4.5`,
your request will fail.
Agents are created with a set of Actions they are allowed to invoke.
You can further configure this set for your immediate interaction using this parameter.
See the list of Actions and their IDs via the [GET /tool](/developers/api_reference/actions/list_tools) endpoint.
Pass in an empty list to disable all Actions.
Pass in `None` to allow all the Actions which are configured for the Agent.
Force the Agent to use a specific Action for this request. A specific tool/action which must be run by the Agent.
The Agent may run other Actions before returning its final response, but it will be guaranteed to use this one.
Leave empty to let the Agent decide which Actions to use.
A list of files to include along with your request.
File IDs can be found via the [POST
/user/projects/file/upload](/developers/api_reference/projects/upload_user_files)
and the [GET /user/projects/file/](/developers/api_reference/projects/get_user_file) endpoints.
Filters to narrow down the internal search results used by the Agent.
All filters arguments are optional and can be combined.
* `source_type`: Source types like `web`, `slack`, `google_drive`, `confluence`
* `document_set`: The name of the document sets to search within
* `time_cutoff`: Only include documents created or modified after this timestamp. ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ` (e.g.,
`2024-01-01T00:00:00Z`).
* `tags`: Document tags in the format `{"tag_key": "tag_value"}`.
Only documents with matching tags will be searched.
Enables Deep Research mode for this request.
Note that this mode consumes significantly more tokens, so be careful accessing it via the API.
The ID of the parent message in the chat history. This is the primary-key (unique identifier)
for the previous message in the chat history tree.
If not passed in, it is assumed that your new message is sequentially after the last message in the chat history.
If set to `None`,
the chat history is reset and the new message is considered the first message in the chat history.
To continue an existing conversation, pass in the chat session ID where the message should be sent.
If left blank, a new chat session will be created for the message according to `chat_session_info` (see below).
Details about the chat session which will be used for all messages in the session.
The field values can be left blank to use the default chat settings.
* `persona_id`: The ID of the Agent to use for the chat session
* `project_id`: ID of a Project if the chat should be scoped to a Project. Projects are used to organize files and instructions and are a lighter-weight version of Agents. Through programmatic use, it is typically recommended to use Agents instead.
If true, then it responds with an SSE stream of individual packets. This is the same set used for the Hymalaia UI.
Fields like the Answer, reasoning tokens, and iterative Tool Calls need to be pieced together from streamed tokens.
## Response Format
### Streaming Response
Hymalaia returns various types of packets in the streaming response depending on the LLM's behavior.
```python expandable theme={null}
class StreamingType(Enum):
"""Enum defining all streaming packet types."""
SECTION_END = "section_end"
STOP = "stop"
TOP_LEVEL_BRANCHING = "top_level_branching"
ERROR = "error"
MESSAGE_START = "message_start"
MESSAGE_DELTA = "message_delta"
SEARCH_TOOL_START = "search_tool_start"
SEARCH_TOOL_QUERIES_DELTA = "search_tool_queries_delta"
SEARCH_TOOL_DOCUMENTS_DELTA = "search_tool_documents_delta"
OPEN_URL_START = "open_url_start"
OPEN_URL_URLS = "open_url_urls"
OPEN_URL_DOCUMENTS = "open_url_documents"
IMAGE_GENERATION_START = "image_generation_start"
IMAGE_GENERATION_HEARTBEAT = "image_generation_heartbeat"
IMAGE_GENERATION_FINAL = "image_generation_final"
PYTHON_TOOL_START = "python_tool_start"
PYTHON_TOOL_DELTA = "python_tool_delta"
CUSTOM_TOOL_START = "custom_tool_start"
CUSTOM_TOOL_DELTA = "custom_tool_delta"
REASONING_START = "reasoning_start"
REASONING_DELTA = "reasoning_delta"
REASONING_DONE = "reasoning_done"
CITATION_INFO = "citation_info"
DEEP_RESEARCH_PLAN_START = "deep_research_plan_start"
DEEP_RESEARCH_PLAN_DELTA = "deep_research_plan_delta"
RESEARCH_AGENT_START = "research_agent_start"
INTERMEDIATE_REPORT_START = "intermediate_report_start"
INTERMEDIATE_REPORT_DELTA = "intermediate_report_delta"
INTERMEDIATE_REPORT_CITED_DOCS = "intermediate_report_cited_docs"
```
### Non-streaming Response
```python theme={null}
class ChatFullResponse(BaseModel):
"""Complete non-streaming response with all available data."""
# Core response fields
answer: str
answer_citationless: str
pre_answer_reasoning: str | None = None
tool_calls: list[ToolCallResponse] = []
# Documents & citations
top_documents: list[SearchDoc]
citation_info: list[CitationInfo]
# Metadata
message_id: int
chat_session_id: UUID | None = None
error_msg: str | None = None
```
## Sample Request
```python Python expandable theme={null}
import requests
API_BASE_URL = "your own domain"
API_KEY = "YOUR_KEY_HERE"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
response = requests.post(
f"{API_BASE_URL}/chat/send-chat-message",
headers=headers,
json={
"message": "What is Hymalaia?",
}
)
data = response.json()
print("Answer:", data["answer"])
print("Message ID:", data["message_id"])
```
```bash Shell expandable theme={null}
#!/bin/bash
API_BASE_URL="your own domain"
API_KEY="YOUR_KEY_HERE"
RESPONSE=$(curl -s -X POST "${API_BASE_URL}/chat/send-chat-message" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"message": "What is Hymalaia?"
}'
)
echo "Answer:" $(echo "$RESPONSE" | jq -r '.answer')
echo "Message ID:" $(echo "$RESPONSE" | jq -r '.message_id')
```
## Next Steps
Use the lightweight ingestion API to index documents
Learn how to create and configure Connectors programmatically
# Create Connectors
Source: https://docs.hymalaia.com/api-reference/guides/create_connector
Learn how to create and configure connectors programmatically
This is an advanced guide for automating connector creation.
We highly recommend trying the Admin Panel or File Ingestion API first.
To see available connectors, see the [Connectors page](/admins/connectors).
## Guide
Skip to the [Full Code](#full-code) section if you don't want the step-by-step guide.
In this example, we'll automate creating Jira Connectors for a selection of projects.
**You will need an Admin API key to follow this guide.**
```python Python theme={null}
import requests
API_BASE_URL = "your own domain"
API_KEY = "YOUR_KEY_HERE"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
```
```bash Shell theme={null}
API_BASE_URL="https://your.hymalaia.domain/api"
API_KEY="YOUR_KEY_HERE"
```
Each Connector type has a different `ConnectorSpecificConfig`.
For Jira, since we're indexing a selection of projects, rather than all projects,
we'll need to specify `jira_base_url`, `project_key`, and optionally `comment_email_blacklist`.
```json JSON theme={null}
{
"jira_base_url": "string",
"project_key": "string | null",
"comment_email_blacklist": ["string"] | null
}
```
The `ConnectorSpecificConfig` are the same fields you fill out in the Admin Panel when creating a Connector.
In addition to the `ConnectorSpecificConfig`,
we also need to satisfy the schema for the `ConnectorUpdateRequest` object. See [Core Concepts:
Connectors](/developers/core_concepts#connectors) for more details.
In this example, we'll set the `access_type`, `name`, `source`, `input_type`, `refresh_freq`, and `prune_freq`.
```python Python theme={null}
connector_payload = {
"name": f"jira-{project_key}",
"source": "jira",
"input_type": "poll",
"access_type": "PUBLIC",
"connector_specific_config": {
"jira_base_url": JIRA_BASE_URL,
"project_key": project_key,
"comment_email_blacklist": ["legal@company.com"]
},
"refresh_freq": 3600, # Refresh every hour (3600 seconds)
"prune_freq": 86400, # Prune every day (86400 seconds)
}
```
```json JSON theme={null}
{
"name": "jira-TECH",
"source": "jira",
"input_type": "poll",
"access_type": "PUBLIC",
"connector_specific_config": {
"jira_base_url": "https://your-company.atlassian.net",
"project_key": "TECH",
"comment_email_blacklist": ["legal@company.com"]
},
"refresh_freq": 3600,
"prune_freq": 86400
}
```
Save the Connector ID from the response! You will need this later.
```python Python expandable theme={null}
import requests
import json
from datetime import datetime
PROJECTS_TO_INDEX = [
"TECH",
"SALES",
"OPS",
]
JIRA_BASE_URL = "https://your-company.atlassian.net"
connector_ids = []
for project_key in PROJECTS_TO_INDEX:
connector_payload = {
"name": f"jira-{project_key}",
"source": "jira",
"input_type": "poll",
"access_type": "PUBLIC",
"connector_specific_config": {
"jira_base_url": JIRA_BASE_URL,
"project_key": project_key,
"comment_email_blacklist": ["legal@company.com"]
},
"refresh_freq": 3600, # Refresh every hour (3600 seconds)
"prune_freq": 86400, # Prune every day (86400 seconds)
}
response = requests.post(
f"{API_BASE_URL}/manage/admins/connector",
headers=headers,
json=connector_payload
)
if response.status_code == 200:
connector_data = response.json()
connector_id = connector_data.get('id')
connector_ids.append(connector_id)
print(f"Successfully created connector for project {project_key}")
print(f"Connector ID: {connector_id}")
else:
print(f"Failed to create connector for project {project_key}")
print(f"Status: {response.status_code}")
print(f"Error: {response.text}")
```
```bash Shell expandable theme={null}
# Create connector for TECH project
curl -X POST "${API_BASE_URL}/manage/admins/connector" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "jira-TECH",
"source": "jira",
"input_type": "poll",
"access_type": "PUBLIC",
"connector_specific_config": {
"jira_base_url": "https://your-company.atlassian.net",
"project_key": "TECH",
"comment_email_blacklist": ["legal@company.com"]
},
"refresh_freq": 3600,
"prune_freq": 86400
}'
# Create connector for SALES project
curl -X POST "${API_BASE_URL}/manage/admins/connector" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "jira-SALES",
"source": "jira",
"input_type": "poll",
"access_type": "PUBLIC",
"connector_specific_config": {
"jira_base_url": "https://your-company.atlassian.net",
"project_key": "SALES",
"comment_email_blacklist": ["legal@company.com"]
},
"refresh_freq": 3600,
"prune_freq": 86400
}'
# Create connector for OPS project
curl -X POST "${API_BASE_URL}/manage/admins/connector" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "jira-OPS",
"source": "jira",
"input_type": "poll",
"access_type": "PUBLIC",
"connector_specific_config": {
"jira_base_url": "https://your-company.atlassian.net",
"project_key": "OPS",
"comment_email_blacklist": ["legal@company.com"]
},
"refresh_freq": 3600,
"prune_freq": 86400
}'
```
The easiest way to create a Credential is in the Admin Panel.
* Click Add a Connector
* Select your relevant Connector
* Follow the instructions to create a Credential
Once your Credential is created, the Credential ID will be displayed to you.
Certain Connectors may not require a Credential such as the File and Web connectors. `credential_id:
0` is a default empty Credential you can use for these Connectors.
To list your Credentials, you can use the `GET manage/admins/credential` endpoint.
```python Python theme={null}
response = requests.get(
f"{API_BASE_URL}/manage/admins/credential",
headers=headers
)
credentials = response.json()
jira_credential_id = next(cred for cred in credentials if cred['source'] == 'jira')['id']
```
```bash Shell theme={null}
curl -X GET "${API_BASE_URL}/manage/admins/credential" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json"
```
If you do not do this step, your `Connector` is not fully created and you will not see it in the Admin Panel!
```python Python theme={null}
for connector_id in connector_ids:
try:
response = requests.put(
f"{API_BASE_URL}/manage/admins/connector/{connector_id}/credential/{jira_credential_id}",
headers=headers,
)
if response.status_code == 200:
print(f"Successfully associated credential with connector {connector_id}")
else:
print(f"Failed to associate credential with connector {connector_id}")
print(f"Status: {response.status_code}. Error: {response.text}")
except Exception as e:
print(f"Failed to associate credential with connector {connector_id}: {e}")
```
```bash Shell theme={null}
# Replace CONNECTOR_ID and CREDENTIAL_ID with actual values
curl -X PUT "${API_BASE_URL}/manage/admins/connector/CONNECTOR_ID/credential/CREDENTIAL_ID" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json"
```
## Full Code
```python Python expandable theme={null}
import requests
import json
from datetime import datetime
# Configuration
API_BASE_URL = "your own domain"
API_KEY = "YOUR_KEY_HERE"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Projects to create connectors for
PROJECTS_TO_INDEX = [
"TECH",
"SALES",
"OPS",
]
JIRA_BASE_URL = "https://your-company.atlassian.net"
connector_ids = []
# Step 1: Create connectors for each project
print("Creating connectors...")
for project_key in PROJECTS_TO_INDEX:
connector_payload = {
"name": f"jira-{project_key}",
"source": "jira",
"input_type": "poll",
"access_type": "PUBLIC",
"connector_specific_config": {
"jira_base_url": JIRA_BASE_URL,
"project_key": project_key,
"comment_email_blacklist": ["legal@company.com"]
},
"refresh_freq": 3600, # Refresh every hour (3600 seconds)
"prune_freq": 86400, # Prune every day (86400 seconds)
}
response = requests.post(
f"{API_BASE_URL}/manage/admins/connector",
headers=headers,
json=connector_payload
)
if response.status_code == 200:
connector_data = response.json()
connector_id = connector_data.get('id')
connector_ids.append(connector_id)
print(f"Successfully created connector for project {project_key}")
print(f"Connector ID: {connector_id}")
else:
print(f"Failed to create connector for project {project_key}")
print(f"Status: {response.status_code}")
print(f"Error: {response.text}")
# Step 2: Get credentials
print("\nFetching credentials...")
response = requests.get(
f"{API_BASE_URL}/manage/admins/credential",
headers=headers
)
if response.status_code == 200:
credentials = response.json()
# Find Jira credential (assumes you have one created)
jira_credential = next((cred for cred in credentials if cred['source'] == 'jira'), None)
if jira_credential:
jira_credential_id = jira_credential['id']
print(f"Found Jira credential with ID: {jira_credential_id}")
else:
print("No Jira credential found. Please create one in the Admin Panel first.")
exit(1)
else:
print(f"Failed to fetch credentials: {response.status_code}")
print(f"Error: {response.text}")
exit(1)
# Step 3: Associate credentials with connectors
print("\nAssociating credentials with connectors...")
for connector_id in connector_ids:
try:
response = requests.put(
f"{API_BASE_URL}/manage/admins/connector/{connector_id}/credential/{jira_credential_id}",
headers=headers,
)
if response.status_code == 200:
print(f"Successfully associated credential with connector {connector_id}")
else:
print(f"Failed to associate credential with connector {connector_id}")
print(f"Status: {response.status_code}. Error: {response.text}")
except Exception as e:
print(f"Failed to associate credential with connector {connector_id}: {e}")
print(f"\nCompleted! Created {len(connector_ids)} connectors with IDs: {connector_ids}")
```
```bash Shell expandable theme={null}
#!/bin/bash
# Configuration
API_BASE_URL="https://your.hymalaia.domain/api"
API_KEY="YOUR_KEY_HERE"
# Array of projects to create connectors for
PROJECTS=("TECH" "SALES" "OPS")
JIRA_BASE_URL="https://your-company.atlassian.net"
# Array to store connector IDs
CONNECTOR_IDS=()
echo "Creating connectors..."
# Step 1: Create connectors for each project
for PROJECT in "${PROJECTS[@]}"; do
echo "Creating connector for project: $PROJECT"
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "${API_BASE_URL}/manage/admins/connector" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"jira-${PROJECT}\",
\"source\": \"jira\",
\"input_type\": \"poll\",
\"access_type\": \"PUBLIC\",
\"connector_specific_config\": {
\"jira_base_url\": \"${JIRA_BASE_URL}\",
\"project_key\": \"${PROJECT}\",
\"comment_email_blacklist\": [\"legal@company.com\"]
},
\"refresh_freq\": 3600,
\"prune_freq\": 86400
}"
)
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
BODY=$(echo "$RESPONSE" | head -n -1)
if [ "$HTTP_CODE" -eq 200 ]; then
CONNECTOR_ID=$(echo "$BODY" | jq -r '.id')
CONNECTOR_IDS+=("$CONNECTOR_ID")
echo "Successfully created connector for project $PROJECT"
echo "Connector ID: $CONNECTOR_ID"
else
echo "Failed to create connector for project $PROJECT"
echo "Status: $HTTP_CODE"
echo "Error: $BODY"
fi
done
# Step 2: Get credentials
echo -e "\nFetching credentials..."
CRED_RESPONSE=$(curl -s -w "\n%{http_code}" -X GET "${API_BASE_URL}/manage/admins/credential" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json")
CRED_HTTP_CODE=$(echo "$CRED_RESPONSE" | tail -n1)
CRED_BODY=$(echo "$CRED_RESPONSE" | head -n -1)
if [ "$CRED_HTTP_CODE" -eq 200 ]; then
JIRA_CREDENTIAL_ID=$(echo "$CRED_BODY" | jq -r '.[] | select(.source == "jira") | .id' | head -n1)
if [ "$JIRA_CREDENTIAL_ID" != "null" ] && [ -n "$JIRA_CREDENTIAL_ID" ]; then
echo "Found Jira credential with ID: $JIRA_CREDENTIAL_ID"
else
echo "No Jira credential found. Please create one in the Admin Panel first."
exit 1
fi
else
echo "Failed to fetch credentials: $CRED_HTTP_CODE"
echo "Error: $CRED_BODY"
exit 1
fi
# Step 3: Associate credentials with connectors
echo -e "\nAssociating credentials with connectors..."
for CONNECTOR_ID in "${CONNECTOR_IDS[@]}"; do
echo "Associating credential with connector: $CONNECTOR_ID"
ASSOC_RESPONSE=$(curl -s -w "\n%{http_code}" -X PUT "${API_BASE_URL}/manage/admins/connector/${CONNECTOR_ID}/credential/${JIRA_CREDENTIAL_ID}" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json")
ASSOC_HTTP_CODE=$(echo "$ASSOC_RESPONSE" | tail -n1)
ASSOC_BODY=$(echo "$ASSOC_RESPONSE" | head -n -1)
if [ "$ASSOC_HTTP_CODE" -eq 200 ]; then
echo "Successfully associated credential with connector $CONNECTOR_ID"
else
echo "Failed to associate credential with connector $CONNECTOR_ID"
echo "Status: $ASSOC_HTTP_CODE"
echo "Error: $ASSOC_BODY"
fi
done
echo -e "\nCompleted! Created ${#CONNECTOR_IDS[@]} connectors with IDs: ${CONNECTOR_IDS[*]}"
```
# Create Global Token Limit Settings
Source: https://docs.hymalaia.com/api-reference/miscellaneous/create_global_token_limit_settings
POST /api/admin/token-rate-limits/global
# Delete Token Limit Settings
Source: https://docs.hymalaia.com/api-reference/miscellaneous/delete_token_limit_settings
DELETE /api/admin/token-rate-limits/rate-limit/{token_rate_limit_id}
# Get Global Token Limit Settings
Source: https://docs.hymalaia.com/api-reference/miscellaneous/get_global_token_limit_settings
GET /api/admin/token-rate-limits/global
# Get Backend Version
Source: https://docs.hymalaia.com/api-reference/miscellaneous/get_version
GET /api/version
# Get Latest App Version Tags
Source: https://docs.hymalaia.com/api-reference/miscellaneous/get_versions
GET /api/versions
Fetches the latest stable and beta versions of Hymalaia Docker images.
Since DockerHub does not explicitly flag stable and beta images,
this endpoint can be used to programmatically check for new images.
# Healthcheck
Source: https://docs.hymalaia.com/api-reference/miscellaneous/healthcheck
GET /api/health
# Update Token Limit Settings
Source: https://docs.hymalaia.com/api-reference/miscellaneous/update_token_limit_settings
PUT /api/admin/token-rate-limits/rate-limit/{token_rate_limit_id}
# Overview & Auth
Source: https://docs.hymalaia.com/api-reference/overview
Overview of Hymalaia APIs
**Nearly every Hymalaia feature is accessible through the Hymalaia API.**
Hymalaia APIs are built on REST principles with JSON request/response formats.
All endpoints require authentication and follow relatively consistent patterns.
Make API requests to:
`https://your-self-hosted-hymalaia.com/api`
Hymalaia follows [SemVer 2.0.0](https://semver.org/). Breaking changes will be indicated by major version increments.
## Authentication
To authenticate your requests, generate an API key from the Hymalaia Admin Console.
Alternatively, you can create a Personal Access Token from the User Settings page.
Personal access tokens authenticate as your user and have access to the same permissions you have in Hymalaia.
There are three types of API keys:
Can access all endpoints, including those pre-fixed with `admin/`.
**Use cases:**
* Full system administration
* User management operations
* Data management and analytics
* Complete access to all Hymalaia features
**⚠️ Use with caution:** Admin keys have unrestricted access to your Hymalaia instance.
Can access the non-admin endpoints like Search, Chat, Agents, and Actions.
**Use cases:**
* Building chat applications
* Implementing search functionality
* Creating and managing agents
* Running actions and workflows
**✅ Recommended:** Most users should use Basic API Keys for application development.
Read-only Agent access. Can post messages to Chat endpoints, but cannot read chat history.
**Use cases:**
* Highly restricted environments
* Specific use cases requiring minimal permissions
* Testing with limited scope
**Coming soon:** User-Scoped Token tied to a specific user's permissions and data access.
API Keys exist as distinct users in Hymalaia. This means:
* You can trace activity to a specific API Key
* Chat sessions generated by API will be private and reusable with that API Key
* Agents, Connectors, and Document Sets can be configured to be private to that API Key
## API Reference and Playground
In the [API Reference](/developers/api_reference/chat/get_chat_session),
we have curated a subset of useful Hymalaia API endpoints.
You can experiment with the endpoints on each page or follow one of our [Guides](/developers/guides/chat_guide).
You can find all Hymalaia API endpoints in the built-in OpenAPI explorer:
`https://your-hymalaia-domain.com/api/docs`
The explorer is purely for reference. It is not a fully-featured API client.
Ignore the tenant\_id parameter and use your API key as a Bearer token.
## Next Steps
Learn the fundamental concepts and terminology for working with Hymalaia APIs
Simple example of sending a message programmatically
# Create Project
Source: https://docs.hymalaia.com/api-reference/projects/create_project
POST /api/user/projects/create
# Delete Project
Source: https://docs.hymalaia.com/api-reference/projects/delete_project
DELETE /api/user/projects/{project_id}
# Delete User File
Source: https://docs.hymalaia.com/api-reference/projects/delete_user_file
DELETE /api/user/projects/file/{file_id}
Delete a user file belonging to the current user.
This will also remove any project associations for the file.
# Get Chat Session Project Files
Source: https://docs.hymalaia.com/api-reference/projects/get_chat_session_project_files
GET /api/user/projects/session/{chat_session_id}/files
Return user files for the project linked to the given chat session.
If the chat session has no project, returns an empty list.
Only returns files owned by the current user and not FAILED.
# Get Files In Project
Source: https://docs.hymalaia.com/api-reference/projects/get_files_in_project
GET /api/user/projects/files/{project_id}
# Get Project
Source: https://docs.hymalaia.com/api-reference/projects/get_project
GET /api/user/projects/{project_id}
# Get Project Details
Source: https://docs.hymalaia.com/api-reference/projects/get_project_details
GET /api/user/projects/{project_id}/details
# Get Project Instructions
Source: https://docs.hymalaia.com/api-reference/projects/get_project_instructions
GET /api/user/projects/{project_id}/instructions
# Get Projects
Source: https://docs.hymalaia.com/api-reference/projects/get_projects
GET /api/user/projects/
# Get User File
Source: https://docs.hymalaia.com/api-reference/projects/get_user_file
GET /api/user/projects/file/{file_id}
Fetch a single user file by ID for the current user.
Includes files in any status (including FAILED) to allow status polling.
# Get User File Statuses
Source: https://docs.hymalaia.com/api-reference/projects/get_user_file_statuses
POST /api/user/projects/file/statuses
Fetch statuses for a set of user file IDs owned by the current user.
Includes files in any status so the client can detect transitions to FAILED.
# Link User File To Project
Source: https://docs.hymalaia.com/api-reference/projects/link_user_file_to_project
POST /api/user/projects/{project_id}/files/{file_id}
Link an existing user file to a specific project for the current user.
Creates the association in the Project__UserFile join table if it does not exist.
Returns the linked user file snapshot.
# Unlink User File From Project
Source: https://docs.hymalaia.com/api-reference/projects/unlink_user_file_from_project
DELETE /api/user/projects/{project_id}/files/{file_id}
Unlink an existing user file from a specific project for the current user.
Does not delete the underlying file; only removes the association.
# Update Project
Source: https://docs.hymalaia.com/api-reference/projects/update_project
PATCH /api/user/projects/{project_id}
# Upload User Files
Source: https://docs.hymalaia.com/api-reference/projects/upload_user_files
POST /api/user/projects/file/upload
# Upsert Project Instructions
Source: https://docs.hymalaia.com/api-reference/projects/upsert_project_instructions
POST /api/user/projects/{project_id}/instructions
Create or update this project's instructions stored on the project itself.
# Execute Open Urls
Source: https://docs.hymalaia.com/api-reference/search/execute_open_urls
POST /api/web-search/open-urls
Fetch content for specific URLs using the configured content provider.
Intended to complement `/search-lite` when you need content for a subset of URLs.
# Execute Web Search
Source: https://docs.hymalaia.com/api-reference/search/execute_web_search
POST /api/web-search/search
Perform a web search and immediately fetch content for the returned URLs.
Use this when you want both snippets and page contents from one call.
If you want to selectively fetch content (i.e. let the LLM decide which URLs to read),
use `/search-lite` and then call `/open-urls` separately.
# Execute Web Search Lite
Source: https://docs.hymalaia.com/api-reference/search/execute_web_search_lite
POST /api/web-search/search-lite
Lightweight search-only endpoint. Returns search snippets and URLs without
fetching page contents. Pair with `/open-urls` if you need to fetch content
later.
# Handle Search Request
Source: https://docs.hymalaia.com/api-reference/search/handle_search_request
POST /api/query/document-search
Simple search endpoint, does not create a new message or records in the DB
# Activate User Api
Source: https://docs.hymalaia.com/api-reference/user_management/activate_user_api
PATCH /api/manage/admin/activate-user
# Bulk Invite Users
Source: https://docs.hymalaia.com/api-reference/user_management/bulk_invite_users
PUT /api/manage/admin/users
emails are string validated. If any email fails validation, no emails are
invited and an exception is raised.
# Deactivate User Api
Source: https://docs.hymalaia.com/api-reference/user_management/deactivate_user_api
PATCH /api/manage/admin/deactivate-user
# Delete User
Source: https://docs.hymalaia.com/api-reference/user_management/delete_user
DELETE /api/manage/admin/delete-user
# Get Auth Type
Source: https://docs.hymalaia.com/api-reference/user_management/get_auth_type
GET /api/auth/type
# Get User Role
Source: https://docs.hymalaia.com/api-reference/user_management/get_user_role
GET /api/get-user-role
# List Accepted Users
Source: https://docs.hymalaia.com/api-reference/user_management/list_accepted_users
GET /api/manage/users/accepted
# List All Users
Source: https://docs.hymalaia.com/api-reference/user_management/list_all_users
GET /api/manage/users
# List All Users Basic Info
Source: https://docs.hymalaia.com/api-reference/user_management/list_all_users_basic_info
GET /api/users
# List Invited Users
Source: https://docs.hymalaia.com/api-reference/user_management/list_invited_users
GET /api/manage/users/invited
# Remove Invited User
Source: https://docs.hymalaia.com/api-reference/user_management/remove_invited_user
PATCH /api/manage/admin/remove-invited-user
# Set User Role
Source: https://docs.hymalaia.com/api-reference/user_management/set_user_role
PATCH /api/manage/set-user-role
# Verify User Logged In
Source: https://docs.hymalaia.com/api-reference/user_management/verify_user_logged_in
GET /api/me
# Basic Auth Setup
Source: https://docs.hymalaia.com/auth/basic-auth-setup
How to set up Hymalaia with username/password authentication
## Basic Auth Setup
This guide explains how to set up Hymalaia with basic username/password authentication. While this is the easiest way to get started, we **recommend using Google OAuth, OIDC, or SAML** for production environments.
If you’re unsure which auth approach fits best for your organization, feel free to [reach out to us](mailto:support@hymalaia.com) — we’re happy to help.
***
## 🛠️ Environment Variables
To enable basic authentication, set the following in your `.env` file:
```
AUTH_TYPE=basic
```
Once you've updated your environment and restarted Hymalaia, you should see a **Sign Up** screen when you visit the app.
> ✅ If you don’t want to require email verification, that’s all you need to do!
***
## 📧 Email Verification (Optional)
To require users to verify their email before accessing Hymalaia, add these additional values to your `.env`:
```
AUTH_TYPE=basic
REQUIRE_EMAIL_VERIFICATION=true
SMTP_USER=noreply@hymalaia.app
SMTP_PASS=
# Only needed if not using a Google-powered email account
SMTP_SERVER=
SMTP_PORT=587
```
Once configured, Hymalaia will send a verification email with a **"link to verify"** to each new user. They won’t be able to use Hymalaia until their email is verified.
> If you're using a Gmail-powered account, you’ll need to enable access for less secure apps or configure an [App Password](https://support.google.com/accounts/answer/185833).
***
## 🧪 What You'll See
After setting this up and restarting Hymalaia, you’ll be greeted with the following screen:

***
Need help? [Check the full guide here](https://docs.hymalaia.com/basic_auth)
# Google OAuth Setup
Source: https://docs.hymalaia.com/auth/google-oauth-setup
How to set up user login via Google OAuth in Hymalaia
## Setting up the Google Cloud App
Create a Google project: [Google Cloud Console](https://console.cloud.google.com/projectcreate)
## Enabling the People API
Enable the [Google People API](https://console.cloud.google.com/apis/library/people.googleapis.com). Make sure the correct project is selected.
## Setting up the OAuth Consent Screen
1. Go to **APIs & Services** in the left sidebar.
2. Select **OAuth Consent Screen**.
**Choose user type:**
* Choose **Internal** if your organization uses Google Workspace.
* Otherwise, choose **External**.
On the next page:
* **App name:** `Hymalaia` (or any name you prefer)
* **User support email:** Your email (or `support@hymalaia.com`)
* **App logo:** Optional (use the Hymalaia logo or leave blank)
* **Developer contact information:** Your email (or `support@hymalaia.com`)
Leave optional fields blank and click **SAVE AND CONTINUE**.
Skip Scopes and Test users sections.
## Setting up Credentials
1. Go to **Credentials** in the sidebar.
2. Click **+ CREATE CREDENTIALS** → **OAuth client ID**.
3. Select **Web application** and name it `Hymalaia`.
4. Set **Authorized JavaScript origins**:
```txt theme={null}
http://localhost:3000
https:// // e.g. https://www.hymalaia.com
```
5. Set **Authorized redirect URIs**:
```txt theme={null}
http://localhost:3000/auth/oauth/callback
https:///auth/oauth/callback
```
Click **CREATE** and save the **Client ID** and **Client Secret**.
## Turning on OAuth in Hymalaia
OAuth is enabled using the following environment variables:
```env theme={null}
AUTH_TYPE=google_oauth
OAUTH_CLIENT_ID=
OAUTH_CLIENT_SECRET=
```
If in production, also set:
```env theme={null}
WEB_DOMAIN=https://
```
### Non-Containerized Setup
Set the above environment variables when running Hymalaia processes.
* Backend API uses the variables.
* Frontend queries the API to determine the auth setting.
### Docker Compose
Create a `.env` file in `hymalaia/deployment/docker_compose/` with the variables:
```env theme={null}
AUTH_TYPE=google_oauth
OAUTH_CLIENT_ID=
OAUTH_CLIENT_SECRET=
WEB_DOMAIN=https://
```
### Kubernetes
Kubernetes assumes OAuth is required in production.
Replace the `REPLACE-THIS` placeholders in your `secrets.yaml` file with the **base64-encoded** client ID and client secret.
```yaml theme={null}
apiVersion: v1
kind: Secret
metadata:
name: hymalaia-oauth-secret
namespace: hymalaia
stringData:
OAUTH_CLIENT_ID:
OAUTH_CLIENT_SECRET:
```
# OIDC/SAML Setup
Source: https://docs.hymalaia.com/auth/oidc-saml-setup
Integrating Hymalaia with your IdP
## Integrating Hymalaia with Your IdP
As part of the **Enterprise Edition**, Hymalaia adds support for OIDC/SAML and integrates with popular IdPs such as Okta, Microsoft Entra ID, and more. We also support custom integrations with in-house IdPs on request.
If you're looking to set this up, feel free to reach out to us directly. We’d be happy to assist you in configuring this integration.
# Airtable Connector
Source: https://docs.hymalaia.com/connectors/airtable
Access tables from Airtable
## How it works
The Airtable connector pulls in tables from **Airtable**.\
It indexes:
* The **table name**
* The **table type**
* The **contents** of the table
Table updates are pulled in every **24 hours by default**.
## Setup
### Get your Airtable PAT
To get your token, follow the instructions [here](https://airtable.com/developers/web/api/personal-access-tokens).
## Indexing
1. In the **Hymalaia UI**, navigate to the **Admin Dashboard** and select the **Airtable Connector**.
2. Create a new credential and **paste your Airtable PAT**.
3. Fill out the form with the **base ID** and **table ID**.
You can find these in the URL when viewing the table in Airtable.\
For example, if the URL is: `https://airtable.com/appCXJqDFS4gea8tn/tblRxFQsTlBBZdRY1/viwVUEJjWPd8XYjh8`, then the base ID is `appCXJqDFS4gea8tn` and the table ID is `tblRxFQsTlBBZdRY1`.
# Asana Connector
Source: https://docs.hymalaia.com/connectors/asana-connector
Index tasks and comments from Asana projects
## How it works
The Asana connector pulls in tasks and their associated comments from specified projects or all projects in a workspace.
## Setting up
### Authorization
Create an Asana Personal Access Token:
* Log in to your Asana account and go to [https://app.asana.com/0/my-apps](https://app.asana.com/0/my-apps)
* Click “Create New Personal Access Token”
* Give it a name (e.g., Hymalaia Integration”) and create the token
* Copy the token - you’ll need to provide this to Hymalaia
### Indexing
Navigate to the Admin Dashboard and select the Asana Connector
Provide the following information:
* **Asana API Token**: Paste the Personal Access Token you created earlier
* **Workspace ID**: Enter your Asana workspace ID. You can find this at [https://app.asana.com/api/1.0/workspaces](https://app.asana.com/api/1.0/workspaces). It’s a number that looks like `1234567890123456`.
* **Project IDs (optional)**: If you want to index specific projects, enter their IDs separated by commas. Leave this empty to index all projects in the workspace.\
Example: `1234567890123456,2345678901234567`.\
You can find a project ID by clicking on a project in Asana. In the URL, it will look like:\
`https://app.asana.com/0/1208338159336610/1208338159510597`, where `1208338159336610` is the project ID.
* **Team ID (optional)**: If you want to index team-visible tasks in addition to public tasks, enter a team ID. Leave this empty if you don’t need this feature.
Click “Connect” to start the indexing process
> **Note**: The connector will respect the permissions of the user associated with the provided API token. Ensure that this user has access to all the projects you want to index.
# Axero Connector
Source: https://docs.hymalaia.com/connectors/axero-connector
Index articles, blogs, wikis, and forums from Axero (Communifire) via the REST API
## How it works
The Axero connector uses your site’s **REST API** to pull **articles**, **blogs**, **wikis**, and **forums** (threaded as parent post plus replies). Content is taken from summaries/bodies where the API provides them, with links to the live Axero URLs.
The connector default schedule is **once per day** (`overrideDefaultFreq` in product config).
## Setting up
### Authorization
Create a credential with:
* **Axero Base URL** — the root URL of your Axero / Communifire site, including trailing path style your deployment uses (the product normalizes so the API base ends with `/`; e.g. `https://yourcompany.axerosolutions.com/`)
* **Axero API Token** — your **Rest-Api-Key** from Axero (REST API authentication header). See your Axero admin / [REST API documentation](https://my.axerosolutions.com/spaces/5/communifire-documentation/wiki/view/370/rest-api) for generating keys and required permissions.
### Indexing
In the Hymalaia Admin Panel, open the **Axero** connector.
In **Step 1**, set up credentials:
* Select an existing credential, or click **Create New**
* Enter **Axero Base URL** and **Axero API Token**
Click **Create** to save the credential configuration.
Ensure the correct credential is selected, then click **Continue**.
In **Step 2**, specify:
* **Connector Name** — a display name (e.g. `Axero – Intranet`)
* **Spaces** — optional list of **Space IDs** to limit indexing; leave empty to index **all** spaces
* **Access Type** — **Public** or **Private** in Hymalaia
Click **Create Connector** to start indexing.
Use Space IDs exactly as shown in Axero when restricting by space.
# Bitbucket Connector
Source: https://docs.hymalaia.com/connectors/bitbucket-connector
Access knowledge from your Bitbucket Repositories (Cloud only)
## How it works
The Bitbucket Connector indexes all Pull Requests from a specified Bitbucket Cloud repository, project, or entire workspace.
It indexes **OPEN**, **MERGED**, and **DECLINED** pull requests, including their titles and descriptions.
It also captures key metadata such as the author, reviewers, current state, creation/update timestamps, and a direct link back to the original pull request in Bitbucket.
## Setting up
This connector can only be used with **Bitbucket Cloud**.
### Authorization
The Bitbucket Connector uses an **API Token** for authentication. To create an API token:
1. **Log in to Bitbucket**\
Log in to your Bitbucket account.
2. **Open account settings**\
Select the Settings cog in the upper-right corner of the top navigation bar.
3. **Access Atlassian account settings**\
Under Personal settings, select **Atlassian account settings**.
4. **Go to the Security tab**\
Select the **Security** tab on the top navigation bar.
5. **Manage API tokens**\
Select **Create and manage API tokens**.
6. **Create a scoped token**\
Select **Create API token with scopes**.
7. **Name the token**\
Give the API token a name and an expiry date, usually related to the application that will use the token and select **Next**.
8. **Choose Bitbucket**\
Select **Bitbucket** as the app and select **Next**.
9. **Select scopes**\
Select the scopes (permissions) the API token needs and select **Next**.
* **Projects**: `read:project:bitbucket`
* **Repositories**: `read:repository:bitbucket`
* **Pull Requests**: `read:pullrequest:bitbucket`
10. **Create the token**\
Review your token and select the **Create token** button. The page will display the new API token.
11. **Save the token**\
Copy the generated API token and either record or paste it into the application you want to give access.
The token is only displayed once and can't be retrieved later.
For the most up-to-date instructions, refer to the [official Bitbucket documentation](https://support.atlassian.com/bitbucket-cloud/docs/create-an-api-token/).
### Indexing
1. **Open the Bitbucket connector**\
Navigate to the **Admin Dashboard** and select the **Bitbucket Connector**.
2. **Create credentials**\
Click **Create new credentials** and provide the following:
* **Name**: A descriptive name for your credentials.
* **Email**: The email address for your Bitbucket account.
* **API token**: The API token you created in the previous step.
3. **Configure connector details**\
Fill in the connector details:
* **Name**: A descriptive name for the connector.
* **Workspace name**: The `WORKSPACE_NAME` from your Bitbucket URL (`https://bitbucket.org/{WORKSPACE_NAME}/...`).
* **Repositories or Projects** (Optional): A comma-separated list of repository slugs or project keys to index.
This configuration will index all pull requests from the specified repositories. You can also configure it to index all repositories within a project or an entire workspace.
# BookStack Connector
Source: https://docs.hymalaia.com/connectors/bookStack-connector
Access knowledge from your own BookStack instance
## How it works
The BookStack connector fetches all shelves, books, chapters and pages from the connected instance upon connector setup. From that point on, the connector will pull in everything updated since last sync every 10 minutes.
## Setting up
### Authorization
You will need API credentials for a user in your BookStack instance. To do this:
* Find or create a user you’d want to use as the connection user.
> Visibility of BookStack contents will depend on this user’s permissions.
* This user must have a role assigned that has the “Access system API” system permission.
* Edit that user using an admin account, and find the “API Tokens” section at the bottom of the view.
* Click the “Create Token” button, then enter a name and (optionally) an expiry date for the token. Then press save.
* Copy the shown “Token ID” and “Token Secret” values for the **Indexing** section below.
### Indexing
* Navigate to the Admin Dashboard and select the BookStack connector.
* In Step 1, provide the **base URL** of your BookStack instance, along with the **API Token ID** and the **API Token Secret** you obtained in the “Authorization” steps above:
* Click the **Connect** button! Your content will then be pulled into Hymalaia every 10 minutes.
# ClickUp Connector
Source: https://docs.hymalaia.com/connectors/clickUp-connector
Access tasks from ClickUp
## How it works
The ClickUp connector will pull in all tasks from the ClickUp workspace, or specific space(s), list(s), folder(s) specified by the user.
Tasks are updated every 10 minutes.
## Understanding ClickUp Hierarchy
In ClickUp, there are multiple containers which contain task(s). These could be:
* Entire Workspace
* Spaces
* Folders
* Lists
Detailed information on the hierarchy of the above-mentioned objects is available [here](https://help.clickup.com/hc/en-us/articles/13856392825367-Intro-to-the-Hierarchy):
## Setting up
### Authorization
1. Log into [ClickUp](https://clickup.com).
2. In **ClickUp 2.0**, click your avatar in the lower-left corner and select **Apps**.\
In **ClickUp 3.0**, click your avatar in the upper-right corner, select **Settings**, and scroll down to click **Apps** in the sidebar.
3. Under **API Token**, click **Generate**.
4. A personal API token will be generated and displayed.
### Indexing
1. Navigate to the Admin Dashboard and select the **ClickUp Connector**.
2. In Step 1, provide your **API Token** and the **Team ID**.
3. Select the type of connector you want to pull tasks from.\
**Notes**:
* This could be **Entire Workspace**, **Space(s)**, **Folder(s)**, or **List(s)**.
* To pull tasks from the entire workspace, just select **Entire Workspace** from the dropdown and do not add any ID(s).
* To pull tasks from specific **Space(s)**, **Folder(s)**, or **List(s)**, select the respective option from the dropdown and add the ID(s) below. At least one ID needs to be added in this case.
* The space ID(s), folder ID(s), and list ID(s) can be found in the web URL in ClickUp.\
For example, if you open a list in ClickUp, you will see the list ID in the address bar:
4. If any of the **Space(s)**, **List(s)**, or **Folder(s)** connector types is selected, add one or more respective IDs to index the tasks from.
5. Check **Retrieve Task Comments?** if you also want to retrieve and index all comments for each indexed task. Leave this unchecked if you don’t want to index task comments.
6. Click **Connect** to begin indexing.
# Coda Connector
Source: https://docs.hymalaia.com/connectors/coda-connector
Index Coda docs, pages, and tables via the Coda REST API
## How it works
The Coda connector uses the [Coda REST API](https://coda.io/developers/apis/v1) to index content your API token can access. For each Coda doc it discovers **pages** (title, link, and page body when available) and **tables** (each table is one document; **rows** become sections with cell values).
Updates are picked up on the connector’s scheduled runs (typically **daily**, like other connectors).
## Setting up
### Authorization
Hymalaia uses a **Coda API bearer token**. Create a token in Coda with access to the docs you want indexed (see [Coda’s API documentation](https://coda.io/developers) for creating and scoping tokens).
### Indexing
In the Hymalaia Admin Panel, open the **Coda** connector.
In **Step 1**, set up credentials:
* Select an existing credential, or click **Create New**
* Paste your **Coda Bearer Token**
Click **Create** to save the credential configuration.
Ensure the correct credential is selected, then click **Continue**.
In **Step 2**, set:
* **Connector Name** — a display name (e.g. `Team wiki`)
* **Access Type** — **Public** or **Private** in Hymalaia
Click **Create Connector** to start indexing.
Indexing covers all docs the token can list; restrict access in Coda by using a token with limited doc/workspace access if needed.
# Confluence Connector
Source: https://docs.hymalaia.com/connectors/confluence-connector
Access knowledge from your company Wiki
## How it works
The Confluence connector pulls in all pages and comments from the specified spaces/pages once at the beginning and then pulls updates every 10 minutes.
## Setting up
### Authorization
Follow the guide described [here](https://developer.atlassian.com/cloud/confluence/basic-auth-for-rest-apis/) to get an access token.
### Indexing
1. Navigate to the **Admin Dashboard** and select the **Confluence Connector**.
2. For your credentials, provide the following:
* **Access Token**
* **Username** (typically an email address)
3. For Confluence setup, provide:
* **Wiki Base URL**: The base URL of your Confluence instance (e.g., `https://your-domain.atlassian.net/wiki`)
* **Is Cloud**: Check this box if using **Confluence Cloud**, uncheck if using **Confluence Server/Data Center**
4. Then choose how you’d like this connector to index your Confluence instance:
#### Everything
* Indexes all content the provided credentials have access to.
#### Space
* Input the **key** of the space to index (e.g., `KB`).
#### Page
* **Page ID**: ID of the specific page to index (e.g., `131368`).\
Leave empty to index the entire space.
* **Index Recursively**: Check to index the specified page **and** all of its children.
#### CQL Query
* If you want finer control over what is indexed, use a **CQL query**.
* Your query must contain `type=page`.\
Note: Any `lastmodified` filters will be overwritten.\
[Learn more about CQL](https://developer.atlassian.com/cloud/confluence/advanced-searching-using-cql/)
5. Click the **Connect** button!\
All the specified spaces/pages and their comments will now be pulled into Hymalaia every 10 minutes.
## Permission Syncing
If you are an **enterprise customer** connecting to **Confluence Server/Data Center** and you want to enable **permission syncing**, the provided credentials must belong to an **admin user**.
# Databricks Connector
Source: https://docs.hymalaia.com/connectors/databricks-connector
Index Databricks Unity Catalog (or Hive) table metadata in Hymalaia
## How it works
The Databricks connector indexes **table metadata** for a given Unity Catalog (or Hive) **database** and **schema**: it reads column types from `information_schema` and builds a synthetic **DDL** document per table (including primary/foreign key metadata when available). It does **not** index row-level table data.
Tables whose metadata has changed (based on `last_altered` in `information_schema.tables`) are picked up on incremental runs. Like other connectors, indexing typically runs on a **daily** schedule.
## Setting up
### Authorization
Databricks uses a **SQL warehouse** connection over HTTP, with a **personal access token** (PAT). Create a credential with:
* **Server hostname** — the hostname from your warehouse’s JDBC/ODBC connection details (e.g. `adb-1234567890.4.azuredatabricks.net`), without `https://`
* **HTTP path** — the warehouse **HTTP Path** from the same connection dialog (starts with `/sql/1.0/warehouses/...`)
* **Access token** — a Databricks PAT for a user that can run metadata queries on the target catalog/database/schema
Create or rotate tokens under **User settings → Developer → Access tokens** in the Databricks workspace. The SQL warehouse must be running or auto-resume when the connector runs.
### Indexing
In the Hymalaia Admin Panel, open the **Databricks** connector.
In **Step 1**, set up credentials:
* Select an existing Databricks credential, or click **Create New**
* Enter **Server hostname**, **HTTP path**, and **Access token**
Click **Create** (or equivalent) to save the credential configuration.
Ensure the correct credential is selected, then click **Continue**.
In **Step 2**, specify:
* **Connector Name** — a display name for this connector (e.g. `Lakehouse prod`)
* **Database** — the Databricks **catalog.database** name as used in SQL (the first level is often your catalog; use the value that matches `information_schema` for your environment)
* **Schema** — the schema name within that database
* **Access Type** — whether indexed content is **Public** or **Private** in Hymalaia
Click **Create Connector** to start indexing.
The connector will index table DDL for the configured database and schema. Repeat for other databases/schemas if needed.
For connection details and tokens, see [Databricks SQL warehouses](https://docs.databricks.com/sql/admin/sql-endpoints.html) and [personal access tokens](https://docs.databricks.com/dev-tools/auth.html#personal-access-tokens-for-workspace-users).
# Discord Connector
Source: https://docs.hymalaia.com/connectors/discord-connector
Access knowledge from your Discord Messages
## How it works
The Discord connector indexes **all channels** for **all servers (guilds)** mentioned.
***
## Setting up a Bot User
### 1. Create the Application
* Go to [Discord Developer Portal](https://discord.com/developers/applications)
* Click **"New Application"**
* Name your application and click **"Create"**
### 2. Configure the Bot
* Go to the **"Bot"** tab
* Enable **"Public Bot"** (optional, allows others to invite it)
* Enable **"MESSAGE CONTENT INTENT"** under Privileged Gateway Intents
* Click **"Copy"** to save the Bot Token
> 🔁 If lost, you can **Reset Token**
***
## Inviting the Bot to Server(s)
1. Go to your application at [Discord Developer Portal](https://discord.com/developers/applications)
2. Navigate to the **"Installation"** tab
3. Enable **Guild Install** under Installation Contexts
4. Under **Scopes**, add:
* `bot`
5. Under **Permissions**, enable:
* `Manage Messages`
* `Read Message History`
* `View Channels`
6. Use the **Discord-generated link** to invite the bot to your server
> Make sure you have **"Manage Server"** permission
7. Open the invite link in your browser and add the bot to your server(s)
***
## Indexing
1. Navigate to the **Connector Dashboard**
2. Select the **Discord Connector**
3. Under **Credentials**, enter the **Bot Token** (from setup step 2)
4. Provide the **Server IDs**
> To get a server ID:\
> Right-click the server name (top-left) → **Copy Server ID**
5. Provide **Channel Names** (optional)
> To get a channel name:\
> Click ⚙️ next to the channel → Overview section
6. (Optional) Set a **Start Date** (`YYYY-MM-DD`) to index messages after this date
Once configured, the connector will index all messages from the specified channels and servers where the bot is present.
# Discourse Connector
Source: https://docs.hymalaia.com/connectors/discourse-connector
Access knowledge from your Discourse Topics
## How it works
The Discourse connector indexes documents from your Discourse Topics.
## Setting up
### Authorization
1. Log into your **Discourse** account.
2. Ensure the user has **admin privileges**.
3. Go to the **Admin** menu from the homepage.
4. Open the **Advanced** submenu and select **API keys**.
#### Create API Key:
* Click **New API Key**
* Name it `Hymalaia`
* Set **User Level** to `All Users`
* Set **Scope** to `Read-only`
* Click **Save**
5. Copy the generated **API Key**.
6. Use the **username** of the Discourse account for the **API Key Username** in Hymalaia.
### Indexing
1. Enter a **name** for the connector (useful if managing multiple Discourse connectors).
2. Provide your **Discourse base URL** (e.g., `https://community.yourdomain.com`).
3. Enter the **Topics** you want to index:
* Leave blank to index **all available topics**
4. Click **Connect** to begin indexing.
The connector will now index the selected topics and sync any updates.
# Document360 Connector
Source: https://docs.hymalaia.com/connectors/document360-connector
Access wiki articles from Document360
## How it works
The Document360 connector will pull in all the articles based on the specified workspace and categories.
* Articles can be saved in **HTML** or **Markdown** format in Document360.
* **Only HTML** format is currently supported.
* Articles are updated **every 10 minutes**.
> ⚠️ If you need Markdown support, please submit an issue [here](#).
## Setting up
### Authorization
1. Navigate to:\
**Settings > Knowledge base portal > API tokens**
2. Click **Generate**
3. Enter a **Token name**
4. Select the **Request methods** allowed for the API key
5. Click **Generate**
6. Your **Portal ID** and **API Key** will be displayed
### Indexing
1. Go to the **Admin Dashboard**
2. Select the **Document360 Connector**
3. In **Step 1**, provide:
* **Portal ID**
* **API Key**
4. Enter the **Workspace ID**
5. Choose **Categories** to index:
* Leave empty to include **all categories**
6. Click **Connect** to begin indexing
The connector will now pull articles from Document360 and sync updates every 10 minutes.
# Dropbox Connector
Source: https://docs.hymalaia.com/connectors/dropbox-connector
Access knowledge from Dropbox
## How it works
The Dropbox connector ingests all documents from your Dropbox account into Hymalaia.
The connector recursively pulls all files from the root directory of your Dropbox account.
It is currently not possible to pull files only from specific directories.
The connector will only pull once upon initialization. If you would like to pull more documents,
you must generate a new access token (step 6 below), put that token into the connector, and re-initialize the connector.
## Setting up
### Authorization
Head over to [https://www.dropbox.com/developers/apps](https://www.dropbox.com/developers/apps) and click the `Create app` button on the top right.
Select `Scoped access` and `Full Dropbox` as the type of access.
Give your app a name like 'Hymalaia Connector' and click `Create app`.
Click on the `Permissions` tab.
Check the `files.content.read` and `sharing.write` permissions so the files can be read and links for the documents
can be created. Click `Submit` to save the changes.
Navigate to the `Settings` tab and scroll down to the `OAuth 2` section.
Click `Generate` to generate an access token.
You must complete granting permissions before generating an access token.
Changing permissions will not affect existing access tokens, and Hymalaia will be unable to index your Dropbox.
Copy the access token.
Refresh the page if you need to regenerate your access token
### Indexing
In the Hymalaia UI, navigate to the Admin Panel and select the **Dropbox** Connector
Provide the access token from the previous step
Click `Connect` to begin indexing your Dropbox files
# Drupal Wiki Connector
Source: https://docs.hymalaia.com/connectors/drupal_wiki-connector
Access knowledge from your Drupal Wiki instance
## How it works
The Drupal Wiki connector indexes content from your Drupal Wiki instance including spaces, pages,
and optionally attachments.
The connector fetches all accessible content upon initial setup and then performs incremental updates to keep your
knowledge base synchronized.
The connector respects the permissions of the provided API token, indexing only content that the token has access to,
whether public or private.
## Setting up
### Authorization
You will need an API access token for your Drupal Wiki instance.
The token must start with `pat:` (Personal Access Token).
Navigate to your Drupal Wiki instance
Follow the documentation to generate an access token:
[https://help.drupal-wiki.com/node/605#2-Zugriffs-Token-generieren](https://help.drupal-wiki.com/node/605#2-Zugriffs-Token-generieren)
Ensure the REST API interface is available in your Drupal instance
Copy the generated API token (it should start with `pat:`)
The API token determines which content will be accessible to Hymalaia.
Only content that the token user has permission to access will be indexed.
### Indexing
Navigate to the Admin Dashboard and select the **Drupal Wiki** connector
In **Step 1**, provide your Drupal Wiki configuration:
* **API Token**: The access token you generated (starting with `pat:`)
In **Step 2**, choose your indexing scope:
* **Base URL**: The base URL of your Drupal Wiki instance (e.g., `https://help.drupal-wiki.com`)
* **All Content**: Index all spaces and pages accessible to your API token
* **Specific Spaces**: Enter specific Space IDs to index only certain areas
* To find Space IDs, refer to: [https://help.drupal-wiki.com/node/606](https://help.drupal-wiki.com/node/606)
* **Specific Pages**: Enter specific Page (Node) IDs to index only certain pages
Configure additional options:
* **Include Attachments**: Check this to also index file attachments (PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT,
HTML, MD, CSV)
Click the `Connect` button!
Your Drupal Wiki content will be indexed and kept up to date with incremental synchronization.
## Supported Content Types
The Drupal Wiki connector indexes the following content:
* **Spaces**: Organizational units within your Drupal Wiki
* **Pages**: Individual wiki pages with HTML content (converted to plain text)
* **Attachments** (optional): Various document formats up to 10MB
## Technical Details
* **API Usage**: Uses Drupal Wiki's REST API endpoints
* **Synchronization**: Supports incremental updates for efficient syncing
* **Content Limits**: 10MB for attachments, 600,000 characters for text content
* **Deployment Support**: Works with both self-hosted and cloud-hosted Drupal Wiki instances
## Permission Syncing
The connector automatically respects your Drupal Wiki's permission system.
Content access is determined by the API token's permissions,
ensuring that only authorized content is indexed and searchable within Hymalaia.
# Egnyte Connector
Source: https://docs.hymalaia.com/connectors/egnyte-connector
Access files stored in Egnyte
## How it works
The Egnyte connector pulls in files stored in Egnyte. The connector indexes:
* **File name**
* **File type**
* **File contents**
New files are automatically pulled every **10 minutes**.
## Setting up
### Egnyte Application + Hymalaia Environment Variables
> 🛠️ This step is only required if you’re **self-hosting Hymalaia**. If you’re using **Hymalaia Cloud**, you can skip this section.
1. Create an Egnyte Application
* Refer to the [Egnyte API documentation](https://developers.egnyte.com/docs) for more information.
2. Set the following environment variables in your Hymalaia instance:
```bash theme={null}
EGNYTE_DOMAIN=your_egnyte_subdomain # e.g., "app4hymalaia"
EGNYTE_CLIENT_ID=your_client_id
EGNYTE_CLIENT_SECRET=your_client_secret
```
3. Restart your Hymalaia instance to apply the environment variables.
### Indexing
1. In the Hymalaia UI, go to the Admin Dashboard
2. Select the Egnyte Connector
3. Click Create New to begin the OAuth flow
4. Once authorized, you'll be redirected back to Hymalaia
5. Optionally, specify a folder path to index
6. Click Connect to start indexing your Egnyte files
# File Connector
Source: https://docs.hymalaia.com/connectors/file-connector
Access knowledge from Local Files
## How it works
The File Connector indexes user-uploaded files for retrieval and AI-powered answers.
* Supports: `.txt`, `.pdf`, `.docx`, `.pptx`, `.xlsx`, `.csv`, `.md`, `.mdx`, `.conf`, `.log`, `.json`, `.tsv`, `.xml`, `.yml`, `.yaml`, `.eml`, `.epub`
* You can also upload a `.zip` containing the supported file types
* Unsupported file types inside the zip will be ignored
* Optionally, you can add a metadata line to enhance searchability
## Adding Metadata
Add a metadata line at the very **top** of your file. Supported formats:
```
#HYMALAIA_METADATA={"link": ""}
```
This line must contain valid JSON. Available keys:
* `link`
* `primary_owners`
* `secondary_owners`
* `doc_updated_at`
* `file_display_name`
* Any custom `key: value` pairs (used as searchable tags in the UI)
### Example
```txt theme={null}
#HYMALAIA_METADATA={
"link": "https://github.com/hymalaia-dot-app/hymalaia/blob/main/CONTRIBUTING.md",
"primary_owners": ["support@hymalaia.com"],
"secondary_owners": ["founders@hymalaia.com"],
"doc_updated_at": "2023-11-30T13:06:08.589616-08:00",
"file_display_name": "Desired File Name!",
"status": "draft"
}
```
### Full file example
```txt theme={null}
#HYMALAIA_METADATA={"link": "https://www.hymalaia.com/captcha", "file_display_name": "Captcha Setup"}
How to set up captcha
Follow the example below to set up a captcha like you saw when you visited this page!
By including a captcha, this page is able to prevent web scrapers from reading it.
```
### Zip Upload + Metadata
When uploading a `.zip`, you can include a `.hymalaia_metadata.json` at the root of the archive:
```
| file1.txt
| file2.txt
| .hymalaia_metadata.json
```
Example `.hymalaia_metadata.json`:
```json theme={null}
[
{
"filename": "file1.txt",
"link": "https://example.com/file1",
"file_display_name": "File 1",
"primary_owners": ["owner1@example.com"],
"status": "in-review"
},
{
"filename": "file2.txt",
"link": "https://example.com/file2",
"file_display_name": "File 2",
"primary_owners": ["owner2@example.com"],
"status": "approved"
}
]
```
## Setting up
### Authorization
* No external authentication is required.
* Admins can upload files and make them available to everyone.
* *(WIP)* Users will soon be able to upload personal files and keep them private.
### Indexing
1. In the **Hymalaia Admin Dashboard**, go to the **File Connector**
2. Upload a supported file or a `.zip` archive
# Fireflies Connector
Source: https://docs.hymalaia.com/connectors/fireflies-connector
Access knowledge from your Fireflies meetings
## How it works
The Fireflies connector allows Hymalaia to index and retrieve knowledge from your Fireflies meetings automatically.
## Setting up
### Authorization
1. Log in to your [Fireflies](https://fireflies.ai/) account.
2. Click on your profile avatar and select **Settings** (or click **Settings** from the sidebar).
3. Go to **Developer Settings**.
4. Copy your **API Key**.
> ℹ️ **Note**: The Fireflies user must be an authorized user to access the API.
Once you have your API key, you can use it to authorize the Fireflies connector in Hymalaia.
### Indexing
1. Navigate to the **Admin Dashboard** in Hymalaia.
2. In the sidebar, select **Add Connector** and click on the **Fireflies** tile.
3. Click **Create New**, then enter:
* Your **API Key**
* *(Optional)* A name for the credentials
4. Click **Create** — your credentials will be saved and automatically selected.
5. Click **Continue** to:
* Choose a name for your connector
* Set **document access**
* Assign **groups** (optional)
6. Click **Create Connector**
✅ Hymalaia will automatically begin indexing your Fireflies meetings.
# Freshdesk Connector
Source: https://docs.hymalaia.com/connectors/freshdesk-connector
Access knowledge from your Freshdesk Tickets
## How it works
The Freshdesk connector indexes tickets from your Freshdesk account.
## Setting up
### Authorization
1. Log in to your [Freshdesk](https://freshdesk.com) account.
2. The Freshdesk user must be a verified **agent**, **admin**, or **owner**.
3. Click your **profile avatar** and choose **Profile Settings**.
4. Select **View API Key** and copy the key.
> ℹ️ **Note**: You will need your **domain**, **API key**, and **password** to authorize your Freshdesk connector in Hymalaia.
### Indexing
1. In the **Hymalaia Admin Dashboard**, click **Add Connector**.
2. Select the **Freshdesk** tile.
3. Click **Create New**.
4. Provide your:
* **Domain** (e.g. `yourcompany.freshdesk.com`)
* **Password**
* **API Key**
* Optional: A name for your credentials.
5. Click **Create** to save your credentials.
6. After clicking **Continue**, enter a **name** for your connector.
7. Click **Create Connector**.
Hymalaia will automatically begin indexing your Freshdesk tickets.
# GitBook Connector
Source: https://docs.hymalaia.com/connectors/gitBook-connector
Access documentation from GitBook
## How it works
The **GitBook Connector** pulls in all documentation content from your specified **GitBook spaces** to make them searchable and accessible within Hymalaia.
## Setting up
### Authorization
1. Go to your [GitBook Developer Settings](https://app.gitbook.com/account/developer)
2. Click **Create new token**
3. Provide a name and select the appropriate **scopes**
4. Click **Create** to generate the token
5. **Copy and save the token securely** — you won’t be able to see it again
> 🛡️ This token is required to access and sync GitBook content with Hymalaia.
### Indexing
1. In the **Hymalaia Admin Dashboard**, select **Add Connector** and click the **GitBook** tile
2. Paste your **API Token**
3. Enter your **Space ID**
> The Space ID is found in your GitBook space URL:\
> `https://app.gitbook.com/o//s/`
4. Click **Connect**
Your GitBook documentation will now begin syncing with Hymalaia.
# GitHub Connector
Source: https://docs.hymalaia.com/connectors/gitHub-connector
Access knowledge from your GitHub Repositories
## How it works
The GitHub Connector indexes **Pull Requests** and **Issues** from your specified repositories.
It will:
* Index **both Open and Closed PRs**, including the **Title** and **Summary**
* Index **both Open and Closed Issues**, along with their **comments**
* Include metadata such as:
* **URL**
* **Creator**
* And more
## Setting up
### Authorization
This connector uses a **GitHub Access Token**.
Follow these steps:
1. Log in to [GitHub](https://github.com).
2. In the upper-right corner, click your **profile avatar** and select **Settings**.
3. Scroll down to **Developer settings** → **Personal access tokens** → **Tokens (classic)**.
4. Click **Generate new token**.
5. **Grant `repo` access** so the token can access PRs and Issues.
6. Set an **expiration time**.
> ⚠️ Once the token expires, you must generate a new one and update it in Hymalaia to keep indexing up-to-date.
### Indexing
1. Go to the **Admin Dashboard**.
2. Select **Add Connector** and click on the **GitHub** tile.
3. Provide:
* The **GitHub Access Token**
* The repository URL (e.g., `https://github.com/hymalaia-dot-app/hymalaia`)
* An optional name for your credentials
4. Click **Create Connector**.
Hymalaia will automatically begin indexing your GitHub repository.
> Example repo: `https://github.com/hymalaia-dot-app/hymalaia`
# GitLab Connector
Source: https://docs.hymalaia.com/connectors/gitLab-connector
Access knowledge from your GitLab repositories
## How it works
The GitLab Connector indexes **Merge Requests** and **Issues** from your GitLab repository.
It will:
* Index **Open and Closed Merge Requests**, including **Title** and **Summary**
* Index **Issues** (and **Incidents**) with their **comments**, both **Open and Closed**
* Include metadata such as:
* **URL**
* **Creator**
* And more
## Setting up
### Authorization
This connector uses a **GitLab Access Token**.
To generate the token:
1. Log in to [GitLab](https://gitlab.com)
2. In the left sidebar, click your **avatar**
3. Select **Edit profile**
4. Go to **Access Tokens** and click **Add new token**
5. Enter:
* A **name** for the token
* An **expiry date**
> If not set manually, GitLab will default to **365 days from the current date**
6. Select the **desired scopes**
> See [GitLab documentation](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) for more details
7. Click **Create personal access token**
> ⚠️ Keep the token somewhere safe. Once it’s created, GitLab will not show it again.
### Indexing
1. Go to the **Admin Dashboard**
2. Select **Add Connector** and click on the **GitLab** tile
3. If you are **not self-hosting**, keep the **GitLab URL as default**
4. Provide:
* Your **GitLab Personal Access Token**
* The **GitLab repository URL** (e.g., `https://gitlab.com/hymalaia-ai/hymalaia`)
* Optionally, a **name** for your credentials
5. Click **Create Connector**
Hymalaia will now start indexing your GitLab repository.
# Gmail Connector
Source: https://docs.hymalaia.com/connectors/gmail-connector
Access knowledge from your Emails
## How it works
The **Gmail Connector** ingests your emails and syncs the latest information from Gmail every **10 minutes**.
> 📩 Currently supports **plain text emails only**.
## Setting up
> ⚠️ This connector is relatively involved to set up.
There are two options to configure the Gmail Connector:
### Option 1: OAuth Setup for Individual Accounts
If you're setting up for a **personal Gmail account**, follow the guide [here](#) (OAuth-based).\
✅ This method **does not require** a business Google Workspace account.
***
### Need Help?
If you're unsure which setup to choose or encounter any issues:
* 📧 Email: [support@hymalaia.com](mailto:support@hymalaia.com)
We’re here to help you set things up smoothly!
# Gong Connector
Source: https://docs.hymalaia.com/connectors/gong-connector
Access the latest call transcripts from Gong
## How it works
The **Gong Connector** imports and indexes **transcripts of calls** recorded via [Gong.io](https://www.gong.io).
It indexes:
* **Call title**
* **Call description**
* **Transcript contents**
> 🕒 New transcripts are pulled **every 10 minutes**.
## Setting up
### Authorization
To authorize access to Gong:
1. Log in to your **Gong Admin** account
2. Navigate to **Company Settings** (top right menu)
3. Under the **Ecosystem** section, select **API**
4. Click on **API KEYS** (next to "Integrations")
5. Click **Get API Key**
6. Note down:
* **Access Key**
* **Access Key Secret**
> 🔐 These credentials are required to allow Hymalaia to pull call transcripts.
### Indexing
1. Go to the **Hymalaia Admin Dashboard**
2. Select **Add Connector** and choose the **Gong** tile
3. Enter your:
* **Access Key**
* **Access Key Secret**
4. (Optional) Add specific **workspaces** to index
> Leave empty to index **all workspaces**
5. Click **Connect**
Hymalaia will begin indexing your Gong call transcripts automatically.
# OAuth Setup
Source: https://docs.hymalaia.com/connectors/google-drive-OAuth-setup
OAuth Setup for Google Drive Connector
This section walks through setting up the Google Drive connector using an OAuth-enabled Google App. Anyone can do this (even without a paid Google Workspace)!
If you’re an organization with a Google Workspace, and you’d rather use a Service Account to access Google Drive, checkout the section [here](#).
## Authorization
### Create a Google Cloud Project
* Visit the Google Cloud Console to create a new project: [Create Project](https://console.cloud.google.com/projectcreate)
### Enable the Google Drive API
* On the left panel, open **APIs & services**.
* Go to **Enabled APIs and services**.
* Click **+ ENABLE APIS AND SERVICES** at the top.
* Search for **Google Drive API** and click **ENABLE**.
* Alternatively, visit this link, select your project, and enable the Google Drive API.
### Enable the Admin SDK API
* Click on **+ ENABLE APIS AND SERVICES** again.
* Search for **Admin SDK API** and click **ENABLE**.
* Alternatively, visit this link, select your project, and enable the Admin SDK API.
### Enable the Google Sheets API
* Click on **+ ENABLE APIS AND SERVICES** again.
* Search for **Google Sheets API** and click **ENABLE**.
* Alternatively, visit this link, select your project, and enable the Google Sheets API.
### Enable the Google Docs API
* Click on **+ ENABLE APIS AND SERVICES** again.
* Search for **Google Docs API** and click **ENABLE**.
* Alternatively, visit this link, select your project, and enable the Google Docs API.
### Set up the OAuth consent screen
* Under **APIs & services**, select the **OAuth consent screen** tab.
* If you don’t have a Google Organization, select **External** for **User Type**.
* Call the app **Hymalaia** (or whatever you prefer).
* For the required emails, use any email of your choice or **[support@hymalaia.com](mailto:support@hymalaia.com)** if you wish for the Hymalaia team to help handle issues.
* Click **SAVE AND CONTINUE**.
### Set up Scopes
* Add the scope `.../auth/drive.readonly` for Google Drive API.
* Add the scope `.../auth/drive.metadata.readonly` for Google Drive API.
* Add the scope `.../auth/admin.directory.user.readonly` for Admin SDK API.
* Add the scope `.../auth/admin.directory.group.readonly` for Admin SDK API.
**Important:** If you plan on using permission syncing for this connector, the account performing the OAuth flow must have an Admin role in the Google Workspace that has access to the “Groups > Read” privilege. This can be set by an admin in the admin panel of the Google Workspace under **Account > Admin roles**.
### Set up Test users
This step is only applicable for users without a Google Organization.
* Typically for a company, Hymalaia would be set up as an internal app, so this step would not apply.
* Add at least one test user email. Only the email accounts added here will be allowed to run the OAuth flow to index new documents.
* Click **SAVE AND CONTINUE**, review the changes, and click **BACK TO DASHBOARD**.
### Create Credentials
* Go to the **Credentials** tab and select **+ CREATE CREDENTIALS** -> **OAuth client ID**.
* Choose **Web application** and give it a name like **HymalaiaConnector**.
* Add an **Authorized JavaScript origin** for `http://localhost:3000` (or `https://` if you have set up Hymalaia for production use).
* Add an **Authorized redirect URI** for `http://localhost:3000/admin/connectors/google-drive/auth/callback` (or `https:///admin/connectors/google-drive/auth/callback` if you have set up Hymalaia for production use).
* Click **Create** and on the right-hand side, next to **Client secret**, there is an option to download the credentials as a **JSON**. Download the JSON for use in the next step.
# Google Drive Connector Overview
Source: https://docs.hymalaia.com/connectors/google-drive-connector
Access knowledge from your Files
## How it works
The Google Drive connector ingests your drive documents. It syncs the latest information from your Google Drive every 10 minutes. Currently, it supports:
* Google Docs
* Google Sheets
* PDF files
## Setting up
**Note**: This Connector is relatively involved to set up.
If you want to set up the connector via individual account OAuth, follow the guide here. This does not require a business Google Workspace.
If you want to set up the connector via Service Accounts, follow the guide here. This does require a business Google Workspace / access to the Admin panel. If you are an organization that meets these pre-requisites, then this is likely the preferred approach.
# Google Sites Connector
Source: https://docs.hymalaia.com/connectors/google-sites-connector
Access sites and pages from Google Sites
## How it works
Export your Google Site using [Google Takeout](https://takeout.google.com/), and then upload the zip to Hymalaia.
We'll then index all your pages, and allow you to ask questions based on the site's content!
## Setting up
### Exporting Your Google Site
Follow the guide [here](https://www.steegle.com/google-sites/how-to/export-with-takeout) to export your Google Site.
Be sure to include ONLY the Google Site in the folder.
### Indexing
Navigate to the Admin Panel and select the **Google Sites** Connector.
Find and enter the base URL of your Google Site. This is the URL used to access the root page of the site.
Upload the Zip file downloaded in the export step.
Click the **Upload** button. Your site will be indexed and searchable upon completion.
# Google Storage Connector
Source: https://docs.hymalaia.com/connectors/google-storage-connector
Access documents stored in Google Cloud Storage buckets
## How it works
The Google Cloud Storage connector pulls in all documents from a specified GCS bucket.\
It supports multiple file types including **PDF, DOC, DOCX, TXT**, and more.
> Documents are automatically synced and updated every **24 hours**.
***
## Setting up
### Authorization
1. Log into your [Google Cloud Console](https://console.cloud.google.com/).
2. Navigate to **IAM & Admin** > **Service Accounts**.
3. Click **Create Service Account**.
4. Set a name for the account (e.g., `hymalaia-gcs-connector`) and click **Create**.
5. Under **Role**, select `Storage Object Viewer` or another read-only role, then click **Continue**.
6. Click **Done** to finish creating the account.
7. On the **Service Accounts** page, select the newly created account.
8. In the **Keys** section, click **Add Key** → **Create new key**.
9. Choose **JSON** and click **Create**.
10. A JSON file will be downloaded – this contains your credentials.
From the JSON file, extract the following:
* `project_id`
* `client_id` (→ **Access Key ID**)
* `private_key` (→ **Secret Access Key**)
***
### Indexing
1. Go to the **Admin Dashboard** in Hymalaia.
2. Select the **Google Cloud Storage Connector**.
3. In **Step 1**, provide:
* **GCS Project ID**
* **Access Key ID** (from `client_id`)
* **Secret Access Key** (from `private_key`)
4. Click **Update** to save the credentials.
5. In **Step 2**, specify the **GCS Bucket** you want to index.
6. Click **Connect** to begin indexing.
***
## Understanding Google Cloud Storage Structure
Google Cloud Storage organizes your data into **buckets**.\
Each bucket can contain an unlimited number of **objects (files)**.
You can think of a **bucket** as a root folder and the **objects** as its files.
For more details, see the [Google Cloud Storage documentation](https://cloud.google.com/storage/docs/introduction).
# Guru Connector
Source: https://docs.hymalaia.com/connectors/guru-connector
Access and index Guru Cards using a User Access Token
## How it works
The Guru connector pulls in all **Cards** your user has access to, using a **User Access Token**.
> Guru Cards are refreshed automatically **every 10 minutes**.
***
## Setting up
### Authorization
1. Obtain a **User Access Token** from your Guru account.
2. Follow the official [Guru API guide](https://developer.getguru.com/reference/authentication) for detailed steps on creating a token.
***
### Indexing
1. Go to the **Admin Dashboard** in Hymalaia.
2. Select the **Guru Connector**.
3. In **Step 1**, enter:
* Your **Username** (usually your email)
* The **Access Token** obtained above
4. Click **Connect** to start indexing your Guru Cards.
> Once connected, Hymalaia will automatically keep your Guru content up to date.
# Highspot Connector
Source: https://docs.hymalaia.com/connectors/highspot-connector
Index and search your Highspot content using Hymalaia
## How it works
The Highspot connector indexes documents from your Highspot instance. It can index:
* **Specific spots** that you add manually
* Or **all spots** your user can view and download
> Content is pulled in securely based on your access permissions.
***
## Setting up
### ⚠️ Prerequisite: Platform Plus Add-on
> The **Highspot Platform Plus** add-on is required to access API features.\
> Without this, the connector will not work. Please confirm your organization has access.
***
## Authorization
### Enabling Developer Options
1. Log into Highspot as an **admin**.
2. Click on your **profile icon** → select **Settings**.
3. Under **Company Settings**, select your company.
4. Navigate to **Access and Privacy** → click **API Access**.
5. Add the user(s) who should be able to generate API credentials.
6. Make sure **API Access for Users** is enabled.
***
### Generating API Credentials
1. Log in as the user with API access.
2. Go to your **profile icon** → **Settings**.
3. Open the **Developer** tab.
4. Generate a new **API key and secret**.
5. Note down your:
* **API Key**
* **Secret**
* **Base URL**
***
## Indexing
1. Navigate to the **Admin Dashboard** in Hymalaia.
2. Select the **Highspot Connector**.
3. Provide the following:
* API Key
* Secret
* Base URL
4. Choose your indexing option:
* Index **specific spots**
* Index **all accessible spots**
5. Click **Connect** to begin syncing your Highspot content.
> Your Highspot data will now be indexed and searchable within Hymalaia.
# HubSpot Connector
Source: https://docs.hymalaia.com/connectors/hubSpot-connector
Access CRM data from HubSpot
## How it works
The HubSpot connector pulls in data from your HubSpot CRM, including:
* **Tickets** - Support tickets with their title, content, associated emails and notes
* **Companies** - Company records with associated data and relationships
* **Deals** - Sales opportunities with pipeline information and associated contacts
* **Contacts** - Contact records with their information and associated activities
You can configure which object types to index based on your needs.
All selected data types are updated every **10** minutes.
## Setting up
### Authorization
Create a Private App Integration (see below).
Under **Scopes** (top bar), select the appropriate scopes based on what data you want to index:
* For **Tickets**: Select the `Tickets` scope
* For **Companies**: Select the `Companies` scope
* For **Deals**: Select the `Deals` scope
* For **Contacts**: Select the `Contacts` scope
Copy the Access Token that is shown when the App is created.
### Indexing
Navigate to the Admin Panel and select the **HubSpot** Connector
In **Step 1**, provide the Access Token from above
In **Step 2**, select which object types you want to index:
* **Companies** - Index company records and their associated data
* **Deals** - Index sales opportunities and pipeline information
* **Contacts** - Index contact records and their activities
* **Tickets** - Index support tickets and related communications
Click `Connect` to begin indexing your selected HubSpot data types
Make sure your HubSpot Access Token has the appropriate scopes enabled for the object types you want to index.
The connector will only be able to access data for which you've granted the necessary permissions.
# Jira Connector
Source: https://docs.hymalaia.com/connectors/jira-connector
Sync and search Jira issues and project updates with Hymalaia
## How it works
The Jira connector pulls in all tickets from specified projects **every 10 minutes**.
For each issue, it collects:
* **Title**
* **Description**
* **Common fields** (assignee, reporter, status, etc.)
* **Custom fields**
* **Comments**
***
## Setting up
### Authorization
* **Jira Cloud**: Follow [this guide](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3LO-apps/) to obtain an **Access Token**.
* **Jira Server**: Follow [this guide](https://developer.atlassian.com/server/jira/platform/oauth/) to obtain a **Personal Access Token**.
***
## Indexing
1. Go to the **Admin Dashboard** in Hymalaia.
2. Select the **Jira Connector**.
### For Jira Cloud:
* Enter your **Access Token** and the **Username** it's associated with.
### For Jira Server:
* Enter your **Personal Access Token**.
***
## Selecting Projects to Index
* For each Jira project you want to index, provide the **URL to any page within the project**.
* Optionally, specify **users whose comments should be excluded** (e.g., bots).
```txt theme={null}
Example:
Project URL: https://yourcompany.atlassian.net/browse/PROJECTKEY
Ignore Comments from: jira-bot@example.com, deploy-bot@example.com
```
### Start Indexing
Click **Connect** to start syncing!
> From now on, Hymalaia will index your Jira tickets every 10 minutes.
# Linear Connector
Source: https://docs.hymalaia.com/connectors/linear-connector
Sync and search Linear issues with Hymalaia
## How it works
The Linear connector pulls in:
* All **issues**
* All **associated comments**
> Data is refreshed every **10 minutes**.
***
## Setup
### (Self-Hosted Only) Configure your Linear Application
> ⚠️ **Skip this section** if you're using **Hymalaia Cloud**.
* Create a **Linear Application** from your [Linear Developer settings](https://linear.app/settings/developers).
* You must be an **admin** of the Linear workspace.
**Set callback URL** to:
```
/connector/oauth/callback/linear
```
For example:
```
http://localhost:3000/connector/oauth/callback/linear
```
**Set environment variables** using the Client ID and Signing Secret from Linear:
```env theme={null}
LINEAR_CLIENT_ID=your-client-id
LINEAR_CLIENT_SECRET=your-client-secret
```
Then **restart** your Hymalaia instance.
***
## Indexing
1. Go to the **Admin Dashboard** in Hymalaia.
2. Select the **Linear Connector**.
3. Click **Create New** to start the OAuth flow.
4. After authorizing the app, you'll be redirected back to Hymalaia.
5. Select the new credential and click **Continue**.
6. Enter a name and any permissions info.
7. Click **Create Connector** to start indexing your issues and comments.
> 🎉 Your Linear workspace is now connected and searchable in Hymalaia!
# Notion Connector
Source: https://docs.hymalaia.com/connectors/notion-connector
Access pages and databases from Notion
## How it works
The Notion connector uses the Notion search API to fetch all pages that the connector has access to within a workspace.
For follow up indexing runs, the connector only retrieves pages that have been updated since the last indexing attempt.
Indexing is configured to run every **10 minutes**, so page updates should appear within 10 minutes.
## Setting up
### Authorization
In order to authorize Hymalaia to connect to your Notion workspace, you'll need to create a new integration in Notion,
which will then provide you with a secret token.
These steps are pulled from [this Notion guide](https://developers.notion.com/docs/create-a-notion-integration)
which you can also follow.
#### Step 1: Create an integration
Visit [https://www.notion.com/my-integrations](https://www.notion.com/my-integrations) in your browser.
Click the + New integration button.
Name the integration (something like "Hymalaia" could work).
Select "Read content" as the only capability required for Hymalaia.
Click Submit to create the integration.
On the next page, you'll find your Notion integration token, also called an API key.
You'll need this token to configure Hymalaia to index Notion, so make a copy of it.
The integration has been added to the workspace, so any member can share pages and databases with it.
There's no requirement to be an Admin to share information with an integration.
#### Step 2: Share pages/databases with your integration
Now that you've created an integration, you need to grant it access to Notion pages/databases.
To keep your information secure, integrations don't have access to any pages or databases in the workspace at first.
You must share specific pages with an integration in order for Hymalaia to access those pages.
To share a page/database with your integration:
Go to the page/database in your workspace.
Click the `•••` on the top right corner of the page.
Scroll to the bottom of the pop-up and click Add connections.
Search for and select the new integration in the `Search for connections...` menu.
If you've added a page, all child pages also become accessible to Hymalaia.
If you've added a database, all rows (and their children) become accessible to Hymalaia.
Once you've granted access to a page/database, you can start configuring Hymalaia to index those databases.
### Indexing
Navigate to the Admin Panel and select the **Notion** connector.
In **Step 1**, provide the **Integration Token Secret** you obtained in the "Authorization" steps above:
Click the `Connect` button! Your content will then be pulled into Hymalaia every **10** minutes.
Note - As mentioned, the Notion connector currently indexes everything it has access to.
If you want to limit specific content being indexed, simply unshare the database from Notion with the integration.
# Gmail OAuth Setup
Source: https://docs.hymalaia.com/connectors/oauth-setup
Set up the Gmail connector using an OAuth-enabled Google App
## Overview
This guide walks you through setting up the Gmail connector using a **Google OAuth App**.
> ✅ This can be done with a **free Google account** — no paid Google Workspace required.
> 🏢 If you're using **Google Workspace** and prefer to use a Service Account, that option will be available soon.
## Authorization
### 1. Create a Google Cloud Project
* Go to [Google Cloud Console](https://console.cloud.google.com/projectcreate)
* Create a new project
### 2. Enable the Gmail API
1. In the left menu, go to **APIs & Services**
2. Click on **Enabled APIs and services**
3. Click **+ ENABLE APIS AND SERVICES**
4. Search for **Gmail API** and click **ENABLE**
> Alternatively, [click here](https://console.cloud.google.com/apis/library/gmail.googleapis.com) and select your project to enable the Gmail API.
### 3. Set up the OAuth Consent Screen
1. Go to **APIs & Services** → **OAuth consent screen**
2. Select **External** for User Type (if you don’t have a Google Organization)
3. Set the app name to **hymalaia** (or another of your choosing)
4. Fill required email fields (you can use `support@hymalaia.com` if you'd like Hymalaia support)
5. Click **Save and Continue**
### 4. Set up Scopes
* Add the following scope for Gmail access:
* `https://www.googleapis.com/auth/gmail.readonly`
#### (Optional) Enable permission syncing
To sync user or group permissions:
1. Enable the **Admin SDK API**\
→ [Enable Admin SDK API](https://console.cloud.google.com/apis/library/admin.googleapis.com)
2. Add the following scopes:
* `https://www.googleapis.com/auth/admin.directory.user.readonly`
* `https://www.googleapis.com/auth/admin.directory.group.readonly`
> 🔐 The user performing the OAuth flow **must be an Admin** in the Google Workspace and have the **"Groups > Read"** privilege set from the Admin Panel.
### 5. Add Test Users (Only for External Apps)
If your app is marked as **External** (i.e. no Google Organization):
* Add at least **one test user email**
* Only emails added here will be allowed to complete the OAuth flow
* Click **Save and Continue**, review, and go **Back to Dashboard**
### 6. Create OAuth Credentials
1. Go to the **Credentials** tab
2. Click **+ CREATE CREDENTIALS → OAuth client ID**
3. Choose **Web application**
4. Give it a name (e.g., `hymalaiaConnector`)
#### Set Authorized URLs:
* **Authorized JavaScript origins**:
* `http://localhost:3000`
* or `https://`
* **Authorized redirect URIs**:
* `http://localhost:3000/admin/connectors/gmail/auth/callback`
* or `https:///admin/connectors/gmail/auth/callback`
5. Click **Create**
> 📥 On the right, next to **Client Secret**, click the download icon to download the **credentials JSON**.\
> You will need this in the next step when configuring the Gmail Connector in Hymalaia.
# Oracle Storage Connector
Source: https://docs.hymalaia.com/connectors/oracle-storage-connector
Index and search documents from Oracle Cloud Infrastructure (OCI) using Hymalaia
## How it works
The connector pulls in **all documents** from a specified OCI bucket. It supports formats like:
* PDF
* DOC / DOCX
* TXT
* and more
> Documents are automatically updated every **1 day**.
***
## Setting up
### Authorization
1. Log into your **Oracle Cloud Console**.
2. Click your **user icon** (top-right) → choose **User Settings**.
3. Under “Resources”, click **Customer Secret Keys**.
4. Click **Generate Secret Key**.
* Provide a name like `"HymalaiaOCIConnector"`
* Click **Generate**
5. Copy the **Secret Key** immediately – you **won’t** be able to see it again.
6. The **Access Key** will be listed alongside your secret key.
***
### Finding Your Namespace
1. Click your **user icon** (top-right)
2. Select **Tenancy: \[your tenancy name]**
3. In the tenancy details, copy the **Object Storage Namespace**
***
## Indexing
1. Go to the **Admin Dashboard** in Hymalaia
2. Select the **Oracle Cloud Infrastructure Storage Connector**
### Step 1: Authentication
Fill in the following credentials:
* **OCI Access Key**
* **OCI Secret Key**
* **Namespace**
* **Region**
Click **Update** to save the credentials.
***
### Step 2: Select Your Bucket
1. Specify the **OCI bucket** you want to make searchable
2. Click **Connect** to begin indexing
***
## OCI Object Storage Overview
Oracle Object Storage uses a **bucket-based structure**, similar to a directory system:
* Each **bucket** is like a root folder
* Inside are **objects** (files)
> For more info, see [Oracle Cloud Infrastructure Object Storage Docs](https://docs.oracle.com/en-us/iaas/Content/Object/Concepts/objectstorageoverview.htm)
# Outline Connector
Source: https://docs.hymalaia.com/connectors/outline-connector
Index Outline collections and documents via the Outline API
## How it works
The Outline connector calls the Outline API to index **collections** (name and description) and **documents** (title and body text), with links back to your Outline workspace. Incremental runs filter by each item’s `updatedAt` after a full list is fetched.
Updates are applied on the connector’s scheduled runs (typically **daily**).
## Setting up
### Authorization
You need your Outline instance **base URL** and an **API token**:
* **Outline Base URL** — e.g. `https://app.getoutline.com` for Outline Cloud, or the root URL of your **self-hosted** Outline deployment (must be reachable from Hymalaia).
* **Outline API Token** — create under workspace **Settings → API & applications** (or equivalent for self-hosted); the token must be allowed to list and read documents and collections.
### Indexing
In the Hymalaia Admin Panel, open the **Outline** connector.
In **Step 1**, set up credentials:
* Select an existing credential, or click **Create New**
* Enter **Outline Base URL** and **Outline API Token**
Click **Create** to save the credential configuration.
Ensure the correct credential is selected, then click **Continue**.
In **Step 2**, set:
* **Connector Name** — a display name (e.g. `Outline – Product`)
* **Access Type** — **Public** or **Private** in Hymalaia
Click **Create Connector** to start indexing.
For API details, see the [Outline developer documentation](https://www.getoutline.com/developers).
# Outlook Connector
Source: https://docs.hymalaia.com/connectors/outlook-connector
Configure the Outlook connector in Hymalaia
## Overview
The Outlook connector allows you to integrate Microsoft Outlook email and calendar data into the Hymalaia platform.
## Prerequisites
* Microsoft Azure Active Directory account
* Application registered in Azure Active Directory
## Configuration Steps
### 1. Azure Active Directory Setup
1. Go to the [Azure Portal](https://portal.azure.com/)
2. Navigate to **Azure Active Directory** > **App registrations**
3. Click **New registration**
### 2. Connector Credentials
You can use the same credentials as your SharePoint connector:
* **Client ID**: Your Azure AD application's client ID
* **Directory ID**: Your Azure AD tenant ID
* **Secret Code**: Client secret generated in Azure AD
### 3. Required Scopes
Add the following scopes to enable email and calendar access:
* `Mail.Read`: Allows reading email messages
* `Calendars.Read`: Allows reading calendar events
### 4. Redirect URIs
Configure the following redirect URI in your Azure AD application:
* `https:///admin/connectors/outlook/auth/callback`
* `http://localhost:3000/admin/connectors/outlook/auth/callback` (for local development)
## Permissions and Consent
> 🔐 Ensure that an administrator consents to the application permissions for the specified scopes.
## Troubleshooting
* Verify that the application has the correct API permissions
* Check that the client secret has not expired
* Confirm that the user performing the OAuth flow has the necessary access rights
## Best Practices
* Use a dedicated service account for the connector
* Regularly rotate your client secret
* Limit the scopes to only what is necessary for your use case
# Connector Overview
Source: https://docs.hymalaia.com/connectors/overview
Basic Information about Connectors
## What are Connectors
Connectors hook up **Hymalaia** to your data sources so that answers are grounded in your organization’s knowledge.
## Connectors help you
* **Choose Sources** so you can include only the data you want indexed.
* **Configure Access** so Hymalaia can securely access data with your permission.
* **Set Up Fetching** options to keep Hymalaia answers up to date.
## Monitoring Connectors
Open the **Connectors Dashboard** (accessible from the profile icon on the top right).\
At the top there is a **Status** page which shows which sources have been indexed and the status of the indexing job.
> 📊 **IndexStatus**
## Missing a Connector?
Is there a connector that would be useful to you?\
Let us know via the [support@hymalaia.com](mailto:support@hymalaia.com?subject=Missing%20a%20Connector\&body=Please%20add%20the%20XXXX%20connector%20in%20Hymalaia).\
(Please check if the connector you’re interested in is already mentioned).
👍 Don’t forget to thumbs up the issues requesting the connectors that you would like to see built next!
# Postgres Connector
Source: https://docs.hymalaia.com/connectors/postgres-connector
Index PostgreSQL table metadata (schemas and DDL) in Hymalaia
## How it works
The Postgres connector indexes **table metadata** for a given database and schema: it lists tables from `information_schema` and stores each table’s structure as a simplified **CREATE TABLE** DDL (column names and types). It does **not** index row-level table data.
Indexed content is refreshed on the connector’s normal schedule (typically **daily**, like other connectors).
## Setting up
### Authorization
Postgres uses a standard **TCP connection** with database credentials. Create a credential with:
* **Host** — hostname or IP of your Postgres server (e.g. `db.example.com`)
* **Port** — Postgres port (default is usually `5432`)
* **User** — role that can connect and read catalog metadata for the target schema
* **Password** — password for that role
The role must be able to read `information_schema.tables` and `information_schema.columns` for the schema you configure. Prefer a dedicated user with minimal rights when possible.
Ensure the Hymalaia deployment can reach the host (firewall, VPN, security groups, etc.).
### Indexing
In the Hymalaia Admin Panel, open the **Postgres** connector.
In **Step 1**, set up credentials:
* Select an existing Postgres credential, or click **Create New**
* Enter **Host**, **Port**, **User**, and **Password**
Click **Create** (or equivalent) to save the credential configuration.
Ensure the correct credential is selected, then click **Continue**.
In **Step 2**, specify:
* **Database** — the database name to connect to (e.g. `analytics`)
* **Schema** — the schema whose tables you want indexed (e.g. `public`)
Only metadata for tables in that schema is indexed.
Choose a connector name, set **document access**, assign **groups** if needed, then create the connector. Indexing will run on the connector schedule (typically daily).
# Productboard Connector
Source: https://docs.hymalaia.com/connectors/productboard-connector
Index Features, Components, Products, and Objectives from Productboard
### How it works
The Productboard connector imports:
* **Features**
* **Components**
* **Products**
* **Objectives**
> Note: Releases and Notes are *not supported* due to current Productboard API limitations.
> Data is refreshed every **10 minutes**.
***
### Setting up
#### Authorization
1. Follow the guide to obtain an **Access Token**: [Getting a Token](https://developer.productboard.com/#section/Authentication)
2. Copy your generated token for use in Hymalaia.
***
### Indexing
1. Go to the **Admin Dashboard**
2. Select the **Productboard Connector**
#### Step 1: Authenticate
* Paste your **Access Token** into the provided field
* Click **Connect** to begin indexing
***
Once connected, Hymalaia will begin indexing all your Productboard data and make it searchable.
# R2 Connector
Source: https://docs.hymalaia.com/connectors/r2-connector
Access documents stored in Cloudflare R2 buckets
## How it works
This connector imports documents from a specified **Cloudflare R2** bucket. Supported formats include:
* PDF
* DOC / DOCX
* TXT
* ...and more
> Documents are updated every **1 day**.
***
## Setting up
### Authorization
1. Log into your [Cloudflare Dashboard](https://dash.cloudflare.com/)
2. Navigate to **R2** in the sidebar
3. Click **Manage R2 API Tokens**
4. Click **Create API Token**
5. Give the token a name (e.g., `HymalaiaR2Connector`)
6. Assign it **Object Read Only** permissions
7. Click **Create API Token**
8. Copy your:
* **Access Key ID**
* **Secret Access Key** (shown only once!)
9. To find your **Account ID**, go to the **Overview** page — it's visible in the URL or listed on that page
***
## Indexing
1. Navigate to the **Admin Dashboard**
2. Select the **R2 Connector**
### Step 1: Authenticate
* Enter your:
* R2 **Access Key ID**
* R2 **Secret Access Key**
* **Account ID**
* Click **Update** to save
### Step 2: Select bucket
* Enter the **R2 bucket** you wish to index
* Click **Connect** to begin indexing
***
## Understanding R2 Structure
Cloudflare R2 works similarly to Amazon S3:
* A **bucket** is like a folder
* It contains unlimited **objects** (files)
For more info, refer to the [Cloudflare R2 documentation](https://developers.cloudflare.com/r2/).
# Request Tracker Connector
Source: https://docs.hymalaia.com/connectors/request-tracker-connector
Access tickets and transactions from Request Tracker 4.x
## How it works
* This connector pulls in all **tickets updated within the last 10 minutes**
* Tickets are updated **every 10 minutes**
* Only **Request Tracker REST API 1.0** is supported
> ❗️Request Tracker **5.x** is **not supported** at this time
***
## Setting up
### Create or use a Request Tracker user
Create a user in **Request Tracker 4.x** with the following:
* **Read access** to all queues Hymalaia should index
***
## Configure Hymalaia Request Tracker Connector
1. Go to the **Admin Dashboard**
2. Select the **Request Tracker Connector**
### Step 1: Provide authentication
* Enter your:
* **Request Tracker username**
* **Password**
* **RT installation base URL**
### Step 2: Begin indexing
* Click **Connect** to start indexing your Request Tracker tickets and transactions
***
For more details, refer to the [Request Tracker REST API 1.0 documentation](https://docs.bestpractical.com/rt/4.4.1/).
# S3 Access Keys
Source: https://docs.hymalaia.com/connectors/s3/access-keys
Authorize the S3 connector using AWS Access Keys.
## AWS Access Keys Authorization
Log into your AWS Management Console.
Navigate to the IAM (Identity and Access Management) dashboard.
In the left sidebar, click on "Users" and then "Create user".
Set a name for the new user (e.g., "HymalaiaS3Connector") and click "Next".
Click "Attach policies directly" and search for "AmazonS3ReadOnlyAccess" or a similarly permissive policy.
Select this policy and click "Next".
Add any tags if needed, then click "Create user".
On the users page, click on the user you just created. In the summary section,
click "Create access key" and choose "Third-party service" as the use case. Confirm the disclaimer and continue.
Optionally set a description tag and then press "create access key".
Copy the Access Key ID and Secret Access Key immediately; you won't be able to view the secret again.
### Credential Entry in Hymalaia
When configuring the S3 connector in Hymalaia, you'll enter your credentials as follows:
* **AWS Access Key ID**: Paste the Access Key ID you copied from AWS
* **AWS Secret Access Key**: Paste the Secret Access Key you copied from AWS
Once you have your AWS Access Keys, proceed to the [indexing steps in the overview](./overview#indexing)
to configure your S3 connector.
# S3 Assume Role
Source: https://docs.hymalaia.com/connectors/s3/assume-role
This method automatically uses the IAM role attached to your EC2 instance to access S3 buckets. No manual credential entry is required.
### Prerequisites
* Ensure your EC2 instance has an IAM role attached.
* Verify the instance profile is properly configured via AWS Console under **EC2 › Instance Settings
› Attach/Replace IAM role**.
### Updating the Existing IAM Role
Since your EC2 instance already has an IAM role attached, you need to update it with the necessary S3 permissions:
In AWS Console, go to **IAM › Roles** and find your EC2 instance's existing role.
Click on the role and go to the **Permissions** tab. Click **Add permissions › Attach policies**.
Search for and select **AmazonS3ReadOnlyAccess** policy. Click **Attach policies**.
Alternatively, for more granular control, you can create a custom inline policy:
In the same role's **Permissions** tab, click **Add permissions › Create inline policy**.
Switch to JSON and add this policy (replace `your-source-bucket-name`):
```json theme={null}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-source-bucket-name",
"arn:aws:s3:::your-source-bucket-name/*"
]
}
]
}
```
Name the policy (e.g., `HymalaiaS3Access`) and click **Create policy**.
The connector will automatically detect and use the EC2 instance's IAM role for accessing your S3 buckets.
### Credential Entry in Hymalaia
When configuring the S3 connector in Hymalaia, you'll need to:
Click on the **Assume Role** tab
No credentials need to be entered — the connector automatically uses your EC2 instance's attached role.
Once you have updated your EC2 instance's role with S3 permissions,
proceed to the [indexing steps in the overview](./overview#indexing) to configure your S3 connector.
# S3 IAM Role
Source: https://docs.hymalaia.com/connectors/s3/iam-role
Authorize the S3 connector using an AWS IAM Role with assume role policy.
### When to use this method
* When you need to segregate permissions, granting specific S3 access without modifying your EC2
instance's main role
* When you require temporary, frequently rotated credentials for S3 access, without managing
long-lived access keys
* When working in multi-account AWS environments, enabling cross-account S3 access through role
assumption
### Setting up the IAM Role
* In AWS Console, go to **IAM › Roles** and click **Create role**
* For **Trusted entity type**, select **Custom trust policy**
* In the Custom trust policy JSON editor, configure who can assume this role.
You can choose from:
* **IAM Role**: `"AWS": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/YourExistingEC2Role"`
* **AWS Service**: `"Service": "ec2.amazonaws.com"` (for EC2 instances)
Example for EC2 role (replace `YOUR_AWS_ACCOUNT_ID` and `YourExistingEC2Role`):
```json theme={null}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/YourExistingEC2Role"
},
"Action": "sts:AssumeRole"
}
]
}
```
* Click **Next**
* Attach **AmazonS3ReadOnlyAccess** policy or create a custom policy for specific buckets:
```json theme={null}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-source-bucket-name",
"arn:aws:s3:::your-source-bucket-name/*"
]
}
]
}
```
* Name it (e.g., `HymalaiaS3AccessRole`) and click **Create role**
* Copy the **Role ARN** from the role summary page (e.g., `arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/YOUR_CREATED_ROLE_NAME`)
* Go back to **IAM > Roles** and find your EC2 instance's existing role
* Click on the role and go to the **Permissions** tab
* Click **Add permissions > Create inline policy**
* Switch to JSON and add this policy (replace with your actual account ID and role name):
```json theme={null}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/YOUR_CREATED_ROLE_NAME"
}
]
}
```
* Name the policy (e.g., `AllowAssumeHymalaiaS3Role`) and click **Create policy**
Your EC2 instance now uses its existing instance profile to obtain temporary credentials for the HymalaiaS3AccessRole,
which can then securely interact with your designated S3 buckets.
### Credential Entry in Hymalaia
When configuring the S3 connector in Hymalaia, you'll need to:
Click on the **IAM Role** tab
Enter the **Role ARN** you copied earlier (e.g., `arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/YOUR_CREATED_ROLE_NAME`)
Once you have your IAM Role ARN, proceed to the [indexing steps in the overview](./overview#indexing)
to configure your S3 connector.
# S3 Overview
Source: https://docs.hymalaia.com/connectors/s3/overview
Overview of the S3 connector
## How it works
The S3 connector pulls in all documents from the specified Amazon S3 bucket.
It supports various file formats including PDF, DOC, DOCX, TXT, and more.
Documents are updated every **1** day.
## Setting up
### Authorization
We support three authorization methods—pick one that fits your environment:
* [AWS Access Keys](./access-keys) - Uses traditional access key credentials
* [IAM Role-Based Authorization](./iam-role) - Uses AWS IAM roles for secure access
* [Assume Role](./assume-role) - Automatically uses the EC2 instance's attached role for S3 access
### Indexing
Once you've set up your authorization method, follow these steps to index your S3 bucket:
Navigate to the Hymalaia Admin Panel and select the **S3** Connector.
In **Step 1**, configure your authorization:
* If you have existing credentials, select them from the list
* If you don't have existing credentials, click **Create New** to add new authorization:
* **Access Keys**: Enter your AWS Access Key ID and Secret Access Key
* **IAM Role**: Click the IAM Role tab and enter your Role ARN
* **Assume Role**: Click the Assume Role tab (no credentials required)
Click **Create** to save your configuration.
Ensure your chosen credential is selected, then click **Continue**
In **Step 2**, specify your S3 bucket details:
* **Connector Name**: Enter a name for the connector (e.g., "MyS3Connector")
* **Bucket Name**: Specify the name of the S3 bucket you want to index
* **Prefix (Optional)**: Provide a prefix to limit indexing to a specific folder or path
* **Access Type**: Choose whether documents are **Public** or **Private**
Click **Create Connector** to begin indexing.
The connector will start indexing your S3 bucket and you can add more buckets or modify settings as needed.
## Understanding S3 Structure
Amazon S3 organizes data into buckets. Each bucket can contain an unlimited number of objects (files).
You can think of a bucket as a root directory, and the objects as files within that directory.
For more information on S3 structure,
visit the [Amazon S3 documentation](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html).
# Salesforce Connector
Source: https://docs.hymalaia.com/connectors/salesforce-connector
Access CRM data from Salesforce
## How it works
The Salesforce connector indexes documents from your Salesforce.
These documents organized around the **Objects** that you indicate. Examples are below.
## Setting up
### Authorization
Log into Salesforce.
The Salesforce user must be an organization member or have admin access to the data you would like to index.
Click the profile avatar and choose Settings.
Select **My Personal Information** → **Reset My Security Token**.
Check your email for the security token.
Once the token has been regenerated, you can use it (as well as your username and password)
to authorize your Hymalaia connector.
### Indexing
Navigate to the Admin Panel and select the **Salesforce** Connector Tile.
Click on the **Create New** button and provide your **Username**,
**Password** and the **Security Token** received from the above steps.
Select the new credential and click **Continue**.
Enter the [Salesforce
Object(s)](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_list.htm)
you wish to index and organize your Hymalaia documents by.
* Make sure to use the singular version of object name (e.g. Opportunity instead of
Opportunities)
* If no objects are indicated, it will default to indexing by **Account**
* Each Hymalaia Document extracted from Salesforce contains all fields and associations of each
object. For example,
when indexing each Account we include the fields of the AccountFeed and AccountShare objects as well (but not the
associations of those objects).
This can lead to bloated queries and memory intensive indexing in larger salesforce instances.
Use the Advanced mode to have finer grain control over what is indexed.
Specify which objects, fields, and associations get indexed with a json object.
Top level keys are Salesforce Objects, each value is a JSON object specifying:
* `fields`: a list of strings describing the fields of the object to index
* `associations`: a JSON object mapping a Salesforce Object associated with the parent object to a list of fields to be indexed for the child object
```json Example theme={null}
{
"Account": {
"fields": ["Id", "Name", "Industry", "CreatedDate", "lastModifiedDate"],
"associations": {
"Contact": ["Id", "FirstName", "LastName", "Email"],
"Opportunity": ["Id", "Name", "StageName", "Amount", "CloseDate"]
}
},
"Lead": {
"fields": ["Id", "FirstName", "LastName", "Company", "Status"],
"associations": {}
}
}
```
Click on the **Connect** button and your connector will be created.
Hymalaia will automatically begin indexing your Salesforce data.
### An Example
You indicate you'd like to organize information by **Account** and click connect
Hymalaia will generate a document for every single **Account** in your Salesforce.
Attached to each document will be all the information associated with that **Account**.
This information would also include information from the **Account**'s children objects (E.g.
all associated **Contacts**, **Notes**, etc.).
This means indicating **Account** means that all **Contact**s that are attached to an account will also be grabbed
If you want to index any **Contacts** that aren't attached to any **Accounts**, (as well as **Accounts**)
# Gmail Service Account Setup
Source: https://docs.hymalaia.com/connectors/service-account-connector
Set up the Gmail connector using a Service Account (Google Workspace only)
## Overview
This guide walks through configuring the Gmail connector using a **Service Account**.
> 🏢 A **Google Workspace** is required to use this method.
> 🙋 Prefer to use OAuth with a personal or individual Google account? [Click here](#gmail-oauth-setup) to see the OAuth flow instead.
## Authorization
### 1. Create a Google Cloud Project
* Go to [Google Cloud Console](https://console.cloud.google.com/projectcreate)
* Create a new project for the Gmail integration
### 2. Enable Required APIs
#### Gmail API
1. In the left menu, go to **APIs & Services** → **Enabled APIs and services**
2. Click **+ ENABLE APIS AND SERVICES**
3. Search for **Gmail API** and click **ENABLE**\
→ Or directly [enable Gmail API here](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
#### Admin SDK API
1. Again click **+ ENABLE APIS AND SERVICES**
2. Search for **Admin SDK API** and click **ENABLE**\
→ Or directly [enable Admin SDK API here](https://console.cloud.google.com/apis/library/admin.googleapis.com)
### 3. Create a Service Account
* Go to the [Service Accounts page](https://console.cloud.google.com/iam-admin/serviceaccounts)
* Click **Create Service Account**
* Fill out Step 1 (Service account name, ID, etc.)
* You can skip Steps 2 and 3
#### Generate Key
* After creating the Service Account, go to the **Keys** tab
* Click **Add Key** → **Create new key**
* Choose **JSON** and **Download** the key
> 📥 You'll upload this JSON to Hymalaia during connector setup
***
### ⚠️ Extra Step for Organizations Created After April 2024
Google has added additional permission enforcement for new orgs:
1. Visit [this link](https://admin.google.com/ac/owl/domainwidedelegation)
2. Select your newly created Service Account
3. Click **Manage**
4. Select **Override parent’s policy**
5. Set **Rules → Not Enforced**
6. Click **Set Policy**
***
### 4. Grant Read-Only Access to Gmail
1. Copy the **Unique ID** of your Service Account (you'll find this on the Service Account page)
2. Go to the [Domain-wide Delegation page](https://admin.google.com/ac/owl/domainwidedelegation) in the Google Admin Console
3. Click **Add new**
4. In **Client ID**, paste the Unique ID of the Service Account
5. In **OAuth Scopes**, paste the following scopes (comma-separated):
```text theme={null}
https://www.googleapis.com/auth/gmail.readonly,
https://www.googleapis.com/auth/admin.directory.group.readonly,
https://www.googleapis.com/auth/admin.directory.user.readonly
```
> 🔐 This grants the Service Account access to read Gmail, users, and groups
***
Once this setup is complete, you can go to the **Hymalaia Admin Dashboard**, select the **Gmail Connector**, and upload your downloaded **Service Account Key JSON** to start indexing emails.
# Service Account Setup
Source: https://docs.hymalaia.com/connectors/service-account-setup-drive
This section walks through setting up the Google Drive connector using a Service Account.\
More info on Service Accounts can be found [here](https://cloud.google.com/iam/docs/service-accounts).\
A **Google Workspace** is required.
If you’d rather use an individual account + OAuth to access Google Drive, check out the [OAuth setup guide](#).
***
## Authorization
### 1. Create a Google Cloud Project
Go to the [Google Cloud Console](https://console.cloud.google.com/projectcreate) to create a new project.
***
## 2. Enable Required APIs
* Go to **APIs & Services** > **Enabled APIs and services**.
* Click **+ ENABLE APIS AND SERVICES** at the top.
* Search and enable each of the following:
* **Google Drive API**
* **Admin SDK API**
* **Google Sheets API**
* **Google Docs API**
You can also directly visit each API’s page, select your project, and click **ENABLE**.
***
## 3. Create a Service Account
* Go to the [Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts) page in Google Cloud.
* Click **Create Service Account**.
* Fill out the required fields in Step 1.
* **Ignore** Steps 2 and 3.
* After creation, go to the **Keys** section.
* Click **Add Key** > **Create new key** > **JSON**.
* Download this key — you will upload it to Hymalaia later.
### 🔔 Note for Google Organizations created after April 2024:
* To give the service account the proper permissions, navigate to this [policy enforcement link](https://admin.google.com/ac/owl/domainwidedelegation).
* Select **Manage**, choose **Override parent's policy**, then set **Not enforced** under **Rules**.
* Finally, click **SET POLICY**.
***
## 4. Domain-Wide Delegation
### Grant Read-Only Access to Google Drive
* Copy the **Unique ID** of the Service Account (from the Google Cloud Console).
* Go to the [Domain-wide Delegation](https://admin.google.com/ac/owl/domainwidedelegation) page in the Google Admin Console.
* Click **Add New**.
* Paste the **Client ID** with the Unique ID of the Service Account.
* In the **OAuth Scopes** field, paste the following list (comma-separated):
# Certificate-Based Authentication
Source: https://docs.hymalaia.com/connectors/sharepoint/certificate
Set up SharePoint connector using certificate-based authentication with optional permission sync support
## Certificate-Based Authentication
Certificate-based authentication provides a secure way to connect to SharePoint and supports both basic integration and
permission sync functionality.
**Use certificate authentication when:**
* You need permission sync capabilities
* You prefer certificate-based security over client secrets
* Your organization requires certificate-based authentication
**For basic SharePoint integration without permission sync**,
you can also use [client secret authentication](/connectors/sharepoint/client-secret).
## Setting up
### Step 1: Create Azure App Registration
Log in to [Azure Portal](https://portal.azure.com/#home) for your organization.
Navigate to "App registrations" using the search bar.
Click **New Registration**.
Name it something like "Hymalaia SharePoint Connector - Certificate", leave everything else as default,
and click **Register**.
Under "Essentials" in the overview tab, you will find the **Application (client) ID** and **Directory (tenant) ID**.
Save those for later.
### Step 2: Generate and Upload Certificate
#### Option A: Generate Self-Signed Certificate
```bash theme={null}
# Generate private key
openssl genrsa -out sharepoint-cert.key 2048
# Generate certificate signing request
openssl req -new -key sharepoint-cert.key -out sharepoint-cert.csr
# Generate self-signed certificate (valid for 1 year)
openssl x509 -req -days 365 -in sharepoint-cert.csr -signkey sharepoint-cert.key -out sharepoint-cert.crt
# Convert to PFX format
openssl pkcs12 -export -out sharepoint-cert.pfx -inkey sharepoint-cert.key -in sharepoint-cert.crt
```
#### Option B: Use Organization Certificate
Obtain a certificate from your organization's Certificate Authority (CA) following your internal security policies.
We only support PFX format for certificate uploads in Azure.
### Step 3: Upload Certificate to Azure
In your Azure App Registration, navigate to the "Certificates & secrets" tab.
Click **Upload certificate**.
Select your certificate file (.crt, .pem, or .cer format).
Add a description and click **Add**.
### Step 4: Configure API Permissions
Navigate to the "API Permissions" tab in the Azure Portal.
Click **Add a permission**.
#### Basic Permissions (No Permission Sync)
If you are **not** planning to enable permission sync, you only need basic permissions:
Click **Microsoft Graph**, then click on **Application permissions**.
Navigate to the "Sites" permission group. Select the checkbox for **Sites.Read.All**.
* *Advanced:* If you want to limit the sites this app has access to, select **Sites.Selected**.
However, if you do this, you will need to add the App you are currently registering to each site you want to index.
Click **Add permissions**. Finally, click **Grant admin consent for \** and click **Confirm**.
#### Extended Permissions (With Permission Sync)
If you plan to enable permission sync, you'll need additional permissions:
Click **Add a permission** again.
Click **Microsoft Graph**, then click on **Application permissions**.
Add the following additional Microsoft Graph permissions:
* **Directory.Read.All** - Used to query the overall organizational directory structure, including how users,
groups, organizational units, and other directory objects relate to each other.
* **Group.Read.All** - Used to read detailed group-specific information such as group properties, settings,
types (Security vs Microsoft 365), and configurations.
* **GroupMember.Read.All** - Used to retrieve and expand all members within a group,
including nested group memberships.
This allows Hymalaia to determine which users have access to SharePoint content through group membership.
* **Member.Read.Hidden** - Allows reading memberships of security groups that are marked as "hidden" in Entra ID.
* **User.Read.All** - Used to retrieve complete user profiles and enumerate all users in the directory.
Click **Add permissions**.
Click **Add a permission** again in API Permissions tab. Click **Microsoft Graph**,
then click on **Delegated permissions**. Add the following delegated permission:
* **User.Read** - This delegated permission allows the application to sign in on behalf of a user and read the
signed-in user's basic profile information. Unlike application permissions which work without a user context,
this delegated permission is required when the app needs to establish an authenticated identity context for making
API calls to Microsoft Graph and SharePoint. It provides the minimum required access for user authentication flows.
Click **Add permissions**.
Click **Add a permission** again in API Permissions tab. Click **SharePoint**,
then click on **Application permissions**. Add the following SharePoint permissions:
* **Sites.FullControl.All** - Despite the name, Hymalaia only uses this to retrieve details about permissions.
No write operations are performed.
* **User.Read.All** - Used to list all users within the directory for permission mapping.
Click **Add permissions**.
Finally, click **Grant admin consent for \** and click **Confirm**.
### Step 5: Configure in Hymalaia
Navigate to the Hymalaia Admin Panel and select the **SharePoint** Connector.
Click **Create New** credential and select the **Certificate** tab.
* **Application (client) ID** from Step 1
* **Directory (tenant) ID** from Step 1
* **Certificate File**: Upload your certificate file (.pfx file)
* **Certificate Password**: Enter password which you used to export the certificate file
Click **Create** to save your credentials.
### Step 6: Enable Permission Sync (Optional)
When creating your SharePoint connector with certificate authentication:
In the connector configuration, you'll see a **Permission Sync** option.
Enable this option to synchronize SharePoint permissions with Hymalaia.
Permission sync is available only on Cloud and the Enterprise Edition of Hymalaia.
## Permission Sync Details
When permission sync is enabled:
* **Document-level permissions**: Hymalaia will respect SharePoint document permissions
* **Site-level permissions**: Users will only see documents from sites they have access to
* **Group permissions**: SharePoint group memberships are synchronized
* **Real-time sync**: Permissions are updated regularly to reflect SharePoint changes
For basic SharePoint integration without permission sync,
you can use [client secret authentication](/connectors/sharepoint/client-secret).
# Client Secret Authentication
Source: https://docs.hymalaia.com/connectors/sharepoint/client-secret
Set up SharePoint connector using client secret authentication
## Client Secret Authentication
Client secret authentication uses traditional Azure App Registration credentials to connect to SharePoint.
This method is suitable for most basic SharePoint integrations.
**Note:** Permission sync is not available with client secret authentication.
Use [certificate-based authentication](/connectors/sharepoint/certificate)
if you need permission sync functionality.
## Setting up
### Step 1: Create Azure App Registration
More detailed instructions can be found following the video below.
Log in to [Azure Portal](https://portal.azure.com/#home) for your organization.
Navigate to "App registrations" using the search bar.
Click **New Registration**.
Name it something like "Hymalaia SharePoint Connector", leave everything else as default, and click **Register**.
Under "Essentials" in the overview tab, you will find the **Application (client) ID** and **Directory (tenant) ID**.
Save those for later.
### Step 2: Create Client Secret
Navigate to the "Certificates & secrets" tab in Azure Portal.
Click **New client secret**.
Fill out the description, set the expiration to 24 months, and click **Add**.
Copy the secret value in the **Value** column for later.
**Important:** Make sure to copy the secret value immediately as it won't be visible again.
### Step 3: Configure API Permissions
Navigate to the "API Permissions" tab in the Azure Portal.
Click **Add a permission**.
Click **Microsoft Graph**, then click on **Application permissions**.
Navigate to the "Sites" permission group.
Select the checkbox for **Sites.Read.All**.
* *Advanced:* If you want to limit the sites this app has access to, select **Sites.Selected**.
However, if you do this, you will need to add the App you are currently registering to each site you want to index.
Click **Add permissions**. Finally,
click **Grant admin consent for \** (located next to **Add a permission**)
and click **Confirm**.
### Step 4: Configure in Hymalaia
Navigate to the Hymalaia Admin Panel and select the **SharePoint** Connector.
Click **Create New** credential and select the **Client Secret** tab.
* **Application (client) ID** from Step 1
* **Directory (tenant) ID** from Step 1
* **Client Secret Value** from Step 2
Click **Create** to save your credentials.
For permission sync capabilities,
consider using [certificate-based authentication](/connectors/sharepoint/certificate).
# Overview
Source: https://docs.hymalaia.com/connectors/sharepoint/sharepoint
Access files and notes from your SharePoint Sites
## How it works
The SharePoint connector will go through all configured sites belonging to an organization and index all the documents
attached to that site. Note, it currently does not parse the site page contents, only the attached files.
This includes:
* Word Doc, Excel, PDF, PowerPoints, and all plaintext files like .txt, .mdx, etc.
## Setting up
### Authorization
We support two authorization methods—pick one that fits your environment:
* [Client Secret Authentication](/connectors/sharepoint/client-secret)
* Uses traditional client
secret credentials
* [Certificate-Based Authentication](/connectors/sharepoint/certificate)
* Uses certificate-based
authentication (required for permission sync)
**Note:** Permission sync is only available with certificate-based authentication.
### Indexing
Once you've set up your authorization method, follow these steps to index your SharePoint sites:
Navigate to the Hymalaia Admin Panel and select the **SharePoint** Connector.
In **Step 1**, configure your authorization:
* If you have existing credentials, select them from the list
* If you don't have existing credentials, click **Create New** to add new authorization:
* **Client Secret**: Enter your Application ID, Directory ID, and Client Secret
* **Certificate**: Upload your certificate file and enter Application/Directory IDs
Click **Create** to save your configuration.
Ensure your chosen credential is selected, then click **Continue**
In **Step 2**, specify your SharePoint configuration:
* **Connector Name**: Enter a name for the connector (e.g., "MySharePointConnector")
* **Sites**: Select a list of sites to pull from or leave blank to pull everything (Note:
this option only works for English, Spanish, and German Sharepoint instances.
Contact us if you require further language support)
* **Permission Sync** (Certificate auth only): Enable to sync SharePoint permissions with Hymalaia
Click **Create Connector** to begin indexing.
The connector will start indexing your SharePoint sites and you can add more sites or modify settings as needed.
## Understanding SharePoint Structure
SharePoint organizes content into sites, which can contain document libraries, lists, and pages.
Each site can contain an unlimited number of documents.
The connector focuses on indexing documents stored in document libraries across your selected sites.
For more information on SharePoint structure,
visit the [Microsoft SharePoint documentation](https://docs.microsoft.com/en-us/sharepoint/).
# Slab Connector
Source: https://docs.hymalaia.com/connectors/slab-connector
Access the latest Posts from Slab
## How it works
* Slab posts are indexed by their **titles** and **contents**
* Posts are updated every **10 minutes**
***
## Setting up
### Authorization
> 📺 For detailed instructions, refer to the \[Slab bot token setup video].
1. Follow the instructions in the video to fetch your **Slab Bot Token**.
### Indexing
1. Go to the **Admin Dashboard**
2. Select the **Slab Connector** tile
3. In **Step 1**, provide your **Slab Bot Token** (obtained above)
4. In **Step 2**, provide the **Slab URL**
* For example: `hymalaiaai.slab.com`
5. Click **Connect** to begin indexing
***
Once connected, all the posts from Slab will be indexed and searchable in Hymalaia.
# Slack Federated
Source: https://docs.hymalaia.com/connectors/slack/slack_federated
Set up the Slack Federated connector
## Jan 2026 Update
In June 2025, Slack introduced ToS and API changes that restricted customers from indexing their own data.
Hymalaia introduced the Slack Federated connector that uses the Search APIs as an alternative to the indexing connector.
However, Slack has recently reversed these API restrictions, which allows the indexing connector to work again.
We have found that the Indexed Connector performs signficantly better than the Slack Search APIs at finding relevant
results. We strongly recommend using the [Slack Indexed Connector](/connectors/slack/slack_indexed)
if possible.
## Setting up
### Authorization
You must be an admin of the Slack workspace to set up the connector.
Navigate and sign in to [https://api.slack.com/apps](https://api.slack.com/apps).
Click the **Create New App** button in the top right. Select **From an app manifest** option.
Select the relevant workspace from the dropdown and click **Next**.
Select the "YAML" tab, paste the following manifest into the text box, and click **Next**:
```
display_information:
name: Hymalaia Search Assistant
description: Search your Slack data as yourself
background_color: "#4A154B"
oauth_config:
redirect_urls:
- https:///federated/oauth/callback
scopes:
user:
- channels:read
- groups:read
- im:read
- mpim:read
- search:read
- channels:history
- groups:history
- im:history
- mpim:history
- users:read
settings:
org_deploy_enabled: false
socket_mode_enabled: false
token_rotation_enabled: false
```
We do not currently support token rotation, so `token_rotation_enabled: false` is necessary.
Click the **Create** button.
In the app page, navigate to the **Basic Information** tab under the **Settings** header.
Copy the **Client ID** and **Client Secret**. Store those somewhere safe for the next step.
### Indexing
Navigate to the Connector Dashboard and select the **Slack** Connector.
Enter the **Client ID** and **Client Secret** from step 7.
Configure the search scope for the federated connector. The following configuration options are available:
**Channel Selection:**
* **Search All Channels**: Enable to search all accessible channels. When enabled, the Channels field is disabled.
* **Channels**: Specify which channels to search (only used if Search All Channels is disabled). Supports glob patterns (e.g., `general`, `eng*`, `product-*`).
* **Exclude Channels**: Exclude specific channels from search. Supports glob patterns (e.g., `secure-channel`, `private-*`, `customer*`).
**Message Types:**
* **Include Direct Messages**: Include user direct messages (1:1 DMs) in search results.
* **Include Group Direct Messages**: Include multi-person direct messages (MPIMs) in search results.
* **Include Private Channels**: Include private channels in search results (user must have access).
**Search Parameters:**
* **Default Search Days**: Maximum number of days to search back (default: 30).
Increasing this value may degrade answer quality.
* **Max Messages Per Query**: Maximum number of messages to retrieve per search query (default: 25).
Higher values provide more context but may be slower.
Once configured, click the **Create/Update** button.
Head back to the main Chat page and go through the OAuth flow!
Every user will need to go through this OAuth flow. The searchable content depends on:
* The connector configuration settings (channels, DMs, private channels, etc.)
* The OAuth scopes granted during setup
* The user's individual access permissions in Slack
If certain OAuth scopes are missing (e.g., `mpim:read`, `im:history`),
the connector will gracefully continue searching other available channel types and log warnings about the missing
scopes.
# Slack Indexed
Source: https://docs.hymalaia.com/connectors/slack/slack_indexed
Set up the Slack Indexed connector
## How it works
The Slack connector indexes all public channels for a given workspace.
To index private channels, add the Slack App to the private channel.
## Setting up
### Authorization
**Note: You must be an admin of the Slack workspace to set up the connector**
Navigate and sign in to [https://api.slack.com/apps](https://api.slack.com/apps).
Create a new Slack app:
* Click the **Create New App** button in the top right.
* Select **From an app manifest** option.
* Select the relevant workspace from the dropdown and click **Next**.
Select the "YAML" tab, paste the following manifest into the text box, and click **Next**:
```
display_information:
name: HymalaiaConnector
description: ReadOnly Connector for indexing Hymalaia
features:
bot_user:
display_name: HymalaiaConnector
always_online: false
oauth_config:
scopes:
bot:
- channels:history
- channels:read
- groups:history
- groups:read
- channels:join
- im:history
- users:read
- users:read.email
- usergroups:read
settings:
org_deploy_enabled: false
socket_mode_enabled: false
token_rotation_enabled: false
```
Click the **Create** button.
In the app page, navigate to the **OAuth & Permissions** tab under the **Features** header.
Copy the **Bot User OAuth Token**, this will be used to access Slack.
### Indexing
Navigate to the Connector Dashboard and select the **Slack** Connector.
Place the **Bot User OAuth Token** under **Step 1 Provide Credentials**
Set the **Workspace ID** and click **Connect**.
**Note:** The first indexing pulls all of the public channels and takes longer than future updates.
# Snowflake Connector
Source: https://docs.hymalaia.com/connectors/snowflake-connector
Index Snowflake table metadata (DDL) in Hymalaia
## How it works
The Snowflake connector indexes **table metadata** for a given database and schema: it discovers tables via `INFORMATION_SCHEMA` and stores each table’s **DDL** (structure) as a searchable document. It does **not** index row-level table data.
On each run, tables whose definition has changed (based on Snowflake’s `LAST_DDL` in the configured schema) are refreshed. Like other connectors, indexing typically runs on a **daily** schedule.
## Setting up
### Authorization
Snowflake uses **username and password** authentication against your Snowflake account. Create a credential with:
* **Account** — your Snowflake [account identifier](https://docs.snowflake.com/en/user-guide/admin-account-identifier) (e.g. `xy12345` or `xy12345.us-east-1.aws`)
* **User** — Snowflake login name for the role you want to use
* **Password** — password for that user
* **Warehouse** — a warehouse the user is allowed to use (the connector runs metadata queries through it)
Use a dedicated user with least privilege (ability to read metadata and run `GET_DDL` / `INFORMATION_SCHEMA` in the target database and schema).
### Indexing
In the Hymalaia Admin Panel, open the **Snowflake** connector.
In **Step 1**, set up credentials:
* Select an existing Snowflake credential, or click **Create New**
* Enter **Account**, **User**, **Password**, and **Warehouse**
Click **Create** (or equivalent) to save the credential configuration.
Ensure the correct credential is selected, then click **Continue**.
In **Step 2**, specify:
* **Connector Name** — a display name for this connector (e.g. `Analytics DWH`)
* **Database** — the Snowflake database to index
* **Schema** — the schema within that database (e.g. `PUBLIC` or your analytics schema)
* **Access Type** — whether indexed content is **Public** or **Private** in Hymalaia
Click **Create Connector** to start indexing.
The connector will index table DDL for the configured database and schema. Add another connector (or credential) if you need additional databases or schemas.
For more on Snowflake objects and identifiers, see the [Snowflake documentation](https://docs.snowflake.com/).
# Teams Connector
Source: https://docs.hymalaia.com/connectors/teams-connector
Access knowledge from your Teams Posts
## How it works
* The Teams connector will index all files available to requested Teams sites.
***
## Setting up
### Authorization
1. Log in to your **Azure Portal** for your organization.
2. Navigate to **"App Registrations"** using the search bar.
3. Click **New Registration**.
4. Name it something like **Hymalaia Teams Connector”**, leave the defaults as they are, and click **Register**.
5. Under **Essentials** in the overview tab, find the **Client ID** and **Directory ID**. Copy and paste those into the Hymalaia connector.
6. Navigate to the **"Certificates & Secrets"** tab and click **New client secret**.
* Set a description, expiration (24 months), and click **Add**.
* Copy the secret value from the **Value** column and paste it into the Hymalaia connector.
7. Navigate to the **"API Permissions"** tab.
* Click **Add a permission**.
* Select **Microsoft Graph** and then **Application permissions**.
* Under **Team** permissions, select **Team.ReadBasic.All**.
* Under **TeamsSettings** permissions, select **TeamSettings.ReadWrite.All**.
* Under **Channel** permissions, select **Channel.ReadBasic.All**.
* Under **ChannelSettings** permissions, select **ChannelSettings.ReadWrite.All**.
* Under **ChannelMessage** permissions, select **ChannelMessage.Read.All**.
* Under **ChannelMember** permissions, select **ChannelMember.Read.All**.
8. Click **Add permissions** at the bottom.
9. Finally, click **Grant admin consent for \** and confirm.
### Indexing
1. Navigate to the **Admin Dashboard** and select the **Teams Connector** tile.
2. Provide the **Application (Client) ID**, **Directory (Tenant) ID**, and **Client Secret Value** from the steps above.
3. Select the list of teams to pull from, or leave blank to pull from all teams.
4. Click **Connect** to begin indexing.
***
Once connected, all the files from the selected Teams posts and channels will be indexed and available for search in Hymalaia.
# Web Connector
Source: https://docs.hymalaia.com/connectors/web-connector
Access knowledge from Web Pages
## How it works
* The **Web Connector** scrapes sites based on the base URL.
* It only indexes files from the same domain and base path.
* The connector indexes pages that are reachable via hyperlinks starting from the base URL.
* The text contents are cleaned up using heuristics, and metadata (e.g., page Title) is extracted.
***
## Setting up
### Authorization
No additional authorization is necessary as long as the page is reachable.
### Indexing
1. Navigate to the **Admin Dashboard** and select the **Web Connector**.
2. Input the **base URL** to index and click **Index**.
3. To check the status of the indexing, visit the **Connectors Status** page (top left).
***
Once indexing is complete, the content from the provided web pages will be available for search in Hymalaia.
# Wikipedia Connector
Source: https://docs.hymalaia.com/connectors/wikipedia-connector
Access public articles from Wikipedia
*Guide in progress (instructions also found in the Connector creation UI)*
# XenForo Connector
Source: https://docs.hymalaia.com/connectors/xenforo-connector
Access forum posts from XenForo
## How it works
The Xenforo Connector scrapes forums or threads from the specified URL.
It currently does not support incremental updates ... this is planned for a future release.
## Setting up
### Authorization
* As long as the page is reachable, no additional authorization is necessary.
### Indexing
Navigate to the Admin Panel and select the **Xenforo** Connector.
Input the base URL to index (either a forum or thread URL) and click "Create Connector".
# Zendesk Connector
Source: https://docs.hymalaia.com/connectors/zendesk-connector
Access knowledge from Zendesk Articles
## How it works
* The **Zendesk Connector** syncs all the **published Articles** in your company’s Zendesk subdomain.
### Limitations:
* It does not pick up **Zendesk Tickets**.
* It does not include **comments**.
* It pulls all the articles without the ability to select by **Category**.
***
## Setting up
### Authorization
To connect the Zendesk Connector, you need the following information:
1. **Subdomain** of the Zendesk tenant (e.g., `your-company.zendesk.com`).
2. **Email address** of the user to impersonate (owner of the **API Token**).
3. **API Token**.
### Getting the API Token:
1. Log into Zendesk.
2. Navigate to **Admin > Channels > API**.
3. Under the **Tokens** tab, create a new API token and copy it.
### Indexing
1. Navigate to the **Admin Dashboard** and select **Add Connector** followed by the **Zendesk** tile.
2. Provide the required information:
* Subdomain
* Email address
* API Token
3. Click **Connect** to start pulling articles from Zendesk. Articles will be synced every **10 minutes**.
***
Once the connector is set up, you’ll be able to access and search through your Zendesk articles within Hymalaia.
# Zulip Connector
Source: https://docs.hymalaia.com/connectors/zulip-connector
Capture discussions from Zulip Streams and Topics
## How it works
* The **Zulip Connector** pulls in all **streams** and **topics** based on the permissions assigned to the Zulip bot user.
***
## Setting up
### Authorization
Hymalaia interfaces with Zulip using a Zulip Bot, which is authenticated via the `zuliprc` config format. For more context directly from Zulip, refer to the following docs:
* [Running Bots](https://zulip.com/api/running-bots)
* [Configuring Python Bindings](https://zulip.com/api/configuring-python-bindings)
### Steps to Create a Zulip Bot:
1. **Create a Zulip Bot**.
2. Copy the **Bot authentication info** (the contents of the `zuliprc` file).
3. Keep the copied `zuliprc` information for the next step.
***
## Indexing
1. Navigate to the **Admin Dashboard** and select the **Zulip Connector**.
2. In Step 1, paste the copied `zuliprc` value.
3. Grab your **Zulip Realm/URL** information (shown below):
4. In Step 2, provide the **Realm** and **URL** values.
***
Once configured, the Zulip Connector will start indexing discussions from Zulip Streams and Topics.
# Agent Search
Source: https://docs.hymalaia.com/guides/agent-search
A guide to use advanced search capability in Hymalaia.
Agent Search is Hymalaia advanced knowledge retrieval system that enables answering complex, multi-faceted questions by intelligently decomposing queries, searching across multiple contexts, and synthesizing comprehensive answers.
Unlike traditional search, Agent Search approaches questions like a knowledgeable colleague would:
1. **Decompose and disambiguate**
2. **Analyze narrow, well-defined sub-questions**
3. **Synthesize and present comprehensive context-rich answers**
> 💡 *Example:* When comparing two products (e.g. Car A vs. Car B), Agent Search will independently explore both, then compare them to form a rich, contextual answer.
***
## Key Features
* **Intelligent Query Decomposition**\
Breaks complex questions into precise sub-questions
* **Parallel Search Processing**\
Executes multiple analysis threads simultaneously
* **Answer Validation**\
Refines and validates responses for accuracy and completeness
***
## Configuration
### Basic Setup
To enable Agent Search in your Hymalaia deployment:
1. Update to the latest version of Hymalaia
2. Configure knowledge source connections
3. Set up LLM provider credentials
4. Enable the **Agent** toggle in the chat interface (with a search-capable assistant)
***
### Advanced Configuration
#### Best Practices & Suggestions
* Don’t hesitate to ask **complex or multi-layered questions**.
* Try **comparative queries** like:
> *“What’s the difference between Solution A and B?”*\
> Agent Search will separately analyze A and B before comparing.
* Ask **ambiguous questions** such as:
> *“What are the guiding principles for X?”*\
> The system will use context to clarify what "guiding principles" refers to.
* Even **simple questions** may benefit from deeper, contextualized answers.
* **Click on sub-question analyses** — they may provide interesting insights individually.
> ⚠️ It is recommended to assign a **faster/cheaper LLM model** as your *Fast Model*, since Agent Search performs many parallel queries.
***
## Common Issues and Solutions
| Issue | Solution |
| ------------------------------ | -------------------------------------------------------------------------------------------- |
| **Langgraph/Langchain errors** | Ensure server uses Python 3.11 and installs libraries from `backend/requirements.txt`. |
| **Rate limits** | Agent Search may hit rate limits due to parallel queries. Use a provider with higher limits. |
| **Timeouts** | Timeout thresholds are enforced to avoid blocking. Contact support if these are too strict. |
| **High token usage** | Expect significantly more input/output tokens than with Basic Search. |
***
## Summary
Agent Search offers a powerful way to surface deeper insights, especially when working with ambiguous or multi-faceted questions. For best performance:
* Use optimized LLM configurations
* Expect and account for higher token usage
* Experiment with your queries to see how well the system synthesizes knowledge
> 💬 Reach out to us on Slack or Discord if you're experiencing issues or want help fine-tuning your setup.
# Creating Assistants
Source: https://docs.hymalaia.com/guides/creating-assistants
A comprehensive guide to creating and configuring AI assistants in Hymalaia.
A comprehensive guide to creating and configuring AI assistants in Hymalaia.
***
## Introduction
Hymalaia empowers you to create custom AI assistants tailored to your specific needs. These assistants can be configured to handle a wide range of tasks, from answering HR queries to assisting with technical support. This guide will walk you through the process of creating an effective assistant using Hymalaia platform.
***
## Configuration Options
When creating an assistant in Hymalaia, you have several configuration options:
* **Name**: The identifier for your assistant
* **Description**: A brief overview of the assistant’s purpose and capabilities
* **System Prompt**: Defines the assistant’s role and overall behavior
* **Task Prompt**: Specifies how the assistant should handle user queries
* **Tools**: Available integrations and capabilities
* **Starter Messages**: Initial messages to guide user interaction
* **LLM Provider**: The language model powering your assistant
***
## Understanding Different Prompt Types
Hymalaia uses two main types of prompts when configuring an assistant: the **System Prompt** and the **Task Prompt** (“Additional Instructions”). Understanding the difference between these is crucial for creating an effective assistant.
***
### System Prompt
The System Prompt sets the overall context and behavior of your assistant. It defines:
* The assistant’s role
* General behavioral guidelines
* Any limitations or restrictions
The System Prompt is like giving your assistant its job description and what its purpose is.
**Example System Prompt**:
```plaintext theme={null}
You are an HR assistant for Hymalaia Inc. You have access to the company's HR policies, benefits packages, and procedures. Maintain a professional and friendly tone in all interactions. If you're unsure about any information, advise the user to contact the HR department directly. Do not make up information or policies.
```
***
### Task Prompt
The Task Prompt provides specific instructions on how the assistant should handle and respond to user queries. It defines:
* Steps to follow for each query
* How to process and present information
* When to ask for clarification
* How to handle different types of requests
The Task Prompt is like giving your assistant a specific protocol for handling each interaction.
**Example Task Prompt**:
```plaintext theme={null}
Follow these steps when responding to a user query:
1. Identify the main HR topic or policy in the user's question.
2. Search the provided HR documents for relevant information.
3. Summarize the applicable policy or procedure in clear, concise language.
4. If multiple policies apply, list them in order of relevance.
5. Provide the source document and section for your information.
6. If the query is unclear, ask the user for clarification before providing an answer.
7. If the query is outside your knowledge base, politely direct the user to contact the HR department.
```
***
## Testing and Refinement
After creating your assistant:
* Conduct test runs with various queries
* Gather feedback from a small group of users
* Use Hymalaia analytics tools to identify areas for improvement
* Regularly update and refine your assistant based on feedback and changing needs
***
## Sharing and Permissions
* Determine the appropriate access level for the assistant (e.g., specific departments, entire organization)
* Utilize Hymalaia group features to manage access efficiently
* Consider creating multiple versions of an assistant for different user groups if needed
***
By carefully configuring these elements, you can create a Hymalaia assistant that effectively serves your organization’s needs, providing accurate and helpful responses to user queries.
# Embedding Models
Source: https://docs.hymalaia.com/guides/embedding-models
A comprehensive guide to selecting and using embedding models in your application.
Hymalaia supports integration with several popular embedding model providers. This flexibility allows you to choose the model that best aligns with your performance, language, and efficiency needs.
## OpenAI Models
### `text-embedding-3-small`
* **Description:** Newer, more efficient embedding model
* **Strengths:** Great balance between performance and efficiency
### `text-embedding-3-large`
* **Description:** Large embedding model in the OpenAI lineup
* **Strengths:** Best performance among OpenAI's offerings
#### OpenAI Credentials Setup
1. Sign up at [OpenAI](https://platform.openai.com/).
2. Generate an API key.
3. Enter your OpenAI key in the Hymalaia Admin Panel.
***
## Cohere Models
### `embed-english-v3.0`
* **Description:** Optimized for English-language content
* **Strengths:** Strong performance for most English use cases
### `embed-english-light-v3.0`
* **Description:** Lightweight version for faster performance
* **Strengths:** Efficient for simpler or high-volume tasks
#### Cohere Credentials Setup
1. Create an account on [Cohere](https://cohere.com/).
2. Follow their documentation to obtain an API key.
3. Use the API key in Hymalaia to configure embedding.
***
## Voyage Models
### `voyage-large-2-instruct`
* **Description:** Instruction-tuned, high-performing embedding model
### `voyage-light-2-instruct`
* **Description:** Lighter model with a performance/efficiency trade-off
#### Voyage Credentials Setup
1. Sign up at [Voyage AI](https://voyageai.com/).
2. Follow their integration guide to get your API key.
3. Enter your Voyage API key in Hymalaia.
***
## Vertex AI (Google)
### `gecko`
* **Description:** Google's powerful and efficient embedding model
* **Note:** Requires Google Cloud Platform (GCP) setup
#### Vertex AI Credentials Setup
1. Create a [GCP account](https://console.cloud.google.com/).
2. Create a new project.
3. Enable the Vertex AI API.
4. Create a service account with Vertex AI permissions.
5. Generate a JSON key for that service account.
6. Upload the JSON key in Hymalaia.
***
## Choosing the Right Model
| Factor | Recommendation |
| ------------------------------ | ---------------------------------------------------------------------------- |
| **Task Complexity** | Use larger models like `text-embedding-3-large` or `voyage-large-2-instruct` |
| **Language Specificity** | Cohere’s models are ideal for English-specific applications |
| **Performance vs. Efficiency** | Consider `-light` models for faster processing with some trade-offs |
| **Setup Complexity** | OpenAI and Cohere are simpler to set up; Gecko requires GCP configuration |
***
## Best Practices
* **Experiment:** Try different models with your real data to compare results.
* **Monitor:** Track effectiveness across different use cases.
* **Update Regularly:** Check for updates or new model versions from providers.
* **Secure Credentials:** Use the Hymalaia Admin Panel to securely store API keys or upload credentials.
> 📌 **Note:** Always refer to the provider's official documentation for the most accurate and current information.
# LLM Providers
Source: https://docs.hymalaia.com/guides/llm-providers
A comprehensive guide to selecting and using LLM providers in Hymalaia.
Hymalaia is designed to be model-agnostic, giving you the flexibility to select the Language Model (LLM) that best suits your needs. This means you're not tied to a single provider and can mix and match models based on the strengths required for each task.
## Model Overview
Hymalaia supports integration with leading LLM providers, with a strong focus on **OpenAI** and **Anthropic** models.
### OpenAI Models
#### GPT-3.5-Turbo
* **Strengths:** High speed, reliable quality for general tasks
* **Best for:** Quick queries, general information retrieval
* **Knowledge cutoff:** September 2021
#### GPT-4
* **Strengths:** Superior reasoning, creative output, accurate code generation
* **Best for:** Complex analysis, creative tasks, code-heavy scenarios
* **Knowledge cutoff:** April 2023
* **Note:** Capable of image analysis
### Anthropic Models
#### Claude-3 Opus
* **Strengths:** Exceptional reasoning and analysis
* **Best for:** Complex problem-solving, long-form content
* **Note:** High accuracy, may have slower response times
#### Claude-3 Sonnet
* **Strengths:** Balanced performance and speed
* **Best for:** General-purpose tasks requiring both quality and efficiency
#### Claude 3.5 Sonnet
* **Strengths:** Enhanced capabilities over Sonnet
* **Best for:** Advanced general-purpose tasks
* **Recommended:** Ideal balance of quality and performance for most use cases
#### Claude-3 Haiku
* **Strengths:** Fast and lightweight
* **Best for:** Simpler tasks, real-time responsiveness
* **Note:** Optimized for speed with trade-offs in complexity
## Custom Providers
Hymalaia supports custom LLMs via the [LiteLLM](https://docs.litellm.ai/docs/providers) provider list. You can integrate specialized or internal models to align with your organization's privacy, cost, or domain-specific needs.
## Choosing the Right Model
| Factor | Recommendation |
| ------------------- | ------------------------------------------------------------------- |
| **Task Complexity** | Use GPT-4 or Claude-3 Opus for heavy reasoning or complex requests |
| **Speed** | Use GPT-3.5-Turbo or Claude-3 Haiku for fast, lightweight queries |
| **Cost** | Consider cheaper models for high-volume use cases |
| **Privacy** | Self-host models like Llama 2 if data privacy is critical |
| **Specialization** | Evaluate model strengths for tasks like coding, writing, or support |
> 💡 **Tip:** For most use cases, **Claude 3.5 Sonnet** is recommended due to its optimal balance of power and performance.
## Leveraging Model Flexibility
* **Experiment:** Compare models on real queries to assess response quality.
* **Monitor:** Use Hymalaia analytics to understand which models perform best.
* **Stay Updated:** Watch for LLM version updates and improvements.
* **Integrate Custom Models:** Utilize LiteLLM to plug in your own model APIs.
***
By choosing the right model and leveraging Hymalaia's flexible architecture, you can fine-tune your AI capabilities to meet any business or technical challenge.
# Chrome Extension
Source: https://docs.hymalaia.com/hymalaia-chrome-extension
Use Hymalaia in Chrome from any page.
# Hymalaia Chrome Extension
Use the Hymalaia extension to ask questions from anywhere in Chrome. You can also replace your new-tab page with a custom Hymalaia experience.
## Features
* Ask questions from any page
* Access the Hymalaia Sidebar anywhere on the web
* Use smart context menu actions:
* 🔎 **Search selected text** in Hymalaia
* 🧠 **Add selected text to your conversation**
* 📄 **Add the entire page** to your conversation
* ✨ **Ask Hymalaia to summarize the page**
* 🕵️♂️ **Look up name details** (LinkedIn, etc.)
Future versions of the Hymalaia Chrome Extension will allow you to ask questions about the page you're currently on and index recently visited pages into Hymalaia's knowledge base.
## Setting Up (Self-Hosted Users)
If you're using **Hymalaia Cloud**, install the extension directly from the Chrome Web Store.
> Minimum required version: `v0.19.0`
1. Go to `chrome://extensions` in Chrome.
2. Enable **Developer mode** (upper right).
3. Click **Load unpacked**.
4. Select the folder of the Hymalaia Chrome Extension repo (e.g., `Hymalaia-chrome-extension`).
5. Click **Load**.
6. Click the `...` next to the extension → **Options**.
7. Set the **Root Domain** to your self-hosted Hymalaia instance’s URL.
✅ The extension is now active and connected to your instance.
## Enterprise Installation (Google Admin)
Use this if you manage a large group of users via Google Admin.
### Step 1: Access Chrome Management
* Go to `Devices → Chrome → Apps and extensions`.
### Step 2: Install Extension
* Get the **extension ID** from the Hymalaia team.
* Click the ➕ (plus) icon to add a new extension.
* Paste the extension ID.
* Click **Add**.
### Step 3: Configure Settings
* Locate the Hymalaia extension in the console.
* Manage options like:
* Force install for users/org units
* Allow/block users
* Version pinning and update settings
* Installation policies (allow/force/block)
### Step 4: Save Changes
* Save your config to apply changes across your org.
## Self-Hosted Installation
1. Clone or download the Hymalaia Chrome Extension repository.
2. Follow the [setup steps](#setting-up-self-hosted-users).
3. To distribute:
* Host the `.crx` file yourself
* Or publish it as **private/unlisted** on the Chrome Web Store.
## Updating Extensions
### ✅ Enterprise
* Chrome auto-updates force-installed extensions.
* You can **pin versions** in the Admin console if needed.
* ⚠️ Avoid long-term pinning (no security updates).
### 🔄 Self-Hosted
1. Bump version in `manifest.json` (e.g., `1.0` → `1.1`).
2. Repack the extension (new `.crx` file).
3. Update where users access/install it.
4. If using GPO, update CRX version and URL.
## Extension Management in Enterprise
### Management Options
* Block/Allow list of extensions
* Force installation
* Block extensions on sensitive domains
* Permission restrictions
### Example: Block Extensions on Specific Domains
1. Go to:
* `Devices → Chrome → Apps & extensions → Users & browsers`
2. Click ⚙️ Additional Settings.
3. Add blocked host patterns:
```txt theme={null}
*://*.sensitive-domain.com
```
4. Add allowed host patterns if needed.
## Group Policy (GPO) Setup (Windows)
1. Install Chrome ADM/ADMX templates.
2. Open Group Policy Editor:
* `gpedit.msc → Computer Configuration → Administrative Templates → Google → Google Chrome → Extensions`
3. Configure policies:
* `ExtensionInstallBlocklist`
* `ExtensionInstallAllowlist`
* `ExtensionInstallForcelist`
* `ExtensionSettings`
4. Use JSON/Registry to define options like:
* `blocked_permissions`
* `runtime_blocked_hosts`
## Self-Hosting and Packaging
If you want to avoid using the Chrome Web Store:
1. Go to `chrome://extensions → Developer Mode → Pack extension`.
2. This generates a `.crx` and a private `.pem` key (keep it safe).
3. Host `.crx` and `update.xml` on your server/intranet.
4. Use Google Admin or GPO to point to your update URL.
### ✅ Pros
* Full release control
* Private distribution
### ⚠️ Cons
* Bypasses Chrome Store security checks
* Requires more maintenance
## Best Practices
* Refer to [Google Chrome Enterprise policies](https://chromeenterprise.google/policies/) for extension management.
* Follow Hymalaia documentation for maintaining self-hosted environments.
# Introduction
Source: https://docs.hymalaia.com/introduction
Welcome to Hymalaia
## Feature Highlights
### Deep research over your team's knowledge
The first step to world-class documentation is setting up your editing environments.
### Use Hymalaia as a secure AI Chat with any LLM
See LLM configuration options [here](/ai-configs/genAI-overview)
### Easily set up connectors to your apps
Check out all of the connectors [here](/connectors/overview)
### Access Hymalaia where your team already works
Set up Hymalaia in Slack ([directions](/slack-bot-setup)) or Microsoft Teams ([directions](/teams-bot-setup))
## Other Notable Benefits of Hymalaia
* Custom deep learning models for indexing and inference time, only through Hymalaia + learning from user feedback.
* Flexible security features like SSO (OIDC/SAML/OAuth2), RBAC, encryption of credentials, etc.
* Knowledge curation features like document-sets, query history, usage analytics, etc.
* Scalable deployment options tested up to many tens of thousands users and hundreds of millions of documents.
## Roadmap
* New methods in information retrieval (StructRAG, LightGraphRAG, etc.)
* Personalized Search
* Organizational understanding and ability to locate and suggest experts from your team.
* Code Search
* SQL and Structured Query Language
## Deployment
Hymalaia can also be run locally (even on a laptop) or deployed on a virtual machine with a single docker compose command. Visit the [quickstart](/quickstart) page to learn more.
Hymalaia also has built-in support for high-availability/scalable deployment on Kubernetes. Kubernetes manifests and helm charts are available here.
# Multilingual Setup
Source: https://docs.hymalaia.com/multilingual-setup
Configure Hymalaia to support languages other than English.
Hymalaia can be configured to support multiple languages beyond English. This guide walks you through how it works and how to set it up.
## How it works
Hymalaia relies on two core components that assume English by default:
1. **Vector Search and Reranking**\
These components use embedding models to retrieve relevant documents for the LLM.
2. **LLM Prompts**\
These are used to guide the LLM in how to respond.
To support multilingual scenarios:
* Swap out English-first embedding/reranking models for **multilingual models**.
* Apply **query expansion** to rephrase the user query into target languages.
* Provide **LLM instructions** to respond in the same language as the user query.
> ⚠️ **Note**\
> The built-in LLM prompts are still in English. For fully non-English use, consider translating all prompts directly into your target language.
***
## Configuration
Hymalaia supports multilingual setup entirely through environment variables. For Docker Compose, create a `.env` file inside the `hymalaia/deployment/docker_compose` folder.
Here's an example configuration for **English** and **French**:
```env theme={null}
# Rephrase user query in multiple languages
MULTILINGUAL_QUERY_EXPANSION="English, French"
# Use a multilingual embedding model
DOCUMENT_ENCODER_MODEL="intfloat/multilingual-e5-small"
# Prefixes used by the embedding model
ASYM_QUERY_PREFIX="query: "
ASYM_PASSAGE_PREFIX="passage: "
# Normalize embeddings (model dependent)
NORMALIZE_EMBEDDINGS="True"
# Disable LLM chunk filtering for better multilingual support
DISABLE_LLM_CHUNK_FILTER="True"
# Disable reranking (English-first models are not optimal for multilingual use)
ENABLE_RERANKING_ASYNC_FLOW="False"
ENABLE_RERANKING_REAL_TIME_FLOW="False"
# Enable fine-grained mini-chunking for better recall
ENABLE_MINI_CHUNK="True"
# Use a stronger model for better multilingual understanding
GEN_AI_MODEL_VERSION="gpt-4"
```
> 📝 An up-to-date template for multilingual settings is also available in the codebase under hymalaia/deployment/docker\_compose.
## Recommendations
* For full translation, localize all prompt templates in your target language.
* Use multilingual embedding models from trusted sources (e.g. Hugging Face).
* Prefer LLMs with multilingual support (e.g. GPT-4, Claude, etc.).
# Slack Bot Setup
Source: https://docs.hymalaia.com/slack-bot-setup
How to set up a Slack bot to automatically answer questions
## HymalaiaBot Introduction
Hymalaia will connect to your Slack and listen for messages to answer.
You can easily configure rules for what channels Hymalaia should respond in, what knowledge sets should back each configured channel, and set filters to respond or not respond to different types of messages.
When Hymalaia identifies valid questions, it will respond in the message thread with:
* An LLM generated answer
* Quotes of the most relevant excerpts
* Sources with highlighted keywords
Hymalaia also provides a configuration page so you can create custom settings for each slack channel (or you can just use the default settings for all your channels).
Since we are using Web Sockets, Hymalaia is able to initiate the connection. This means that this is able to work even if you are running Hymalaia inside a firewall protected VPC.
## Setting up
### Authorization
**Note**: You must be an admin of the Slack workspace to set up the Slack bot.
1. Navigate and sign in to [https://api.slack.com/apps](https://api.slack.com/apps).
2. Create a new Slack app:
* Click the **Create New App** button in the top right.
* Select **From an app manifest**.
* Select the relevant workspace and click **Next**.
* Select the “YAML” tab, paste the following manifest into the text box, and click **Next**:
```yaml theme={null}
display_information:
name: HymalaiaBot
description: I help answer questions in Slack!
features:
app_home:
home_tab_enabled: false
messages_tab_enabled: true
messages_tab_read_only_enabled: false
bot_user:
display_name: HymalaiaBot
always_online: true
slash_commands:
- command: /hymalaia
description: Get back a private answer!
usage_hint: Put your question here!
should_escape: false
oauth_config:
scopes:
bot:
- app_mentions:read
- channels:history
- channels:join
- channels:read
- chat:write
- commands
- groups:history
- groups:read
- im:history
- im:read
- mpim:history
- reactions:write
- reactions:read
- usergroups:read
- users:read.email
- users:read
user:
- channels:history
- channels:read
- groups:read
- im:read
- mpim:history
- mpim:read
- search:read
settings:
event_subscriptions:
bot_events:
- app_mention
- message.channels
- message.groups
- message.im
- message.mpim
interactivity:
is_enabled: true
org_deploy_enabled: false
socket_mode_enabled: true
token_rotation_enabled: false
```
3. Click **Create**.
4. Generate an App-level Token under **Basic Information** → **App-level tokens** → **Generate Token**
* Add the `connections:write` scope.
* Copy the token.
5. Navigate to **OAuth & Permissions**.
* Click **Install to Workspace**.
* Click **Allow**.
* Copy the **Bot User OAuth Token**.
## Setting Hymalaia to use it
* Go to the admin page in the top right of the Hymalaia UI.
* In the menu, go to **Bots**.
* Provide your Slack tokens.
Hymalaia will start responding in Slack channels after a short delay.
# System Overview
Source: https://docs.hymalaia.com/system-overview
High-level explanation of Hymalaia system components and data flows.
This page gives you a high-level overview of how Hymalaia works. It’s designed to provide clarity and transparency into the system design so you can use it with confidence.
If you're looking to **customize** Hymalaia or become an **open source contributor**, this is a great place to begin.
***
## System Architecture
Hymalaia can be deployed on a **single instance** or a **container orchestration platform** (e.g., Kubernetes). Regardless of where it's deployed, the **data flow remains consistent**.
* Documents are pulled and processed via **connectors**.
* These are then stored in **Vespa** or **Postgres**, running in containers within your setup.
### LLM Communication
The **only time-sensitive data that leaves** your system is when Hymalaia makes a request to a **Large Language Model (LLM)** for generating a response.
* All communication with the LLM is **encrypted**.
* Data persistence policies depend on your **LLM hosting provider**.
> 🕵️ Hymalaia also includes minimal, **anonymous telemetry** to help improve the platform and monitor flaky connectors.\
> You can **disable telemetry** by setting the following environment variable:
```env theme={null}
DISABLE_TELEMETRY=True
```
***
## Embedding Flow
Each document is **split into chunks** (smaller sections) for processing.
Benefits of chunking:
* Only relevant parts are passed to the LLM → **less noise**.
* **Reduced cost**: LLMs charge per token.
* **Improved detail retention**: Embedding vectors have limits on how much info they can store.
### Mini-Chunks
Mini-chunks go one step further:
* Create **multiple embedding sizes**.
* Improve retrieval of both **high-level context** and **fine-grained details**.
* Can be toggled using environment variables.
> ⚠️ Note: Mini-chunks may **slow down indexing** on low-performance hardware.
### Embedding Model
Hymalaia uses a **state-of-the-art biencoder**, optimized for:
* Running on **CPUs**
* **Subsecond** document retrieval
***
## Query Flow
The **query pipeline** is under constant improvement, adapting new research and open-source techniques.
Everything is configurable:
* Number of documents to retrieve
* Number of reranked documents
* Embedding and reranking models
* Chunk selection passed to the LLM
> ❓Have questions or ideas? Don’t hesitate to reach out to the maintainers.
***
Ready to dive deeper? Explore the [Multilingual Setup](./multilingual_setup) or the [Connector Guide](./connectors) to further customize your Hymalaia deployment.
# Microsoft Teams Bot Setup
Source: https://docs.hymalaia.com/teams-bot-setup
Step-by-step guide to configure the Hymalaia bot on Microsoft Teams
This guide walks through creating an Azure Bot, connecting it to Microsoft Teams, publishing the app to your organization, and approving it for users.
## Step 1 — Create the Azure bot
1. Go to [portal.azure.com](https://portal.azure.com) and open **Microsoft Foundry** → **Bot Services**, then click **Create an Azure Bot**.
2. Fill in:
* **Bot handle**: A unique name for your bot (for example `Hymalaia_test`).
* **Subscription**: Your Azure subscription.
* **Resource group**: Choose or create one (for example `Dev`).
* **Data residency**: Global.
* **Pricing tier**: Standard.
3. Under **Microsoft App ID**, set up the application identity.
4. Click **Review + create**, then **Create**.
### Step 1b — Get the client secret
After the bot is created:
1. Open **App Registrations** → your app → **Certificates & secrets**.
2. Click **+ New client secret**, set a description and expiration, then **Add**.
3. Copy the **Value** of the secret immediately — it is shown only once.
Keep the **Client Secret** and **Microsoft App ID** safe; your Hymalaia backend needs them for configuration.
## Step 2 — Configure the Azure bot
In your Azure bot: **Settings** → **Configuration**, set:
* **Messaging endpoint**: The URL where your server receives Teams messages (for example `https://your-deployment.example.com/api/msteams/messages`).
* **Bot Type**: Single Tenant.
* **Microsoft App ID**: Your registered application ID.
* **App Tenant ID**: Your Azure AD tenant ID.
* **Schema Transformation Version**: V1.3.
Click **Apply** to save.
### Enable the Microsoft Teams channel
Under **Settings** → **Channels**, confirm **Microsoft Teams** is connected and shows **Healthy**. **Direct Line** and **Web Chat** are usually enabled by default.
If Microsoft Teams is not listed, open **Available Channels** and add the Teams channel.
## Step 3 — Create the app in Teams Developer Portal
Go to [dev.teams.microsoft.com](https://dev.teams.microsoft.com) and create a new app. You will land on the app dashboard (for example for an app named **Hymalaia**). Use the left menu for **Basic information**, **Branding**, **App features**, and other sections.
### Basic information
Under **Configure** → **Basic information**, set for example:
* **Short name**: `Hymalaia` (max 30 characters).
* **Short description**: Short tagline (max 80 characters).
* **Long description**: Full description of what the bot does.
* **Version**: `1.0.0`.
* **Developer name**: Your organization name.
* **Website**: `https://www.hymalaia.com` (or your site).
### Branding
Under **Configure** → **Branding**, upload:
* **Color icon**: 192×192 px PNG with the symbol centered on a 96×96 px area.
* **Outline icon**: 32×32 px PNG, white or transparent.
* **Accent color**: Primary UI color.
### App features — Bot
Under **Configure** → **App features**, choose **Bot**. Then:
* Select **Enter a bot ID** and paste your **Microsoft App ID** from Azure.
* Enable the capabilities you need (for example **Upload and download files**).
* Enable scopes: **Personal**, **Team**, **Group chat**.
The Bot ID must match the **Microsoft App ID** from Azure exactly (for example a GUID like `f746895b-e836-4c8e-9b16-ab99b74c5afa`).
### App package editor — `supportsChannelFeatures`
Under **Configure** → **App package editor**, review the generated `manifest.json`. Ensure **`supportsChannelFeatures`** is present and set to **`tier1`** so advanced channel features work.
**`supportsChannelFeatures`: `"tier1"`** is required for the bot to be eligible for publication in organization channels.
### Publish to your organization
1. Use **Publish** → **App validation** and run Microsoft’s validation. Acknowledge the prompts and start validation.
2. Under **Publish** → **Publish to org**, submit the app. Status becomes **Submitted (awaiting admin's approval)**.
## Step 4 — Approve the app in Teams Admin Center
1. Open [admin.teams.microsoft.com](https://admin.teams.microsoft.com) → **Teams apps** → **Manage apps**.
2. Filter by **Publishing status = Submitted** to see pending apps.
3. Open your app (for example **Hymalaia**). If it shows as **Blocked**, open the details and set the status to **Allowed**.
You need Teams administrator rights. After approval, the app appears in your organization’s app catalog.
## Step 5 — Verify in Microsoft Teams
In Teams: **Apps** → **Built for your organisation**. Your bot should appear and users can install it with **Add**.
***
## Summary
1. Create the bot in Azure (**portal.azure.com** → Bot Services).
2. Set the messaging endpoint and store the **Client Secret** and **Microsoft App ID**.
3. Create the Teams app on **dev.teams.microsoft.com** (basic info, branding, bot ID, channel features).
4. Publish to your org (validation + **Publish to org**).
5. Approve the app in **admin.teams.microsoft.com** → **Manage apps**.
6. Users install from **Apps** → **Built for your organisation**.
# Custom Tools
Source: https://docs.hymalaia.com/tools/custom-tools
How to create custom tools with Hymalaia.
First, navigate to the Admin console, and go to the **Tools** tab. Click the New **Tool button**.
Next, specify a OpenAPI 3.0 or OpenAPI 3.1 schema that defines the APIs that you want to make available as part of this tool.
Hymalaia provides dynamic context variables that can be utilized within your OpenAPI definition, enhancing the functionality and context-awareness of your custom tools. These variables are:
* `CHAT_SESSION_ID` : Replaced with the chat session ID in which the tool call was made.
* `CHAT_MESSAGE_ID` : Replaced with the chat message ID which triggered the tool call.
For example: `/persona/CHAT_SESSION_ID/messages/CHAT_MESSAGE_ID` with `CHAT_SESSION_ID = 20` and `CHAT_MESSAGE_ID = 10` would become `/persona/20/messages/10`
***
## ✅ Tips for Schema Optimization
To ensure smooth integration and performance:
* Add **summaries** for each operation
* Use descriptive **operationIds**
* Add **parameter descriptions**
***
## 🔧 Example Tool Definition
Here’s an example of a tool schema that enables assistants to **fetch and create assistants** within Hymalaia:
```json theme={null}
{
"openapi": "3.0.0",
"info": {
"version": "1.0.0",
"title": "Assistants API",
"description": "An API for managing assistants within Hymalaia"
},
"servers": [
{ "url": "http://localhost:8080" }
],
"paths": {
"/persona": {
"get": {
"summary": "Get a specific Assistant",
"operationId": "getAssistant",
"parameters": [
{
"name": "assistant_id",
"in": "path",
"required": true,
"schema": { "type": "string" }
}
]
},
"post": {
"summary": "Create a new Assistant",
"operationId": "createAssistant",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"description": { "type": "string" },
"num_chunks": { "type": "number" },
"llm_relevance_filter": { "type": "boolean" },
"is_public": { "type": "boolean" },
"llm_filter_extraction": { "type": "boolean" },
"recency_bias": {
"type": "string",
"enum": ["favor_recent", "base_decay", "no_decay", "auto"]
},
"prompt_ids": {
"type": "array",
"items": { "type": "integer" }
},
"document_set_ids": {
"type": "array",
"items": { "type": "integer" }
},
"tool_ids": {
"type": "array",
"items": { "type": "integer" }
},
"llm_model_provider_override": {
"type": "string",
"nullable": true
},
"llm_model_version_override": {
"type": "string",
"nullable": true
},
"starter_messages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"role": { "type": "string" },
"content": { "type": "string" }
}
},
"nullable": true
},
"users": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"nullable": true
},
"groups": {
"type": "array",
"items": { "type": "integer" },
"nullable": true
}
},
"required": [
"name", "description", "num_chunks", "llm_relevance_filter",
"is_public", "llm_filter_extraction", "recency_bias",
"prompt_ids", "document_set_ids", "tool_ids"
]
}
}
}
}
}
}
}
}
```
***
🔐 Security Note
Make sure that any external API you expose via a custom tool:
* Has proper authentication/authorization controls
* Limits the assistant to only the operations you’ve defined
* Avoids exposing sensitive or destructive endpoints unintentionally
***
# Tools Overview
Source: https://docs.hymalaia.com/tools/tools-overview
How to use tools with Hymalaia.
# Tools Overview
Hymalaia supports the use of **tools** to extend the capabilities of your assistants. Tools allow assistants to:
* 🔍 **Fetch external information**\
(e.g. query databases, call APIs, search the internet)
* 🛠️ **Perform actions**\
(e.g. send messages, update records, trigger automations)
* 🎨 **Generate content**\
(e.g. create images, plots, or summaries)
***
## Built-in Tools
By default, Hymalaia provides three built-in tools:
### 1. `SearchTool`
This is the **core tool** in Hymalaia. When added to an assistant, it enables searching across all connected data sources via Connectors.
> ✅ This is the **only tool enabled** by default for the Hymalaia assistant.
***
### 2. `ImageGenerationTool`
Leverages **DALL·E 3** to generate images from text prompts.
**Use cases:**
* Marketing visuals
* UI mockups
* Concept art
***
### 3. `InternetSearchTool`
Uses **Bing** to search the web.
> 🔧 To enable this tool, set the following environment variable in your deployment:
```bash theme={null}
BING_API_KEY=
```