curl --request POST \
--url https://api.mixpeek.com/v1/resources/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Namespace: <api-key>' \
--data @- <<EOF
{
"description": "Search all resources for 'product'",
"limit": 20,
"offset": 0,
"query": "product"
}
EOFimport requests
url = "https://api.mixpeek.com/v1/resources/search"
payload = {
"description": "Search all resources for 'product'",
"limit": 20,
"offset": 0,
"query": "product"
}
headers = {
"Authorization": "Bearer <token>",
"X-Namespace": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'X-Namespace': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
description: 'Search all resources for \'product\'',
limit: 20,
offset: 0,
query: 'product'
})
};
fetch('https://api.mixpeek.com/v1/resources/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://api.mixpeek.com/v1/resources/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([
'description' => 'Search all resources for \'product\'',
'limit' => 20,
'offset' => 0,
'query' => 'product'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Namespace: <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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/resources/search"
payload := strings.NewReader("{\n \"description\": \"Search all resources for 'product'\",\n \"limit\": 20,\n \"offset\": 0,\n \"query\": \"product\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("X-Namespace", "<api-key>")
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://api.mixpeek.com/v1/resources/search")
.header("Authorization", "Bearer <token>")
.header("X-Namespace", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Search all resources for 'product'\",\n \"limit\": 20,\n \"offset\": 0,\n \"query\": \"product\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/resources/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["X-Namespace"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Search all resources for 'product'\",\n \"limit\": 20,\n \"offset\": 0,\n \"query\": \"product\"\n}"
response = http.request(request)
puts response.read_body{
"description": "Successful search with multiple results",
"limit": 20,
"offset": 0,
"results": [
{
"created_at": "2024-01-15T10:30:00Z",
"description": "Production video content",
"resource_id": "bkt_prod123",
"resource_name": "production-videos",
"resource_type": "bucket",
"updated_at": "2024-01-20T14:22:00Z"
},
{
"created_at": "2024-02-01T08:15:00Z",
"description": "Product catalog embeddings",
"resource_id": "col_prod456",
"resource_name": "Product Embeddings",
"resource_type": "collection"
}
],
"total": 15
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Search Resources
Search across all resource names and IDs within your namespace.
This endpoint performs a case-insensitive search across:
- Buckets (bucket_name, bucket_id)
- Collections (collection_name, collection_id)
- Retrievers (retriever_name, retriever_id)
- Taxonomies (taxonomy_name, taxonomy_id)
- Clusters (cluster_name, cluster_id)
- Namespaces (namespace_name, namespace_id)
Results are sorted by relevance (exact matches first) and creation time (newest first). Use the resource_types parameter to filter searches to specific resource types. Pagination is supported via limit and offset parameters.
curl --request POST \
--url https://api.mixpeek.com/v1/resources/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Namespace: <api-key>' \
--data @- <<EOF
{
"description": "Search all resources for 'product'",
"limit": 20,
"offset": 0,
"query": "product"
}
EOFimport requests
url = "https://api.mixpeek.com/v1/resources/search"
payload = {
"description": "Search all resources for 'product'",
"limit": 20,
"offset": 0,
"query": "product"
}
headers = {
"Authorization": "Bearer <token>",
"X-Namespace": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'X-Namespace': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
description: 'Search all resources for \'product\'',
limit: 20,
offset: 0,
query: 'product'
})
};
fetch('https://api.mixpeek.com/v1/resources/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://api.mixpeek.com/v1/resources/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([
'description' => 'Search all resources for \'product\'',
'limit' => 20,
'offset' => 0,
'query' => 'product'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Namespace: <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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/resources/search"
payload := strings.NewReader("{\n \"description\": \"Search all resources for 'product'\",\n \"limit\": 20,\n \"offset\": 0,\n \"query\": \"product\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("X-Namespace", "<api-key>")
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://api.mixpeek.com/v1/resources/search")
.header("Authorization", "Bearer <token>")
.header("X-Namespace", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Search all resources for 'product'\",\n \"limit\": 20,\n \"offset\": 0,\n \"query\": \"product\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/resources/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["X-Namespace"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Search all resources for 'product'\",\n \"limit\": 20,\n \"offset\": 0,\n \"query\": \"product\"\n}"
response = http.request(request)
puts response.read_body{
"description": "Successful search with multiple results",
"limit": 20,
"offset": 0,
"results": [
{
"created_at": "2024-01-15T10:30:00Z",
"description": "Production video content",
"resource_id": "bkt_prod123",
"resource_name": "production-videos",
"resource_type": "bucket",
"updated_at": "2024-01-20T14:22:00Z"
},
{
"created_at": "2024-02-01T08:15:00Z",
"description": "Product catalog embeddings",
"resource_id": "col_prod456",
"resource_name": "Product Embeddings",
"resource_type": "collection"
}
],
"total": 15
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Authorizations
Mixpeek API key, sent as Authorization: Bearer mxp_sk_.... Create one in Studio under Settings → API Keys, or with an admin key via POST /v1/organizations/users/{user_email}/api-keys. A missing header returns 403; an invalid or revoked key returns 401.
Namespace id (ns_...), not the namespace name. This scopes the request rather than authenticating it, and it is required on every operation marked x-mixpeek-namespace-scoped.
Body
Request model for searching across resource names and IDs.
Search is performed across all resource types within the authenticated namespace. The search is case-insensitive and supports partial matching on both names and IDs.
Use Cases: - Find resources by partial name match - Locate resources by ID prefix - Filter search to specific resource types - Paginate through large result sets
Requirements: - query: REQUIRED - Search term (minimum 1 character) - resource_types: OPTIONAL - Filter by specific types - limit: OPTIONAL - Results per page (1-100, default 20) - offset: OPTIONAL - Pagination offset (default 0)
Search term to match against resource names and IDs. REQUIRED. Minimum 1 character. Case-insensitive partial matching is performed. Matches against: bucket_name, bucket_id, collection_name, collection_id, retriever_name, retriever_id, taxonomy_name, taxonomy_id, cluster_name, cluster_id, namespace_name, namespace_id. Example: 'prod' matches 'production-videos', 'bkt_prod123', 'Products Collection'.
1"product"
"bkt_"
"video"
"prod"
Filter search to specific resource types. OPTIONAL - If not provided, searches all resource types. Valid values: 'bucket', 'collection', 'retriever', 'taxonomy', 'cluster', 'published_retriever', 'namespace'. Example: ['bucket', 'collection'] searches only buckets and collections.
bucket, collection, retriever, taxonomy, cluster, published_retriever, namespace ["bucket", "collection"]
Maximum number of results to return. OPTIONAL - Defaults to 20. Minimum: 1, Maximum: 100. Use with offset for pagination.
1 <= x <= 10020
50
100
Number of results to skip for pagination. OPTIONAL - Defaults to 0. Minimum: 0. Use with limit for pagination. Example: offset=20 with limit=20 returns results 21-40.
x >= 00
20
40
Response
Successful Response
Response model for resource search results.
Contains paginated search results with metadata about total matches and pagination state. Results are sorted by relevance (exact matches first, then partial matches) and creation time (newest first).
Use Cases: - Display search results to users - Implement pagination UI - Show total result counts - Navigate through large result sets
Fields: - results: List of matched resources - total: Total number of matches (before pagination) - limit: Results per page (from request) - offset: Current pagination offset (from request)
List of matched resources. REQUIRED. May be empty if no matches found. Sorted by: 1) Exact matches first, 2) Partial matches, 3) Created timestamp descending. Length is min(total - offset, limit). Each result contains full resource metadata for display.
Show child attributes
Show child attributes
[
{
"created_at": "2024-01-15T10:30:00Z",
"description": "Product catalog",
"resource_id": "bkt_abc123",
"resource_name": "products",
"resource_type": "bucket"
}
]
[]
Total number of matches across all pages. REQUIRED. Count before pagination is applied. Use to calculate total pages: ceil(total / limit). May be 0 if no matches found. Example: total=50 with limit=20 means 3 pages of results.
x >= 00
15
100
Results per page (from request). REQUIRED. Echo of the limit parameter from the request. Range: 1-100.
1 <= x <= 10020
50
100
Current pagination offset (from request). REQUIRED. Echo of the offset parameter from the request. Number of results skipped. Example: offset=20 means results start from the 21st match.
x >= 00
20
40
Was this page helpful?

