openapi: 3.0.1 info: title: Klu API description: >- REST API for the Klu (klu.ai) LLM app platform. The Klu Engine runs Actions - each encapsulating a prompt template, model config, context (RAG), and output parsing - against input variables to generate completions, and manages the data, feedback, sessions, models, apps, and workspaces around them. Authentication is via a Bearer API key obtained from the workspace API Keys settings. NOTE - Endpoints under the Actions, Context, and Apps/Workspaces paths reflect the publicly documented Klu API reference and SDK surface. Where the public docs document a capability via the SDK but do not publish the exact REST path, this spec models the conventional resource path used by the Klu Engine; see review.yml for which operations are documented verbatim versus inferred from the SDK. termsOfService: https://klu.ai/terms contact: name: Klu Support url: https://help.klu.ai/ version: '1.0' servers: - url: https://api.klu.ai/v1 description: Klu Engine production API security: - bearerAuth: [] tags: - name: Actions description: Run Actions to generate completions. - name: Context description: Manage Context libraries and documents for retrieval-augmented generation. - name: Data description: Data points produced by Action generations. - name: Feedback description: Ratings, corrections, and issues attached to data points. - name: Sessions description: Session memory for multi-turn conversations. - name: Models description: LLM providers and models available in the workspace. - name: Apps description: Apps (projects) grouping Actions, context, and experiments. - name: Workspaces description: Workspace administration. paths: /actions: post: operationId: runAction tags: - Actions summary: Run an Action description: >- Executes a Klu Action by GUID against the provided input, returning the generated completion and a feedback URL containing the data point GUID. Supports streaming, async execution, response caching, session memory, context metadata filtering, and experiments. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RunActionRequest' responses: '200': description: Generation result. content: application/json: schema: $ref: '#/components/schemas/RunActionResponse' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimited' /context: post: operationId: createContext tags: - Context summary: Create a Context library description: >- Creates a new Context library. Klu automatically builds a vector index and performs retrieval-augmented generation via similarity search over its documents. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateContextRequest' responses: '200': description: Context library created. content: application/json: schema: $ref: '#/components/schemas/Context' '401': $ref: '#/components/responses/Unauthorized' /context/{guid}/documents: post: operationId: addContextDocument tags: - Context summary: Add a document to a Context library description: Adds app data as a Context document with optional metadata. parameters: - $ref: '#/components/parameters/Guid' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddContextDocumentRequest' responses: '200': description: Document added. content: application/json: schema: $ref: '#/components/schemas/ContextDocument' '401': $ref: '#/components/responses/Unauthorized' /context/{guid}/add_files: post: operationId: addContextFiles tags: - Context summary: Add files to a Context library description: Adds one or more files to an existing Context library. parameters: - $ref: '#/components/parameters/Guid' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddContextFilesRequest' responses: '200': description: Files added. '401': $ref: '#/components/responses/Unauthorized' /data/{guid}: get: operationId: getDataPoint tags: - Data summary: Get a data point description: >- Retrieves a data point by GUID, including its prompt, completion, and metadata. The data point GUID is returned in the feedback URL of an Action run. parameters: - $ref: '#/components/parameters/Guid' responses: '200': description: Data point. content: application/json: schema: $ref: '#/components/schemas/DataPoint' '401': $ref: '#/components/responses/Unauthorized' /feedback: post: operationId: createFeedback tags: - Feedback summary: Submit feedback on a data point description: >- Submits feedback - a rating, correction, or issue - for a generation. For ratings, Klu uses 1 for negative and 2 for positive. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateFeedbackRequest' responses: '200': description: Feedback recorded. content: application/json: schema: $ref: '#/components/schemas/Feedback' '401': $ref: '#/components/responses/Unauthorized' /sessions: post: operationId: createSession tags: - Sessions summary: Create a session description: Creates a session used to store and retrieve memory across Action generations. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateSessionRequest' responses: '200': description: Session created. content: application/json: schema: $ref: '#/components/schemas/Session' '401': $ref: '#/components/responses/Unauthorized' /sessions/{guid}: get: operationId: getSession tags: - Sessions summary: Get a session parameters: - $ref: '#/components/parameters/Guid' responses: '200': description: Session. content: application/json: schema: $ref: '#/components/schemas/Session' '401': $ref: '#/components/responses/Unauthorized' /models: get: operationId: listModels tags: - Models summary: List models description: Lists the LLM providers and models available in the workspace. responses: '200': description: Model list. content: application/json: schema: type: array items: $ref: '#/components/schemas/Model' '401': $ref: '#/components/responses/Unauthorized' /models/{guid}: get: operationId: getModel tags: - Models summary: Get a model parameters: - $ref: '#/components/parameters/Guid' responses: '200': description: Model. content: application/json: schema: $ref: '#/components/schemas/Model' '401': $ref: '#/components/responses/Unauthorized' /apps: get: operationId: listApps tags: - Apps summary: List apps description: Lists the Apps (projects) in the workspace. responses: '200': description: App list. content: application/json: schema: type: array items: $ref: '#/components/schemas/App' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createApp tags: - Apps summary: Create an app requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateAppRequest' responses: '200': description: App created. content: application/json: schema: $ref: '#/components/schemas/App' '401': $ref: '#/components/responses/Unauthorized' /apps/{guid}: get: operationId: getApp tags: - Apps summary: Get an app parameters: - $ref: '#/components/parameters/Guid' responses: '200': description: App. content: application/json: schema: $ref: '#/components/schemas/App' '401': $ref: '#/components/responses/Unauthorized' /workspaces: get: operationId: listWorkspaces tags: - Workspaces summary: List workspaces responses: '200': description: Workspace list. content: application/json: schema: type: array items: $ref: '#/components/schemas/Workspace' '401': $ref: '#/components/responses/Unauthorized' components: securitySchemes: bearerAuth: type: http scheme: bearer description: Klu API key passed as a Bearer token in the Authorization header. parameters: Guid: name: guid in: path required: true description: GUID of the resource. schema: type: string responses: Unauthorized: description: Missing or invalid API key. content: application/json: schema: $ref: '#/components/schemas/Error' RateLimited: description: Too many requests. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: RunActionRequest: type: object required: - action - input properties: action: type: string description: GUID of the Action to run. input: description: Input string, or an object of key-value variable pairs for the prompt template. oneOf: - type: string - type: object additionalProperties: true streaming: type: boolean description: Stream the response token by token. default: false async_mode: type: boolean description: Execute asynchronously and return a generation GUID to retrieve results later. default: false cache: type: boolean description: Return a cached response when an equivalent generation is available. default: false session: type: string description: Session GUID to use for conversational context. metadata_filter: type: object additionalProperties: true description: Filter Context documents by metadata attributes. experiment: type: string description: Experiment GUID for A/B testing. RunActionResponse: type: object properties: msg: type: string description: The generated completion text. feedback_url: type: string description: URL containing the data point GUID for submitting feedback on this generation. stream_url: type: string description: Token streaming endpoint, present when streaming is enabled. data_guid: type: string description: GUID of the data point recorded for this generation. CreateContextRequest: type: object required: - name - description - type properties: name: type: string description: type: string type: type: string enum: - Files - Custom files: type: array items: type: string Context: type: object properties: guid: type: string name: type: string description: type: string type: type: string AddContextDocumentRequest: type: object required: - text properties: text: type: string meta_data: type: object additionalProperties: true ContextDocument: type: object properties: guid: type: string text: type: string meta_data: type: object additionalProperties: true AddContextFilesRequest: type: object required: - files properties: files: type: array items: type: string DataPoint: type: object properties: guid: type: string prompt: type: string completion: type: string meta_data: type: object additionalProperties: true created_at: type: string format: date-time CreateFeedbackRequest: type: object required: - data_guid - type properties: data_guid: type: string description: GUID of the data point being rated. type: type: string description: Feedback type - rating, correction, or issue. enum: - rating - correction - issue value: description: For a rating, 1 (negative) or 2 (positive); for a correction, the corrected text. oneOf: - type: integer - type: string Feedback: type: object properties: guid: type: string data_guid: type: string type: type: string value: oneOf: - type: integer - type: string CreateSessionRequest: type: object properties: action: type: string description: GUID of the Action this session is associated with. name: type: string Session: type: object properties: guid: type: string action: type: string name: type: string Model: type: object properties: guid: type: string llm: type: string description: Model identifier. provider: type: string description: Provider name, e.g. OpenAI or Anthropic. key: type: string App: type: object properties: guid: type: string name: type: string description: type: string app_type: type: string CreateAppRequest: type: object required: - name properties: name: type: string description: type: string app_type: type: string Workspace: type: object properties: guid: type: string name: type: string slug: type: string Error: type: object properties: error: type: string message: type: string