This document is the consolidated HTTP API reference for the LLM Module. It covers the LLM Connections management endpoints, the Inference Results storage/retrieval endpoints, and the chatbot Inquiry endpoint exposed to the LLM Orchestration Service.
Routing note: the public-facing paths below are served through the Ruuter API gateway (
ruuter-private/ruuter-public), which proxies to the LLM Orchestration Service. See ARCHITECTURE.md for how requests flow through the system.
/ruuter-private/llm/connections
POST /ruuter-private/llm/connections/create{
"llmPlatform": "OpenAI",
"llmModel": "GPT-4o",
"embeddingPlatform": "OpenAI",
"embeddingModel": "text-embedding-3-small",
"monthlyBudget": 1000.00,
"deploymentEnvironment": "Testing",
// Azure credentials (optional)
"deploymentName": "my-deployment",
"targetUri": "https://my-endpoint.azure.com",
"apiKey": "azure-api-key",
// AWS Bedrock credentials (optional)
"secretKey": "aws-secret-key",
"accessKey": "aws-access-key",
// Embedding model credentials (optional)
"embeddingModelApiKey": "embedding-api-key"
}{
"id": 1,
"llmPlatform": "OpenAI",
"llmModel": "GPT-4o",
"embeddingPlatform": "OpenAI",
"embeddingModel": "text-embedding-3-small",
"monthlyBudget": 1000.00,
"usedBudget": 0.00,
"deploymentEnvironment": "Testing",
"status": "active",
"createdAt": "2025-09-02T10:15:30.000Z",
// Azure credentials (if provided)
"deploymentName": "my-deployment",
"targetUri": "https://my-endpoint.azure.com",
"apiKey": "azure-api-key",
// AWS Bedrock credentials (if provided)
"secretKey": "aws-secret-key",
"accessKey": "aws-access-key",
// Embedding model credentials (if provided)
"embeddingModelApiKey": "embedding-api-key"
}POST /ruuter-private/llm/connections/update{
"connectionId": 1,
"llmPlatform": "Azure AI",
"llmModel": "GPT-4o-mini",
"embeddingPlatform": "Azure AI",
"embeddingModel": "text-embedding-ada-002",
"monthlyBudget": 2000.00,
"deploymentEnvironment": "Production",
// Azure credentials (optional)
"deploymentName": "updated-deployment",
"targetUri": "https://updated-endpoint.azure.com",
"apiKey": "updated-azure-api-key",
// AWS Bedrock credentials (optional)
"secretKey": "updated-aws-secret-key",
"accessKey": "updated-aws-access-key",
// Embedding model credentials (optional)
"embeddingModelApiKey": "updated-embedding-api-key"
}{
"id": 1,
"llmPlatform": "Azure AI",
"llmModel": "GPT-4o-mini",
"embeddingPlatform": "Azure AI",
"embeddingModel": "text-embedding-ada-002",
"monthlyBudget": 2000.00,
"usedBudget": 150.75,
"deploymentEnvironment": "Production",
"status": "active",
"createdAt": "2025-09-02T10:15:30.000Z",
// Azure credentials (if provided)
"deploymentName": "updated-deployment",
"targetUri": "https://updated-endpoint.azure.com",
"apiKey": "updated-azure-api-key",
// AWS Bedrock credentials (if provided)
"secretKey": "updated-aws-secret-key",
"accessKey": "updated-aws-access-key",
// Embedding model credentials (if provided)
"embeddingModelApiKey": "updated-embedding-api-key"
}POST /ruuter-private/rag-search/llm-connections/list{
"page": 1,
"page_size": 10,
"sorting": "created_at desc"
}| Parameter | Type | Required | Description | Default |
|---|---|---|---|---|
page |
number | No | Page number (1-based) | 1 |
page_size |
number | No | Number of items per page | 10 |
sorting |
string | No | Sorting criteria | "created_at desc" |
llm_platform asc/descllm_model asc/descembedding_platform asc/descembedding_model asc/descmonthly_budget asc/descenvironment asc/descstatus asc/desccreated_at asc/descupdated_at asc/desc
[
{
"id": 1,
"llmPlatform": "OpenAI",
"llmModel": "GPT-4o",
"embeddingPlatform": "OpenAI",
"embeddingModel": "text-embedding-3-small",
"monthlyBudget": 1000.00,
"environment": "Testing",
"status": "active",
"createdAt": "2025-09-02T10:15:30.000Z",
"updatedAt": "2025-09-02T10:15:30.000Z",
"totalPages": 3
},
{
"id": 2,
"llmPlatform": "Azure AI",
"llmModel": "GPT-4o-mini",
"embeddingPlatform": "Azure AI",
"embeddingModel": "Ada-200-1",
"monthlyBudget": 2000.00,
"environment": "Production",
"status": "active",
"createdAt": "2025-09-02T09:30:15.000Z",
"updatedAt": "2025-09-02T11:00:00.000Z",
"totalPages": 3
}
]POST /ruuter-private/rag-search/llm-connections/get{
"connection_id": 1
}{
"id": 1,
"llmPlatform": "OpenAI",
"llmModel": "GPT-4o",
"embeddingPlatform": "OpenAI",
"embeddingModel": "text-embedding-3-small",
"monthlyBudget": 1000.00,
"environment": "Testing",
"status": "active",
"createdAt": "2025-09-02T10:15:30.000Z",
"updatedAt": "2025-09-02T10:15:30.000Z"
}"error: connection not found"POST /ruuter-private/rag-search/llm-connections/add{
"llm_platform": "OpenAI",
"llm_model": "GPT-4o",
"embedding_platform": "OpenAI",
"embedding_model": "text-embedding-3-small",
"monthly_budget": 1000.00,
"environment": "Testing"
}| Parameter | Type | Required | Description |
|---|---|---|---|
llm_platform |
string | Yes | LLM platform (e.g., "Azure AI", "OpenAI") |
llm_model |
string | Yes | LLM model (e.g., "GPT-4o") |
embedding_platform |
string | Yes | Embedding platform |
embedding_model |
string | Yes | Embedding model |
monthly_budget |
number | Yes | Monthly budget amount |
environment |
string | Yes | "Testing" or "Production" |
{
"id": 3,
"llm_platform": "OpenAI",
"llm_model": "GPT-4o",
"embedding_platform": "OpenAI",
"embedding_model": "text-embedding-3-small",
"monthly_budget": 1000.00,
"environment": "Testing",
"status": "active",
"created_at": "2025-09-02T12:00:00.000Z",
"updated_at": "2025-09-02T12:00:00.000Z"
}"error: environment must be 'Testing' or 'Production'"POST /ruuter-private/rag-search/llm-connections/edit{
"connection_id": 1,
"llm_platform": "Azure AI",
"llm_model": "GPT-4o-mini",
"embedding_platform": "Azure AI",
"embedding_model": "Ada-200-1",
"monthly_budget": 2000.00,
"environment": "Production"
}{
"id": 1,
"llm_platform": "Azure AI",
"llm_model": "GPT-4o-mini",
"embedding_platform": "Azure AI",
"embedding_model": "Ada-200-1",
"monthly_budget": 2000.00,
"environment": "Production",
"status": "active",
"created_at": "2025-09-02T10:15:30.000Z",
"updated_at": "2025-09-02T12:30:00.000Z"
}"error: connection not found"POST /ruuter-private/rag-search/llm-connections/delete{
"connection_id": 1
}"LLM connection deleted successfully""error: connection not found"GET /ruuter-private/llm/connections/list| Parameter | Type | Description |
|---|---|---|
llmPlatform |
string |
Filter by LLM platform |
llmModel |
string |
Filter by LLM model |
deploymentEnvironment |
string |
Filter by environment (Testing / Production) |
pageNumber |
number |
Page number (1-based) |
pageSize |
number |
Number of items per page |
sortBy |
string |
Field to sort by |
sortOrder |
string |
Sort order: 'asc' or 'desc' |
GET /ruuter-private/llm/connections/list?llmPlatform=OpenAI&deploymentEnvironment=Testing&model=GPT4GET /ruuter-private/llm/connections/production| Parameter | Type | Description |
|---|---|---|
llmPlatform |
string |
Filter by LLM platform |
llmModel |
string |
Filter by LLM model |
embeddingPlatform |
string |
Filter by embedding platform |
embeddingModel |
string |
Filter by embedding model |
connectionStatus |
string |
Filter by connection status |
sortBy |
string |
Field to sort by |
sortOrder |
string |
Sort order: 'asc' or 'desc' |
GET /ruuter-private/llm/connections/production?llmPlatform=OpenAI&connectionStatus=active[
{
"id": 1,
"llmPlatform": "OpenAI",
"llmModel": "GPT-4o",
"embeddingPlatform": "OpenAI",
"embeddingModel": "text-embedding-3-small",
"monthlyBudget": 1000.00,
"deploymentEnvironment": "Testing",
"status": "active",
"createdAt": "2025-09-02T10:15:30.000Z",
"updatedAt": "2025-09-02T10:15:30.000Z"
}
]GET /ruuter-private/llm/connections/overview{
"id": 1,
"llmPlatform": "OpenAI",
"llmModel": "GPT-4o",
"embeddingPlatform": "OpenAI",
"embeddingModel": "text-embedding-3-small",
"monthlyBudget": 1000.00,
"deploymentEnvironment": "Testing",
"status": "active",
"createdAt": "2025-09-02T10:15:30.000Z",
"updatedAt": "2025-09-02T10:15:30.000Z"
}POST /ruuter-private/rag-search/llm-connections/exists{ "connection_id": 1 }"true"or
"false"POST /ruuter-private/rag-search/llm-connections/update-status{
"connection_id": 1,
"connection_status": "inactive"
}| Parameter | Type | Required | Description |
|---|---|---|---|
connection_id |
number | Yes | LLM connection ID |
connection_status |
string | Yes | "active" or "inactive" |
Returns the updated connection object.
"error: connection_status must be 'active' or 'inactive'""error: connection not found"GET /ruuter-private/rag-search/llm-connections/list| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pageNumber |
number | No | 1 |
Page number (1-based) |
pageSize |
number | No | 10 |
Items per page (1–100) |
sortBy |
string | No | "created_at" |
Field to sort by |
sortOrder |
string | No | "desc" |
"asc" or "desc" |
llmPlatform |
string | No | "" |
Filter by LLM platform |
llmModel |
string | No | "" |
Filter by LLM model |
environment |
string | No | "" |
Filter by environment |
GET /ruuter-private/rag-search/llm-connections/list?pageNumber=1&pageSize=10&llmPlatform=OpenAI[
{
"id": 1,
"llmPlatform": "OpenAI",
"llmModel": "GPT-4o",
"embeddingPlatform": "OpenAI",
"embeddingModel": "text-embedding-3-small",
"monthlyBudget": 1000.00,
"environment": "Testing",
"status": "active",
"createdAt": "2025-09-02T10:15:30.000Z",
"updatedAt": "2025-09-02T10:15:30.000Z",
"totalPages": 3
}
]"Page number must be greater than 0"GET /ruuter-private/rag-search/llm-connections/allSame as endpoint 8 above but queries all connections regardless of status. Accepts the same query parameters.
GET /ruuter-private/rag-search/llm-connections/production| Parameter | Type | Required | Description |
|---|---|---|---|
llmPlatform |
string | No | Filter by LLM platform |
llmModel |
string | No | Filter by LLM model |
embeddingPlatform |
string | No | Filter by embedding platform |
embeddingModel |
string | No | Filter by embedding model |
connectionStatus |
string | No | Filter by connection status |
sortBy |
string | No | Field to sort by (default: "created_at") |
sortOrder |
string | No | "asc" or "desc" (default: "desc") |
GET /ruuter-private/rag-search/llm-connections/production?connectionStatus=active[
{
"id": 1,
"llmPlatform": "OpenAI",
"llmModel": "GPT-4o",
"embeddingPlatform": "OpenAI",
"embeddingModel": "text-embedding-3-small",
"monthlyBudget": 1000.00,
"environment": "Production",
"status": "active",
"createdAt": "2025-09-02T10:15:30.000Z",
"updatedAt": "2025-09-02T10:15:30.000Z"
}
]POST /ruuter-private/rag-search/llm-connections/cost/updateAdds usage to the connection's current used_budget. If disconnectOnBudgetExceed is set and the stop threshold is reached, the connection is automatically deactivated.
{
"connection_id": 1,
"usage": 12.50
}| Parameter | Type | Required | Description |
|---|---|---|---|
connection_id |
number | Yes | LLM connection ID |
usage |
number | Yes | Amount to add to used_budget (≥ 0) |
{
"data": { "id": 1, "usedBudget": 162.50, "monthlyBudget": 1000.00 },
"budgetExceeded": false,
"message": "Used budget updated successfully",
"operationSuccess": true,
"statusCode": 200
}{
"data": { "id": 1, "usedBudget": 1005.00, "status": "inactive" },
"budgetExceeded": true,
"message": "Used budget updated successfully. Connection deactivated due to budget threshold exceeded.",
"operationSuccess": true,
"statusCode": 200
}"error: connection_id and usage (>= 0) are required""error: connection not found"POST /ruuter-private/rag-search/llm-connections/usage/checkReturns whether the connection's budget is within the stop threshold, exceeded (not disconnected), or exceeded with disconnection.
{ "connection_id": 1 }{
"isBudgetExceed": false,
"isLLMConnectionDisconnected": false
}{
"isBudgetExceed": true,
"isLLMConnectionDisconnected": false
}{
"isBudgetExceed": true,
"isLLMConnectionDisconnected": true
}"Connection not found"GET /ruuter-private/rag-search/llm-connections/cost/checkReturns warn/stop threshold status for the active production connection.
{
"data": {
"id": 1,
"monthlyBudget": 1000.00,
"usedBudget": 620.00,
"warnBudgetThreshold": 70,
"stopBudgetThreshold": 90
},
"used_budget_percentage": 62.0,
"exceeded_stop_budget": false,
"exceeded_warn_budget": false
}"No production LLM connection found"POST /ruuter-public/rag-search/llm-connections/cost/resetResets used_budget to 0 for all LLM connections. Typically called by a scheduled job at the start of each billing period.
None required.
{
"message": "Used budget reset to 0 successfully for all connections",
"totalConnections": "5",
"operationSuccess": true,
"statusCode": 200
}"error: failed to reset used budget"/ruuter-private/inference/results
POST /ruuter-private/inference/results/test/store{
"llm_connection_id": 1,
"user_question": "What are the benefits of using LLMs?",
"final_answer": "LLMs can improve productivity by summarizing large documents, enabling Q&A, and enhancing automation."
}| Parameter | Type | Required | Description |
|---|---|---|---|
llm_connection_id |
number | Yes | ID of the LLM connection |
user_question |
string | Yes | User's raw question/input |
final_answer |
string | Yes | LLM's final generated answer |
{
"data": {
"id": 10,
"llm_connection_id": 1,
"chat_id": null,
"user_question": "What are the benefits of using LLMs?",
"refined_questions": null,
"conversation_history": null,
"ranked_chunks": null,
"embedding_scores": null,
"final_answer": "LLMs can improve productivity by summarizing large documents, enabling Q&A, and enhancing automation.",
"environment": "testing",
"created_at": "2025-09-25T12:15:00.000Z"
},
"operationSuccess": true,
"statusCode": 200
}{
"data": "[]",
"operationSuccess": false,
"statusCode": 400
}"error: LLM connection not found"POST /ruuter-private/inference/results/production/store{
"chat_id": "chat-12345",
"user_question": "What are the benefits of using LLMs?",
"refined_questions": [
"How do LLMs improve productivity?",
"What are practical use cases of LLMs?"
],
"conversation_history": [
{ "role": "user", "content": "Hello" },
{ "role": "assistant", "content": "Hi! How can I help you?" }
],
"ranked_chunks": [
{ "id": "chunk_1", "content": "LLMs help in summarization", "rank": 1 },
{ "id": "chunk_2", "content": "They improve Q&A systems", "rank": 2 }
],
"embedding_scores": [0.92, 0.85, 0.78],
"final_answer": "LLMs can improve productivity by summarizing large documents, enabling Q&A, and enhancing automation."
}| Parameter | Type | Required | Description |
|---|---|---|---|
chat_id |
string | No | Optional chat session ID |
user_question |
string | Yes | User's raw question/input |
refined_questions |
object | No | List of refined questions (LLM-generated) |
conversation_history |
object | No | Prior messages array of {role, content} |
ranked_chunks |
object | No | Retrieved chunks ranked with metadata |
embedding_scores |
object | No | Distance scores for each chunk |
final_answer |
string | Yes | LLM's final generated answer |
{
"data": {
"id": 15,
"llm_connection_id": null,
"chat_id": "chat-12345",
"user_question": "What are the benefits of using LLMs?",
"refined_questions": [
"How do LLMs improve productivity?",
"What are practical use cases of LLMs?"
],
"conversation_history": [
{ "role": "user", "content": "Hello" },
{ "role": "assistant", "content": "Hi! How can I help you?" }
],
"ranked_chunks": [
{ "id": "chunk_1", "content": "LLMs help in summarization", "rank": 1 },
{ "id": "chunk_2", "content": "They improve Q&A systems", "rank": 2 }
],
"embedding_scores": [0.92, 0.85, 0.78],
"final_answer": "LLMs can improve productivity by summarizing large documents, enabling Q&A, and enhancing automation.",
"environment": "production",
"created_at": "2025-09-25T12:15:00.000Z"
},
"operationSuccess": true,
"statusCode": 200
}{
"data": "[]",
"operationSuccess": false,
"statusCode": 400
}POST /ruuter-private/inference/results/test/store{
"llmConnectionId": 1,
"userQuestion": "What are the benefits of using LLMs?",
"finalAnswer": "LLMs can improve productivity by summarizing large documents, enabling Q&A, and enhancing automation."
}{
"data": {
"id": 15,
"llmConnectionId": 1,
"userQuestion": "What are the benefits of using LLMs?",
"finalAnswer": "LLMs can improve productivity by summarizing large documents, enabling Q&A, and enhancing automation.",
"environment": "testing",
"createdAt": "2025-09-25T10:15:30.000Z"
},
"operationSuccess": true,
"statusCode": 200
}POST /ruuter-private/inference/results/production/store{
"llmConnectionId": 1,
"chatId": "chat-session-12345",
"userQuestion": "What are the benefits of using LLMs?",
"refinedQuestions": [
"How do LLMs improve productivity?",
"What are practical use cases of LLMs?"
],
"conversationHistory": [
{ "role": "user", "content": "Hello" },
{ "role": "assistant", "content": "Hi! How can I help you?" }
],
"rankedChunks": [
{ "id": "chunk_1", "content": "LLMs help in summarization", "rank": 1 },
{ "id": "chunk_2", "content": "They improve Q&A systems", "rank": 2 }
],
"embeddingScores": {
"chunk_1": 0.92,
"chunk_2": 0.85
},
"finalAnswer": "LLMs can improve productivity by summarizing large documents, enabling Q&A, and enhancing automation."
}{
"id": 20,
"llmConnectionId": 1,
"chatId": "chat-session-12345",
"userQuestion": "What are the benefits of using LLMs?",
"refinedQuestions": [
"How do LLMs improve productivity?",
"What are practical use cases of LLMs?"
],
"conversationHistory": [
{ "role": "user", "content": "Hello" },
{ "role": "assistant", "content": "Hi! How can I help you?" }
],
"rankedChunks": [
{ "id": "chunk_1", "content": "LLMs help in summarization", "rank": 1 },
{ "id": "chunk_2", "content": "They improve Q&A systems", "rank": 2 }
],
"embeddingScores": {
"chunk_1": 0.92,
"chunk_2": 0.85
},
"finalAnswer": "LLMs can improve productivity by summarizing large documents, enabling Q&A, and enhancing automation.",
"environment": "production",
"createdAt": "2025-09-25T10:15:30.000Z"
}POST /ruuter-private/rag-search/inference/productionValidates the production connection's budget then proxies the request to the LLM Orchestration Service.
{
"chatId": "chat-session-123",
"message": "What are the benefits of using LLMs?",
"authorId": "user-456",
"conversationHistory": [
{ "role": "user", "content": "Hello" },
{ "role": "assistant", "content": "Hi! How can I help you?" }
],
"url": "https://example.com/context"
}| Parameter | Type | Required | Description |
|---|---|---|---|
chatId |
string | Yes | Chat session ID |
message |
string | Yes | User message |
authorId |
string | Yes | Author ID |
conversationHistory |
array | No | Prior {role, content} messages |
url |
string | No | URL reference |
Proxied response from the LLM Orchestration Service.
{
"chatId": "chat-session-123",
"content": "The LLM connection is currently unavailable. Your request couldn't be processed. Please retry shortly.",
"status": 400
}"No production connection found"POST /ruuter-private/rag-search/inference/testValidates a specific connection's budget then calls the LLM Orchestration Service /test endpoint.
{
"connectionId": "1",
"message": "What are the benefits of using LLMs?"
}| Parameter | Type | Required | Description |
|---|---|---|---|
connectionId |
string | Yes | Connection ID to test against |
message |
string | Yes | User message |
Proxied response from the LLM Orchestration Service /test endpoint.
{
"connectionId": "1",
"content": "The LLM connection is currently unavailable. Your request couldn't be processed. Please retry shortly.",
"status": 400
}"No test connection found"POST /ruuter-private/rag-search/inference/results/viewReturns a mock inference response for testing purposes.
{
"llmConnectionId": 1,
"message": "What services are available?"
}| Parameter | Type | Required | Description |
|---|---|---|---|
llmConnectionId |
number | Yes | LLM connection ID |
message |
string | Yes | User message/question |
{
"chatId": 10,
"llmServiceActive": true,
"questionOutOfLlmScope": true,
"content": "Random answer with citations\n - https://gov.ee/sample1,\n - https://gov.ee/sample1"
}"llmConnectionId and message are required"POST /ruuter-public/rag-search/inference/results/storePublic variant of the inference result store. Accepts the same fields as the private store endpoints, plus environment and vault_uuid.
{
"user_question": "What are the benefits of using LLMs?",
"final_answer": "LLMs can improve productivity...",
"chat_id": "chat-12345",
"environment": "production",
"vault_uuid": "550e8400-e29b-41d4-a716-446655440000",
"refined_questions": ["How do LLMs improve productivity?"],
"conversation_history": [{ "role": "user", "content": "Hello" }],
"ranked_chunks": [{ "id": "chunk_1", "content": "...", "rank": 1 }],
"embedding_scores": [0.92, 0.85]
}| Parameter | Type | Required | Description |
|---|---|---|---|
user_question |
string | Yes | User's raw question/input |
final_answer |
string | Yes | LLM's final generated answer |
chat_id |
string | No | Chat session ID |
environment |
string | No | Environment identifier |
vault_uuid |
string | No | Vault UUID for the LLM connection |
refined_questions |
object | No | List of refined questions |
conversation_history |
object | No | Prior {role, content} messages |
ranked_chunks |
object | No | Retrieved chunks ranked with metadata |
embedding_scores |
object | No | Distance scores for each chunk |
{
"data": { "id": 20, "user_question": "...", "final_answer": "...", "environment": "production" },
"operationSuccess": true,
"statusCode": 200
}{
"data": "[]",
"operationSuccess": false,
"statusCode": 400
}/ruuter-private/rag-search
GET /ruuter-private/rag-search/llm/platformsReturns all active LLM platforms.
[
{ "id": 1, "value": "openai", "label": "OpenAI" },
{ "id": 2, "value": "azure", "label": "Azure AI" },
{ "id": 3, "value": "aws", "label": "AWS Bedrock" }
]GET /ruuter-private/rag-search/llm/models| Parameter | Type | Required | Description |
|---|---|---|---|
platform_key |
string | Yes | Platform key to filter models (e.g. "openai") |
GET /ruuter-private/rag-search/llm/models?platform_key=openai[
{ "id": 1, "value": "gpt-4o", "label": "GPT-4o", "platform_id": 1, "platform_key": "openai", "platform_name": "OpenAI" },
{ "id": 2, "value": "gpt-4o-mini", "label": "GPT-4o-mini", "platform_id": 1, "platform_key": "openai", "platform_name": "OpenAI" }
]GET /ruuter-private/rag-search/llm/models-listReturns all LLM models with no platform filter.
[
{ "id": 1, "platform_id": 1, "value": "gpt-4o", "label": "GPT-4o" },
{ "id": 2, "platform_id": 1, "value": "gpt-4o-mini", "label": "GPT-4o-mini" }
]GET /ruuter-private/rag-search/embedding/platformsReturns all active embedding platforms.
[
{ "id": 1, "value": "openai", "label": "OpenAI" },
{ "id": 2, "value": "azure", "label": "Azure AI" }
]GET /ruuter-private/rag-search/embedding/models| Parameter | Type | Required | Description |
|---|---|---|---|
embedding_platform_key |
string | Yes | Platform key to filter models |
GET /ruuter-private/rag-search/embedding/models?embedding_platform_key=openai[
{ "id": 1, "value": "text-embedding-3-small", "label": "text-embedding-3-small", "platform_id": 1, "platform_key": "openai", "platform_name": "OpenAI" },
{ "id": 2, "value": "text-embedding-ada-002", "label": "text-embedding-ada-002", "platform_id": 1, "platform_key": "openai", "platform_name": "OpenAI" }
]/ruuter-private/rag-search/prompt-configuration
GET /ruuter-private/rag-search/prompt-configuration/getReturns the active custom prompt configuration. Returns an empty array if none is configured.
[
{
"id": 1,
"prompt": "You are a helpful assistant for government services...",
"created_at": "2025-09-02T10:15:30.000Z",
"updated_at": "2025-09-02T12:30:00.000Z"
}
]POST /ruuter-private/rag-search/prompt-configuration/saveUpserts the prompt configuration (inserts if none exists, updates otherwise). Also triggers an LLM cache refresh.
{
"prompt": "You are a helpful assistant for government services. Answer questions accurately and concisely."
}| Parameter | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Prompt text to save |
Returns the saved prompt configuration object.
{
"id": 1,
"prompt": "You are a helpful assistant for government services. Answer questions accurately and concisely.",
"updated_at": "2025-09-25T12:00:00.000Z"
}/ruuter-private/rag-search/vault/secret
POST /ruuter-private/rag-search/vault/secret/createStores LLM connection credentials in Vault via CronManager. Supported platforms: "aws", "azure".
{
"vaultUuid": "550e8400-e29b-41d4-a716-446655440000",
"llmPlatform": "aws",
"llmModel": ["claude-3-sonnet"],
"secretKey": "aws-secret-key",
"accessKey": "aws-access-key",
"embeddingModel": "amazon.titan-embed-text-v1",
"embeddingPlatform": "aws",
"embeddingAccessKey": "embed-access-key",
"embeddingSecretKey": "embed-secret-key",
"deploymentEnvironment": "Production"
}{
"vaultUuid": "550e8400-e29b-41d4-a716-446655440000",
"llmPlatform": "azure",
"llmModel": ["gpt-4o"],
"deploymentName": "my-deployment",
"targetUrl": "https://my-endpoint.azure.com",
"apiKey": "azure-api-key",
"embeddingModel": "text-embedding-ada-002",
"embeddingPlatform": "azure",
"embeddingDeploymentName": "embed-deployment",
"embeddingTargetUri": "https://embed-endpoint.azure.com",
"embeddingAzureApiKey": "embed-azure-api-key",
"deploymentEnvironment": "Production"
}| Parameter | Type | Platform | Description |
|---|---|---|---|
vaultUuid |
string | Both | Stable UUID for the vault path |
llmPlatform |
string | Both | "aws" or "azure" |
llmModel |
array | Both | LLM model identifier(s) |
deploymentEnvironment |
string | Both | Deployment environment |
embeddingModel |
string | Both | Embedding model identifier |
embeddingPlatform |
string | Both | Embedding platform |
secretKey |
string | AWS | AWS secret key |
accessKey |
string | AWS | AWS access key |
embeddingAccessKey |
string | AWS | Embedding AWS access key |
embeddingSecretKey |
string | AWS | Embedding AWS secret key |
deploymentName |
string | Azure | Azure deployment name |
targetUrl |
string | Azure | Azure endpoint URL |
apiKey |
string | Azure | Azure API key |
embeddingDeploymentName |
string | Azure | Embedding Azure deployment name |
embeddingTargetUri |
string | Azure | Embedding Azure endpoint URI |
embeddingAzureApiKey |
string | Azure | Embedding Azure API key |
"Executed cron manager successfully to store aws secrets""Executed cron manager successfully to store azure secrets"{
"message": "Platform not supported",
"operationSuccessful": false,
"statusCode": 400
}POST /ruuter-private/rag-search/vault/secret/deleteRemoves LLM connection credentials from Vault via CronManager.
{
"vaultUuid": "550e8400-e29b-41d4-a716-446655440000",
"llmPlatform": "azure",
"llmModel": "gpt-4o",
"embeddingModel": "text-embedding-ada-002",
"embeddingPlatform": "azure",
"deploymentEnvironment": "Production"
}| Parameter | Type | Required | Description |
|---|---|---|---|
vaultUuid |
string | Yes | Vault UUID of the connection |
llmPlatform |
string | Yes | LLM platform |
llmModel |
string | Yes | LLM model identifier |
embeddingModel |
string | Yes | Embedding model identifier |
embeddingPlatform |
string | Yes | Embedding platform |
deploymentEnvironment |
string | Yes | Deployment environment |
"Executed cron manager successfully to delete secrets from vault"{
"message": "Connection not found with the provided vaultUuid",
"operationSuccessful": false,
"statusCode": 404
}/ruuter-public/rag-search
GET /ruuter-public/rag-search/services/get-servicesReturns all active services if the count is ≤ 10. If count > 10, signals the caller to use semantic search instead.
{
"use_semantic_search": false,
"service_count": 5,
"services": [
{ "id": "svc-1", "name": "Pension Application", "description": "..." }
]
}{
"use_semantic_search": true,
"service_count": 23,
"message": "Service count exceeds threshold - use semantic search"
}POST /ruuter-public/rag-search/data/updateFetches the latest agency data from CKB, compares the data hash, and if changed triggers vector re-indexing via CronManager.
None required.
{
"message": "Data synchronization initiated successfully",
"operationSuccessful": true
}{
"success": true,
"message": "No sync required - data is up to date"
}{
"message": "CKB service returned an error - data synchronization aborted",
"operationSuccessful": false,
"error": "CKB_ERROR"
}{
"success": false,
"message": "Data synchronization failed - CKB agency data not found"
}POST /ruuter-public/rag-search/api-tools/indexQueues an API tool endpoint for vector indexing in Qdrant via CronManager (async).
{
"endpointId": "ep-001",
"serviceId": "svc-1",
"name": "Get Pension Status",
"description": "Retrieve the current pension application status for a citizen",
"method": "GET",
"url": "https://api.example.com/pension/status",
"visibility": "public",
"params": [
{ "name": "nationalId", "type": "string", "required": true }
]
}| Parameter | Type | Required | Description |
|---|---|---|---|
endpointId |
string | Yes | Unique endpoint identifier |
name |
string | Yes | Endpoint name |
description |
string | Yes | Endpoint description |
url |
string | Yes | API URL |
serviceId |
string | No | Parent service ID |
method |
string | No | HTTP method (default: "GET") |
visibility |
string | No | "public" or "private" (default: "public") |
type |
string | No | Endpoint type (default: "custom_endpoint") |
params |
array | No | List of parameters |
{
"success": true,
"endpoint_id": "ep-001",
"message": "API Tool indexing job queued successfully. Processing asynchronously."
}{
"success": false,
"error": "MISSING_REQUIRED_FIELDS",
"message": "endpointId, name, description, and url are required"
}{
"success": false,
"error": "INDEXING_QUEUE_FAILED",
"message": "Failed to queue indexing job. CronManager may be unavailable."
}POST /ruuter-public/rag-search/services/enrichQueues a service for enrichment and Qdrant indexing via CronManager (async).
{
"service_id": "svc-001",
"name": "Pension Application",
"description": "Submit a new pension application for eligible citizens",
"examples": ["How do I apply for pension?", "Pension eligibility requirements"],
"entities": ["nationalId", "dateOfBirth"],
"ruuter_type": "POST",
"current_state": "active",
"is_common": false
}| Parameter | Type | Required | Description |
|---|---|---|---|
service_id |
string | Yes | Unique service identifier |
name |
string | Yes | Service name |
description |
string | Yes | Service description |
examples |
array | No | Example user queries |
entities |
array | No | Expected entity names |
ruuter_type |
string | No | HTTP method (default: "GET") |
current_state |
string | No | "active", "inactive", or "draft" (default: "draft") |
is_common |
boolean | No | Whether this is a common service (default: false) |
{
"success": true,
"service_id": "svc-001",
"message": "Service enrichment job queued successfully. Processing asynchronously."
}{
"success": false,
"error": "MISSING_REQUIRED_FIELDS",
"message": "service_id, name, and description are required"
}{
"success": false,
"error": "ENRICHMENT_QUEUE_FAILED",
"message": "Failed to queue enrichment job. CronManager may be unavailable."
}