curl --request POST \
--url https://{tenant}.app.big-panda.ai/api/knowledge/search/similar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"anchor_product_ids": [
"<string>"
],
"limit": 8,
"vector_field": "<string>",
"site_id": "<string>",
"language": "<string>",
"exclude_product_ids": [
"<string>"
]
}
'import requests
url = "https://{tenant}.app.big-panda.ai/api/knowledge/search/similar"
payload = {
"anchor_product_ids": ["<string>"],
"limit": 8,
"vector_field": "<string>",
"site_id": "<string>",
"language": "<string>",
"exclude_product_ids": ["<string>"]
}
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({
anchor_product_ids: ['<string>'],
limit: 8,
vector_field: '<string>',
site_id: '<string>',
language: '<string>',
exclude_product_ids: ['<string>']
})
};
fetch('https://{tenant}.app.big-panda.ai/api/knowledge/search/similar', 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://{tenant}.app.big-panda.ai/api/knowledge/search/similar",
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([
'anchor_product_ids' => [
'<string>'
],
'limit' => 8,
'vector_field' => '<string>',
'site_id' => '<string>',
'language' => '<string>',
'exclude_product_ids' => [
'<string>'
]
]),
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://{tenant}.app.big-panda.ai/api/knowledge/search/similar"
payload := strings.NewReader("{\n \"anchor_product_ids\": [\n \"<string>\"\n ],\n \"limit\": 8,\n \"vector_field\": \"<string>\",\n \"site_id\": \"<string>\",\n \"language\": \"<string>\",\n \"exclude_product_ids\": [\n \"<string>\"\n ]\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://{tenant}.app.big-panda.ai/api/knowledge/search/similar")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"anchor_product_ids\": [\n \"<string>\"\n ],\n \"limit\": 8,\n \"vector_field\": \"<string>\",\n \"site_id\": \"<string>\",\n \"language\": \"<string>\",\n \"exclude_product_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant}.app.big-panda.ai/api/knowledge/search/similar")
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 \"anchor_product_ids\": [\n \"<string>\"\n ],\n \"limit\": 8,\n \"vector_field\": \"<string>\",\n \"site_id\": \"<string>\",\n \"language\": \"<string>\",\n \"exclude_product_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"anchor_product_ids": [
"<string>"
],
"vector_field": "<string>",
"products": [
{
"id": "<string>",
"external_id": "<string>",
"title": "<string>",
"description": "<string>",
"short_description": "<string>",
"sku": "<string>",
"gtin": "<string>",
"brand": "<string>",
"category": "<string>",
"price_current": "<string>",
"price_msrp": "<string>",
"price_special": "<string>",
"price_on_request": true,
"currency": "<string>",
"image_url": "<string>",
"product_url": "<string>",
"availability": "<string>",
"rating_average": "<string>",
"rating_count": 123,
"language": "<string>",
"score": 123,
"score_sources": {}
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Similar Search
Find products similar to a set of anchor products.
User-triggered Find-Similar (Theme 4 / ADR-026): caller passes one or more anchor product IDs, gets back products closest to the centroid of their vectors.
Anchors must belong to the caller’s tenant (visibility filter is applied via tenant_id; the centroid is meaningless across tenants anyway).
curl --request POST \
--url https://{tenant}.app.big-panda.ai/api/knowledge/search/similar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"anchor_product_ids": [
"<string>"
],
"limit": 8,
"vector_field": "<string>",
"site_id": "<string>",
"language": "<string>",
"exclude_product_ids": [
"<string>"
]
}
'import requests
url = "https://{tenant}.app.big-panda.ai/api/knowledge/search/similar"
payload = {
"anchor_product_ids": ["<string>"],
"limit": 8,
"vector_field": "<string>",
"site_id": "<string>",
"language": "<string>",
"exclude_product_ids": ["<string>"]
}
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({
anchor_product_ids: ['<string>'],
limit: 8,
vector_field: '<string>',
site_id: '<string>',
language: '<string>',
exclude_product_ids: ['<string>']
})
};
fetch('https://{tenant}.app.big-panda.ai/api/knowledge/search/similar', 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://{tenant}.app.big-panda.ai/api/knowledge/search/similar",
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([
'anchor_product_ids' => [
'<string>'
],
'limit' => 8,
'vector_field' => '<string>',
'site_id' => '<string>',
'language' => '<string>',
'exclude_product_ids' => [
'<string>'
]
]),
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://{tenant}.app.big-panda.ai/api/knowledge/search/similar"
payload := strings.NewReader("{\n \"anchor_product_ids\": [\n \"<string>\"\n ],\n \"limit\": 8,\n \"vector_field\": \"<string>\",\n \"site_id\": \"<string>\",\n \"language\": \"<string>\",\n \"exclude_product_ids\": [\n \"<string>\"\n ]\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://{tenant}.app.big-panda.ai/api/knowledge/search/similar")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"anchor_product_ids\": [\n \"<string>\"\n ],\n \"limit\": 8,\n \"vector_field\": \"<string>\",\n \"site_id\": \"<string>\",\n \"language\": \"<string>\",\n \"exclude_product_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant}.app.big-panda.ai/api/knowledge/search/similar")
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 \"anchor_product_ids\": [\n \"<string>\"\n ],\n \"limit\": 8,\n \"vector_field\": \"<string>\",\n \"site_id\": \"<string>\",\n \"language\": \"<string>\",\n \"exclude_product_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"anchor_product_ids": [
"<string>"
],
"vector_field": "<string>",
"products": [
{
"id": "<string>",
"external_id": "<string>",
"title": "<string>",
"description": "<string>",
"short_description": "<string>",
"sku": "<string>",
"gtin": "<string>",
"brand": "<string>",
"category": "<string>",
"price_current": "<string>",
"price_msrp": "<string>",
"price_special": "<string>",
"price_on_request": true,
"currency": "<string>",
"image_url": "<string>",
"product_url": "<string>",
"availability": "<string>",
"rating_average": "<string>",
"rating_count": 123,
"language": "<string>",
"score": 123,
"score_sources": {}
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
API-Token aus dem Big-Panda-Admin-UI unter Einstellungen → API-Keys. Header: Authorization: Bearer <token>.
Headers
Space-separated scope set from the token (ADR-015)
Body
Find products similar to a set of anchor products.
User-triggered Find-Similar action (Theme 4) — caller passes anchor product IDs, gets back products closest to the centroid of their vectors in the configured anchor-vector space.
1 - 10 elements1 <= x <= 50description / properties / attributes / hybrid; default from tenant settings
IDs to exclude from the result (e.g. already shown)