Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.useskald.com/llms.txt

Use this file to discover all available pages before exploring further.

Chat API

Ask questions about your knowledge base using an AI agent with optional filtering to focus the search context.

POST /api/v1/chat

Authentication: Project API Key from https://platform.useskald.com Request (using Project API Key):
{
    "query": "What were the main points discussed in the Q1 meeting?",
    "stream": false,
    "system_prompt": "You are a helpful assistant that can answer questions about the memo.",
    "filters": [
        {
            "field": "source",
            "operator": "eq",
            "value": "meeting-notes",
            "filter_type": "native_field"
        },
        {
            "field": "tags",
            "operator": "in",
            "value": ["q1", "meeting"],
            "filter_type": "native_field"
        }
    ]
}
Request (using Token Authentication):
{
    "query": "What were the main points discussed in the Q1 meeting?",
    "project_id": "project-uuid",
    "stream": false,
    "filters": [
        {
            "field": "category",
            "operator": "eq",
            "value": "meeting",
            "filter_type": "custom_metadata"
        }
    ]
}
Parameters:
  • query (string, required): The question to ask
  • project_id (UUID, optional): Only required when using Token Authentication
  • stream (boolean, optional): Enable streaming responses (default: false)
  • system_prompt (string, optional): A system prompt to guide the chat agent’s behavior
  • filters (array of filter objects, optional): Filters to narrow the search context. See Filters for detailed documentation.
Filter Support: Filters are applied during the initial retrieval of relevant context, allowing you to:
  • Filter by a “workspace” or “team” ID from your side
  • Focus the chat on specific sources (e.g., only Notion docs)
  • Query only memos with certain tags
  • Exclude certain categories of content
See Filters for complete documentation on filter structure, operators, and examples. Response (Non-streaming):
{
    "ok": true,
    "response": "The main points discussed in the Q1 meeting were:\n1. Revenue targets \n2. Hiring plans \n3. Product roadmap",
    "intermediate_steps": []
}
Response (Streaming): When stream: true, returns Server-Sent Events:
Content-Type: text/event-stream

: ping

data: {"type": "token", "content": "The"}

data: {"type": "token", "content": " main"}

data: {"type": "done"}

GET /api/v1/chat

Get a list of chats. Authentication: Project API Key from https://platform.useskald.com Query Parameters:
  • page (integer, optional): Page number (default: 1)
  • page_size (integer, optional): Page size (default: 20)
Example Response:
{
    "results": [
        {
            "uuid": "84365e7e-381e-47da-9104-8dcc7a83920e",
            "created_at": "2025-12-13T16:57:45.240Z",
            "title": "What does undefined do?",
            "message_count": 2,
            "last_message_at": "2025-12-13T16:57:45.242Z"
        }
    ],
    "count": 1,
    "page": 1,
    "page_size": 1,
    "total_pages": 1
}
  • Count: The total number of chats
  • Page: The page number
  • Page size: The number of chats per page
  • Total pages: The total number of pages

GET /api/v1/chat/:chat_uuid

Get a chat by its UUID. Authentication: Project API Key from https://platform.useskald.com Path Parameters:
  • :chat_uuid (string, required): The UUID of the chat
Example Response:
{
    "uuid": "4a71fd8b-2ca0-42d8-9bfd-8d11d080ecf3",
    "created_at": "2025-11-22T01:13:41.113Z",
    "messages": [
        {
            "uuid": "e03af6a7-da4d-4508-9057-4dcc25eec7e0",
            "content": "what's 2+2?",
            "sent_by": "user",
            "sent_at": "2025-11-22T01:13:41.114Z",
            "client_system_prompt": null
        },
        {
            "uuid": "d72c88d0-c6d4-4155-8601-c695abac5cab",
            "content": "2+2 is 4",
            "sent_by": "model",
            "sent_at": "2025-11-22T01:13:41.115Z",
            "client_system_prompt": null
        }
    ]
}

Error Responses

Missing query (400):
{
    "error": "Query is required"
}
Invalid filters (400):
{
    "error": "Filters must be a list"
}
Invalid filter structure (400):
{
    "error": "Invalid filter: <specific error message>"
}
Agent error (500):
{
    "error": "Agent error: <error details>"
}