curl --request GET \
--url https://{your-subdomain}.neetokb.com/api/external/v2/search \
--header 'X-Api-Key: <x-api-key>'import requests
url = "https://{your-subdomain}.neetokb.com/api/external/v2/search"
headers = {"X-Api-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<x-api-key>'}};
fetch('https://{your-subdomain}.neetokb.com/api/external/v2/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://{your-subdomain}.neetokb.com/api/external/v2/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <x-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"
"net/http"
"io"
)
func main() {
url := "https://{your-subdomain}.neetokb.com/api/external/v2/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{your-subdomain}.neetokb.com/api/external/v2/search")
.header("X-Api-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{your-subdomain}.neetokb.com/api/external/v2/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"matches": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "https://spinkart.neetokb.com/articles/billing-and-invoices",
"title": "Billing and invoices",
"category": "Getting Started",
"category_url": "https://spinkart.neetokb.com/folders/getting-started",
"matched_title": "<span class=article-matched-tag>Billing</span> and invoices",
"matched_content": "Your <span class=article-matched-tag>billing</span> cycle starts on the day you subscribe.",
"matched_category": null
}
],
"pagination": {
"total_records": 123,
"total_pages": 123,
"current_page_number": 123,
"page_size": 123
}
}Search articles
This API runs a full-text search across the workspace’s published articles. Results are ranked by relevance, with the title weighted highest, then content, slug, category name, and keywords. Each match includes highlighted snippets showing where the search term appears.
curl --request GET \
--url https://{your-subdomain}.neetokb.com/api/external/v2/search \
--header 'X-Api-Key: <x-api-key>'import requests
url = "https://{your-subdomain}.neetokb.com/api/external/v2/search"
headers = {"X-Api-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<x-api-key>'}};
fetch('https://{your-subdomain}.neetokb.com/api/external/v2/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://{your-subdomain}.neetokb.com/api/external/v2/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <x-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"
"net/http"
"io"
)
func main() {
url := "https://{your-subdomain}.neetokb.com/api/external/v2/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{your-subdomain}.neetokb.com/api/external/v2/search")
.header("X-Api-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{your-subdomain}.neetokb.com/api/external/v2/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"matches": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "https://spinkart.neetokb.com/articles/billing-and-invoices",
"title": "Billing and invoices",
"category": "Getting Started",
"category_url": "https://spinkart.neetokb.com/folders/getting-started",
"matched_title": "<span class=article-matched-tag>Billing</span> and invoices",
"matched_content": "Your <span class=article-matched-tag>billing</span> cycle starts on the day you subscribe.",
"matched_category": null
}
],
"pagination": {
"total_records": 123,
"total_pages": 123,
"current_page_number": 123,
"page_size": 123
}
}{your-subdomain} with your workspace’s subdomain. Learn how to find your subdomain in Workspace subdomain.
Headers
Use the X-Api-Key header to provide your workspace API key. Refer to Authentication for more information.
Query Parameters
The text to search for. Matching is performed from the start of each word.
"billing"
Retrieve paginated results by specifying the desired page number. Defaulting to 1 when omitted.
Set the number of results returned in the response. Defaulting to 30 when omitted.
Response
OK - Request succeeded
Hide child attributes
Hide child attributes
"https://spinkart.neetokb.com/articles/billing-and-invoices"
"Billing and invoices"
"Getting Started"
"https://spinkart.neetokb.com/folders/getting-started"
The article's title with the matched term wrapped in <span class=article-matched-tag>. Null when the term did not match the title.
"<span class=article-matched-tag>Billing</span> and invoices"
A fragment of the article's content with the matched term wrapped in <span class=article-matched-tag>. Null when the term did not match the content.
"Your <span class=article-matched-tag>billing</span> cycle starts on the day you subscribe."
The category name with the matched term wrapped in <span class=article-matched-tag>. Null when the term did not match the category.
null