curl --request POST \
--url https://api.sigmamind.ai/v1/knowledge-bases \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-Key: <api-key>' \
--form 'knowledge_base_files=<string>' \
--form knowledge_base_files.items='@example-file'import requests
url = "https://api.sigmamind.ai/v1/knowledge-bases"
files = { "knowledge_base_files.items": ("example-file", open("example-file", "rb")) }
payload = { "knowledge_base_files": "<string>" }
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('knowledge_base_files', '<string>');
form.append('knowledge_base_files.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
options.body = form;
fetch('https://api.sigmamind.ai/v1/knowledge-bases', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sigmamind.ai/v1/knowledge-bases",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sigmamind.ai/v1/knowledge-bases"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sigmamind.ai/v1/knowledge-bases")
.header("X-API-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sigmamind.ai/v1/knowledge-bases")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"kbId": "kb_6sbr3tbMX757M0VD",
"name": "Support FAQs",
"files": [
{
"documentId": "doc_a1b2c3d4e5f67890",
"type": "url",
"content": "https://docs.example.com/guide"
}
],
"createdAt": "2026-05-06T11:15:02.073Z",
"updatedAt": "2026-05-06T11:15:02.073Z"
}{
"error": "Bad Request",
"message": "Invalid request parameters",
"path": "/v1/knowledge-bases",
"status": 400,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Unauthorized",
"message": "X-API-Key is missing or invalid",
"path": "/v1/knowledge-bases",
"status": 401,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Forbidden",
"message": "Access denied for this resource",
"path": "/v1/knowledge-bases",
"status": 403,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Not Found",
"message": "The requested resource was not found",
"path": "/v1/knowledge-bases",
"status": 404,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Payload Too Large",
"message": "An uploaded file exceeds the per-file size limit (25 MB).",
"path": "/v1/knowledge-bases",
"status": 413,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Unsupported Media Type",
"message": "Uploaded file type is not supported. Allowed: PDF, TXT, HTML, Markdown, DOCX.",
"path": "/v1/knowledge-bases",
"status": 415,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Internal Server Error",
"message": "Something went wrong on the server",
"path": "/v1/knowledge-bases",
"status": 500,
"timestamp": "2026-05-14T14:27:21.959Z"
}Create knowledge base
Creates a knowledge base by providing a name, optional text snippets, URLs, and file attachments. Sources are processed in order: text, URLs, then files. Supported file types include PDF, TXT, HTML, Markdown, and DOCX. Maximum file size is 25 MB.
curl --request POST \
--url https://api.sigmamind.ai/v1/knowledge-bases \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-Key: <api-key>' \
--form 'knowledge_base_files=<string>' \
--form knowledge_base_files.items='@example-file'import requests
url = "https://api.sigmamind.ai/v1/knowledge-bases"
files = { "knowledge_base_files.items": ("example-file", open("example-file", "rb")) }
payload = { "knowledge_base_files": "<string>" }
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('knowledge_base_files', '<string>');
form.append('knowledge_base_files.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
options.body = form;
fetch('https://api.sigmamind.ai/v1/knowledge-bases', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sigmamind.ai/v1/knowledge-bases",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sigmamind.ai/v1/knowledge-bases"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sigmamind.ai/v1/knowledge-bases")
.header("X-API-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sigmamind.ai/v1/knowledge-bases")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"knowledge_base_files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"kbId": "kb_6sbr3tbMX757M0VD",
"name": "Support FAQs",
"files": [
{
"documentId": "doc_a1b2c3d4e5f67890",
"type": "url",
"content": "https://docs.example.com/guide"
}
],
"createdAt": "2026-05-06T11:15:02.073Z",
"updatedAt": "2026-05-06T11:15:02.073Z"
}{
"error": "Bad Request",
"message": "Invalid request parameters",
"path": "/v1/knowledge-bases",
"status": 400,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Unauthorized",
"message": "X-API-Key is missing or invalid",
"path": "/v1/knowledge-bases",
"status": 401,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Forbidden",
"message": "Access denied for this resource",
"path": "/v1/knowledge-bases",
"status": 403,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Not Found",
"message": "The requested resource was not found",
"path": "/v1/knowledge-bases",
"status": 404,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Payload Too Large",
"message": "An uploaded file exceeds the per-file size limit (25 MB).",
"path": "/v1/knowledge-bases",
"status": 413,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Unsupported Media Type",
"message": "Uploaded file type is not supported. Allowed: PDF, TXT, HTML, Markdown, DOCX.",
"path": "/v1/knowledge-bases",
"status": 415,
"timestamp": "2026-05-14T14:27:21.959Z"
}{
"error": "Internal Server Error",
"message": "Something went wrong on the server",
"path": "/v1/knowledge-bases",
"status": 500,
"timestamp": "2026-05-14T14:27:21.959Z"
}Authorizations
Authenticate every request by passing your API key in the X-API-Key header. To get your key, go to Dashboard → API Keys and create or copy your Production API key.
Query Parameters
Name of the new knowledge base. Names do not need to be unique.
Optional. Send as one form field whose value is a JSON array string. Example: knowledge_base_texts=["Hello",{"title":"Q","text":"A"}]. Plain strings become text sources; objects may use title and/or text.
Optional. Send as one form field whose value is a JSON array of URL strings (not native repeated fields). Example: knowledge_base_urls=["https://example.com/docs"]. Each entry must be a URL string.
Body
Optional. Attach one or more files using the same field name repeated. Allowed file types: PDF, TXT, HTML, Markdown, DOCX. Max file size - 25 MB
Response
Created.
A knowledge base and its sources.
Use this id in the URL when fetching, updating, or deleting this knowledge base.
1 - 64"kb_6sbr3tbMX757M0VD"
Knowledge base name
512"Support FAQs"
Ordered sources; each item has documentId, type, and content.
Show child attributes
Show child attributes
When the knowledge base was created.
"2026-05-06T11:15:02.073Z"
When the knowledge base or its sources were last changed.
"2026-05-06T11:15:02.073Z"