hub Vector Search Developer API

Semantic Search Bridge

Connect modern AI models, custom GPTs, and autonomous agents directly with the zeelproject.com catalog via high-speed semantic search.

manage_search API Specification (Text Search)

To run a text-based semantic search query, send an HTTP GET request to the search endpoint:

GET https://api.zeelproject.com/v1/?q={query}&page={page}&limit={limit}&lang={lang}&type={type}

Request Parameters

Parameter Type Status Description
q string Required* The search text query (e.g. modern sofa). *Optional only when performing image search via POST. Can be combined with image search for hybrid results.
page integer Optional Page number for pagination. Default: 1.
limit integer Optional Quantity of results per page. Clamped from 5 to 40 (default: 5).
lang string Optional Output language translations. Supported: en, ru, hy, fr, de, it, es, zh (default: en).
score float Optional Similarity score threshold filtering (from 0.0 to 1.0, default: 0.0 / disabled).
type string Multi Content type filter: product (3D Models + Textures), model, scene, texture, set. Supports comma-separated multi-filtering (e.g. model,texture). Omit to search all types.

camera_enhance Visual Search (Image, URL, or Base64)

Search the catalog visually using reference images. Built for AI models, agents, and modern apps with multiple flexible input methods:

GET https://api.zeelproject.com/v1/?image_url={url}&page={page}&limit={limit}&lang={lang}&type={type}

How Image Search Works

1

Send Image

Provide a public image_url, an uploaded image file, or image_base64.

2

CLIP Encoding

Image is processed through CLIP visual encoder to compute a high-dimensional embedding vector.

3

Qdrant Matching

Vector is matched in the vector database using Cosine similarity metric in milliseconds.

4

Data Enrichment

Results are enriched from SQL database with verified titles, prices, image URLs, and model links.

Visual Search Parameters

Parameter Type / Method Status Description
image_url string (URL) • GET / POST Supported Public URL of reference image (Recommended for ChatGPT & Gemini Actions).
image (or file) file (binary) • POST multipart Supported Direct binary file upload (supports JPEG, PNG, WebP).
image_base64 string (Base64) • POST JSON Supported Base64-encoded image string in JSON payload.
q string • GET / POST Hybrid Optional text query to combine with image for hybrid image+text search. Vectors are averaged and normalized.

terminal Interactive Sandbox

Run test queries live and inspect the structured JSON response payload below.

output.json
Idle
// Responses will be displayed here in pretty-printed JSON...
Gateway: api.zeelproject.com Format: JSON (UTF-8)

integration_instructions Integration Code Snippets

Select your language to view ready-to-use code snippets for query integration:

1. Text Search Integration (HTTP GET)

curl -G "https://api.zeelproject.com/v1/" \
  --data-urlencode "q=modern sofa" \
  -d "page=1" \
  -d "limit=5" \
  -d "lang=en" \
  -d "score=0.295" \
  -d "type=product"
const url = new URL("https://api.zeelproject.com/v1/");
url.searchParams.append("q", "modern sofa");
url.searchParams.append("page", "1");
url.searchParams.append("limit", "5");
url.searchParams.append("lang", "en");
url.searchParams.append("score", "0.295");
url.searchParams.append("type", "product");

fetch(url)
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));
import requests

url = "https://api.zeelproject.com/v1/"
params = {
    "q": "modern sofa",
    "page": 1,
    "limit": 5,
    "lang": "en",
    "score": 0.295,
    "type": "product"
}

response = requests.get(url, params=params)
print(response.json())
<?php
$url = "https://api.zeelproject.com/v1/?" . http_build_query([
    "q" => "modern sofa",
    "page" => 1,
    "limit" => 5,
    "lang" => "en",
    "score" => 0.295,
    "type" => "product"
]);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);

print_r($data);
?>

2. Visual & Hybrid Search Integration (URL, File Upload, Base64 & Combo)

# Option 1: Image URL (GET - Supports optional 'q' for hybrid search)
curl -G "https://api.zeelproject.com/v1/" \
  --data-urlencode "image_url=https://example.com/photo.jpg" \
  --data-urlencode "q=red modern armchair" \
  -d "limit=5" \
  -d "type=model,texture"

# Option 2: Direct File Upload (POST multipart/form-data + optional 'q')
curl -X POST "https://api.zeelproject.com/v1/?q=red+modern+armchair&limit=5&type=product" \
  -F "image=@/path/to/photo.jpg"

# Option 3: Base64 JSON Payload (POST application/json + optional 'q')
curl -X POST "https://api.zeelproject.com/v1/" \
  -H "Content-Type: application/json" \
  -d '{"image_base64": "data:image/jpeg;base64,...", "q": "red modern armchair", "limit": 5, "type": "product"}'
// Option 1: Search by Image URL (GET + Optional Text)
const url = new URL("https://api.zeelproject.com/v1/");
url.searchParams.append("image_url", "https://example.com/photo.jpg");
url.searchParams.append("q", "red modern armchair"); // Optional hybrid text prompt
url.searchParams.append("limit", "5");
url.searchParams.append("type", "model,texture");
const resUrl = await fetch(url).then(r => r.json());

// Option 2: Direct File Upload (POST FormData + Optional Text)
const formData = new FormData();
formData.append("image", fileInput.files[0]);
const resFile = await fetch("https://api.zeelproject.com/v1/?q=red+modern+armchair&limit=5&type=product", {
  method: "POST",
  body: formData
}).then(r => r.json());

// Option 3: Base64 JSON Payload (POST JSON + Optional Text)
const resB64 = await fetch("https://api.zeelproject.com/v1/", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    image_base64: "data:image/jpeg;base64,...",
    q: "red modern armchair", // Optional hybrid text prompt
    limit: 5,
    type: "product"
  })
}).then(r => r.json());
import requests

# Option 1: Search by Image URL (GET + Optional Text)
res_url = requests.get("https://api.zeelproject.com/v1/", params={
    "image_url": "https://example.com/photo.jpg",
    "q": "red modern armchair", # Optional hybrid text prompt
    "limit": 5,
    "type": "model,texture"
})
print(res_url.json())

# Option 2: Direct File Upload (POST multipart + Optional Text)
with open("photo.jpg", "rb") as f:
    res_file = requests.post(
        "https://api.zeelproject.com/v1/",
        params={"q": "red modern armchair", "limit": 5, "type": "product"},
        files={"image": f}
    )
print(res_file.json())

# Option 3: Base64 JSON (POST application/json + Optional Text)
res_b64 = requests.post("https://api.zeelproject.com/v1/", json={
    "image_base64": "data:image/jpeg;base64,...",
    "q": "red modern armchair", # Optional hybrid text prompt
    "limit": 5,
    "type": "product"
})
print(res_b64.json())
<?php
// Option 1: Search by Image URL (GET + Optional Text)
$url = "https://api.zeelproject.com/v1/?" . http_build_query([
    "image_url" => "https://example.com/photo.jpg",
    "q"         => "red modern armchair", // Optional hybrid text prompt
    "limit"     => 5,
    "type"      => "model,texture"
]);
$data_url = json_decode(file_get_contents($url), true);

// Option 2: Direct File Upload (POST with CURLFile + Optional Text)
$ch = curl_init("https://api.zeelproject.com/v1/?q=" . urlencode("red modern armchair") . "&limit=5&type=product");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
    "image" => new CURLFile("/path/to/photo.jpg", "image/jpeg", "photo.jpg")
]);
$data_file = json_decode(curl_exec($ch), true);
curl_close($ch);

// Option 3: Base64 JSON Payload (POST JSON + Optional Text)
$ch = curl_init("https://api.zeelproject.com/v1/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    "image_base64" => "data:image/jpeg;base64,...",
    "q"            => "red modern armchair", // Optional hybrid text prompt
    "limit"        => 5,
    "type"         => "product"
]));
$data_b64 = json_decode(curl_exec($ch), true);
curl_close($ch);
?>