curl --request POST \
--url https://{subdomain}.mihu.ai/api/v1/knowledge-base/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "What is the price of the Peugeot 3008?",
"limit": 5,
"table_uuids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"page": 1,
"per_page": 15
}
'import requests
url = "https://{subdomain}.mihu.ai/api/v1/knowledge-base/search"
payload = {
"query": "What is the price of the Peugeot 3008?",
"limit": 5,
"table_uuids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"page": 1,
"per_page": 15
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'What is the price of the Peugeot 3008?',
limit: 5,
table_uuids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
page: 1,
per_page: 15
})
};
fetch('https://{subdomain}.mihu.ai/api/v1/knowledge-base/search', 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://{subdomain}.mihu.ai/api/v1/knowledge-base/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'What is the price of the Peugeot 3008?',
'limit' => 5,
'table_uuids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'page' => 1,
'per_page' => 15
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://{subdomain}.mihu.ai/api/v1/knowledge-base/search"
payload := strings.NewReader("{\n \"query\": \"What is the price of the Peugeot 3008?\",\n \"limit\": 5,\n \"table_uuids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"page\": 1,\n \"per_page\": 15\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{subdomain}.mihu.ai/api/v1/knowledge-base/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"What is the price of the Peugeot 3008?\",\n \"limit\": 5,\n \"table_uuids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"page\": 1,\n \"per_page\": 15\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/knowledge-base/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"What is the price of the Peugeot 3008?\",\n \"limit\": 5,\n \"table_uuids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"page\": 1,\n \"per_page\": 15\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Search completed",
"data": {
"query": "<string>",
"results": [
{
"content": "<string>",
"score": 0.72,
"table_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
},
"tables": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "cars",
"fields": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "brand",
"data_type": "text"
}
]
}
],
"rows": [
{
"score": 0.72,
"table_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"record_id": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"pagination": {
"page": 1,
"per_page": 15,
"total": 5,
"total_pages": 1,
"current_page": 1,
"last_page": 1,
"count": 5,
"first_page_url": "<string>",
"last_page_url": "<string>",
"next_page_url": "<string>",
"prev_page_url": "<string>",
"has_more_pages": true
}
}Search the whole workspace knowledge base
Semantic search with relevance reranking across every knowledge table in the workspace — including tables not attached to any agent. Use table_uuids to limit the search to specific tables.
curl --request POST \
--url https://{subdomain}.mihu.ai/api/v1/knowledge-base/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "What is the price of the Peugeot 3008?",
"limit": 5,
"table_uuids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"page": 1,
"per_page": 15
}
'import requests
url = "https://{subdomain}.mihu.ai/api/v1/knowledge-base/search"
payload = {
"query": "What is the price of the Peugeot 3008?",
"limit": 5,
"table_uuids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"page": 1,
"per_page": 15
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'What is the price of the Peugeot 3008?',
limit: 5,
table_uuids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
page: 1,
per_page: 15
})
};
fetch('https://{subdomain}.mihu.ai/api/v1/knowledge-base/search', 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://{subdomain}.mihu.ai/api/v1/knowledge-base/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'What is the price of the Peugeot 3008?',
'limit' => 5,
'table_uuids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'page' => 1,
'per_page' => 15
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://{subdomain}.mihu.ai/api/v1/knowledge-base/search"
payload := strings.NewReader("{\n \"query\": \"What is the price of the Peugeot 3008?\",\n \"limit\": 5,\n \"table_uuids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"page\": 1,\n \"per_page\": 15\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{subdomain}.mihu.ai/api/v1/knowledge-base/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"What is the price of the Peugeot 3008?\",\n \"limit\": 5,\n \"table_uuids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"page\": 1,\n \"per_page\": 15\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/knowledge-base/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"What is the price of the Peugeot 3008?\",\n \"limit\": 5,\n \"table_uuids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"page\": 1,\n \"per_page\": 15\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Search completed",
"data": {
"query": "<string>",
"results": [
{
"content": "<string>",
"score": 0.72,
"table_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
},
"tables": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "cars",
"fields": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "brand",
"data_type": "text"
}
]
}
],
"rows": [
{
"score": 0.72,
"table_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"record_id": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"pagination": {
"page": 1,
"per_page": 15,
"total": 5,
"total_pages": 1,
"current_page": 1,
"last_page": 1,
"count": 5,
"first_page_url": "<string>",
"last_page_url": "<string>",
"next_page_url": "<string>",
"prev_page_url": "<string>",
"has_more_pages": true
}
}Authorizations
Use a Bearer token to access these API endpoints. Example: "Bearer {your-token}"
Body
Response
Search results
true
"Search completed"
The excerpt view: the text chunks that matched.
Show child attributes
Show child attributes
Schema of every table the matches came from. Matches can span tables here, so each row names its table instead of there being one shared header row.
Show child attributes
Show child attributes
The matched records as table rows, best match first, keyed by column name. Use table_uuid to pick the matching schema from tables. Records deleted since the last index are omitted.
Show child attributes
Show child attributes
Page state over the matched rows. Search returns a ranked top-N (see limit), so this pages that result set rather than every table. next_page_url points at this same POST endpoint — resend the body with it.
Show child attributes
Show child attributes