curl --request POST \
--url https://{subdomain}.mihu.ai/api/v1/knowledge-base/{uuid}/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "What is the price of the Peugeot 3008?",
"limit": 5,
"min_score": 0.35,
"page": 1,
"per_page": 15
}
'import requests
url = "https://{subdomain}.mihu.ai/api/v1/knowledge-base/{uuid}/search"
payload = {
"query": "What is the price of the Peugeot 3008?",
"limit": 5,
"min_score": 0.35,
"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,
min_score: 0.35,
page: 1,
per_page: 15
})
};
fetch('https://{subdomain}.mihu.ai/api/v1/knowledge-base/{uuid}/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/{uuid}/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,
'min_score' => 0.35,
'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/{uuid}/search"
payload := strings.NewReader("{\n \"query\": \"What is the price of the Peugeot 3008?\",\n \"limit\": 5,\n \"min_score\": 0.35,\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/{uuid}/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 \"min_score\": 0.35,\n \"page\": 1,\n \"per_page\": 15\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/knowledge-base/{uuid}/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 \"min_score\": 0.35,\n \"page\": 1,\n \"per_page\": 15\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Search completed",
"data": {
"table_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"table_name": "cars",
"query": "<string>",
"results": [
{
"content": "<string>",
"score": 0.72
}
]
},
"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": 3,
"total_pages": 1,
"current_page": 1,
"last_page": 1,
"count": 3,
"first_page_url": "<string>",
"last_page_url": "<string>",
"next_page_url": "<string>",
"prev_page_url": "<string>",
"has_more_pages": true
}
}Search inside a single knowledge table
Semantic search with relevance reranking limited to one knowledge table, identified by its uuid (the Knowledge Id shown on the table page). The table must be indexed for search (synced, or added to general search).
curl --request POST \
--url https://{subdomain}.mihu.ai/api/v1/knowledge-base/{uuid}/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "What is the price of the Peugeot 3008?",
"limit": 5,
"min_score": 0.35,
"page": 1,
"per_page": 15
}
'import requests
url = "https://{subdomain}.mihu.ai/api/v1/knowledge-base/{uuid}/search"
payload = {
"query": "What is the price of the Peugeot 3008?",
"limit": 5,
"min_score": 0.35,
"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,
min_score: 0.35,
page: 1,
per_page: 15
})
};
fetch('https://{subdomain}.mihu.ai/api/v1/knowledge-base/{uuid}/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/{uuid}/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,
'min_score' => 0.35,
'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/{uuid}/search"
payload := strings.NewReader("{\n \"query\": \"What is the price of the Peugeot 3008?\",\n \"limit\": 5,\n \"min_score\": 0.35,\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/{uuid}/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 \"min_score\": 0.35,\n \"page\": 1,\n \"per_page\": 15\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/knowledge-base/{uuid}/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 \"min_score\": 0.35,\n \"page\": 1,\n \"per_page\": 15\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Search completed",
"data": {
"table_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"table_name": "cars",
"query": "<string>",
"results": [
{
"content": "<string>",
"score": 0.72
}
]
},
"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": 3,
"total_pages": 1,
"current_page": 1,
"last_page": 1,
"count": 3,
"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}"
Path Parameters
Body
"What is the price of the Peugeot 3008?"
1 <= x <= 205
0 <= x <= 10.35
Page of the matched rows
x >= 11
Matched rows per page
1 <= x <= 10015
Response
Search results
true
"Search completed"
The excerpt view: the text chunks that matched.
Show child attributes
Show child attributes
The table's columns in schema order — same shape as the records listing, so matches can be rendered in the same grid.
Show child attributes
Show child attributes
The matched records as table rows, best match first, keyed by column name. A record that produced several matching chunks appears once, scored by its best chunk. 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 the whole table. next_page_url points at this same POST endpoint — resend the body with it.
Show child attributes
Show child attributes