curl --request POST \
--url https://api.mixpeek.com/v1/buckets/list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Namespace: <api-key>' \
--data '
{
"limit": 500,
"page_size": 500,
"offset": 5000,
"page": 2,
"search": "<string>",
"filters": {},
"sort": {},
"sorts": [
{}
],
"case_sensitive": false
}
'import requests
url = "https://api.mixpeek.com/v1/buckets/list"
payload = {
"limit": 500,
"page_size": 500,
"offset": 5000,
"page": 2,
"search": "<string>",
"filters": {},
"sort": {},
"sorts": [{}],
"case_sensitive": False
}
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({
limit: 500,
page_size: 500,
offset: 5000,
page: 2,
search: '<string>',
filters: {},
sort: {},
sorts: [{}],
case_sensitive: false
})
};
fetch('https://api.mixpeek.com/v1/buckets/list', 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/buckets/list",
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([
'limit' => 500,
'page_size' => 500,
'offset' => 5000,
'page' => 2,
'search' => '<string>',
'filters' => [
],
'sort' => [
],
'sorts' => [
[
]
],
'case_sensitive' => false
]),
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/buckets/list"
payload := strings.NewReader("{\n \"limit\": 500,\n \"page_size\": 500,\n \"offset\": 5000,\n \"page\": 2,\n \"search\": \"<string>\",\n \"filters\": {},\n \"sort\": {},\n \"sorts\": [\n {}\n ],\n \"case_sensitive\": false\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/buckets/list")
.header("Authorization", "Bearer <token>")
.header("X-Namespace", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"limit\": 500,\n \"page_size\": 500,\n \"offset\": 5000,\n \"page\": 2,\n \"search\": \"<string>\",\n \"filters\": {},\n \"sort\": {},\n \"sorts\": [\n {}\n ],\n \"case_sensitive\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/buckets/list")
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 \"limit\": 500,\n \"page_size\": 500,\n \"offset\": 5000,\n \"page\": 2,\n \"search\": \"<string>\",\n \"filters\": {},\n \"sort\": {},\n \"sorts\": [\n {}\n ],\n \"case_sensitive\": false\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"bucket_name": "<string>",
"object_count": 123,
"total_size_bytes": 123,
"bucket_id": "<string>",
"description": "<string>",
"bucket_schema": {
"properties": {}
},
"unique_key": {
"default_policy": "upsert",
"fields": [
"video_id"
]
},
"metadata": {},
"storage_class": "standard",
"destination": {
"connection_id": "<string>",
"prefix": ""
},
"ingest_filter": {
"retriever_id": "ret_ab12cd34ef56",
"retriever_version": 1,
"action": "keep",
"on_error": "keep",
"timeout_seconds": 30
},
"failed_object_count": 0,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"last_upload_at": "2023-11-07T05:31:56Z",
"stats_updated_at": "2023-11-07T05:31:56Z",
"status": "ACTIVE",
"is_locked": false,
"batch_stats": {
"total": 0,
"active": 0,
"completed": 0,
"failed": 0
},
"storage_stats": {
"total_size_bytes": 0,
"avg_size_bytes": 0,
"max_size_bytes": 0,
"min_size_bytes": 0
},
"source_adapter": {}
}
],
"total_count": 123,
"pagination": {
"total": 123,
"page": 123,
"page_size": 123,
"total_pages": 123,
"next_page": "<string>",
"previous_page": "<string>",
"next_cursor": "<string>"
},
"stats": {
"total_objects": 0,
"total_size_bytes": 0,
"avg_objects_per_bucket": 0,
"avg_size_per_bucket": 0
},
"warnings": [
{
"resource": "taxonomy",
"reason": "not found in namespace",
"next_step": "Fix the taxonomy_id on the stage, or create the taxonomy.",
"id": "tax_abc123",
"stage": "<string>"
}
]
}{
"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
}{
"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
}List Buckets
This endpoint lists buckets with pagination, sorting, and filtering options.
curl --request POST \
--url https://api.mixpeek.com/v1/buckets/list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Namespace: <api-key>' \
--data '
{
"limit": 500,
"page_size": 500,
"offset": 5000,
"page": 2,
"search": "<string>",
"filters": {},
"sort": {},
"sorts": [
{}
],
"case_sensitive": false
}
'import requests
url = "https://api.mixpeek.com/v1/buckets/list"
payload = {
"limit": 500,
"page_size": 500,
"offset": 5000,
"page": 2,
"search": "<string>",
"filters": {},
"sort": {},
"sorts": [{}],
"case_sensitive": False
}
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({
limit: 500,
page_size: 500,
offset: 5000,
page: 2,
search: '<string>',
filters: {},
sort: {},
sorts: [{}],
case_sensitive: false
})
};
fetch('https://api.mixpeek.com/v1/buckets/list', 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/buckets/list",
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([
'limit' => 500,
'page_size' => 500,
'offset' => 5000,
'page' => 2,
'search' => '<string>',
'filters' => [
],
'sort' => [
],
'sorts' => [
[
]
],
'case_sensitive' => false
]),
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/buckets/list"
payload := strings.NewReader("{\n \"limit\": 500,\n \"page_size\": 500,\n \"offset\": 5000,\n \"page\": 2,\n \"search\": \"<string>\",\n \"filters\": {},\n \"sort\": {},\n \"sorts\": [\n {}\n ],\n \"case_sensitive\": false\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/buckets/list")
.header("Authorization", "Bearer <token>")
.header("X-Namespace", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"limit\": 500,\n \"page_size\": 500,\n \"offset\": 5000,\n \"page\": 2,\n \"search\": \"<string>\",\n \"filters\": {},\n \"sort\": {},\n \"sorts\": [\n {}\n ],\n \"case_sensitive\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/buckets/list")
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 \"limit\": 500,\n \"page_size\": 500,\n \"offset\": 5000,\n \"page\": 2,\n \"search\": \"<string>\",\n \"filters\": {},\n \"sort\": {},\n \"sorts\": [\n {}\n ],\n \"case_sensitive\": false\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"bucket_name": "<string>",
"object_count": 123,
"total_size_bytes": 123,
"bucket_id": "<string>",
"description": "<string>",
"bucket_schema": {
"properties": {}
},
"unique_key": {
"default_policy": "upsert",
"fields": [
"video_id"
]
},
"metadata": {},
"storage_class": "standard",
"destination": {
"connection_id": "<string>",
"prefix": ""
},
"ingest_filter": {
"retriever_id": "ret_ab12cd34ef56",
"retriever_version": 1,
"action": "keep",
"on_error": "keep",
"timeout_seconds": 30
},
"failed_object_count": 0,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"last_upload_at": "2023-11-07T05:31:56Z",
"stats_updated_at": "2023-11-07T05:31:56Z",
"status": "ACTIVE",
"is_locked": false,
"batch_stats": {
"total": 0,
"active": 0,
"completed": 0,
"failed": 0
},
"storage_stats": {
"total_size_bytes": 0,
"avg_size_bytes": 0,
"max_size_bytes": 0,
"min_size_bytes": 0
},
"source_adapter": {}
}
],
"total_count": 123,
"pagination": {
"total": 123,
"page": 123,
"page_size": 123,
"total_pages": 123,
"next_page": "<string>",
"previous_page": "<string>",
"next_cursor": "<string>"
},
"stats": {
"total_objects": 0,
"total_size_bytes": 0,
"avg_objects_per_bucket": 0,
"avg_size_per_bucket": 0
},
"warnings": [
{
"resource": "taxonomy",
"reason": "not found in namespace",
"next_step": "Fix the taxonomy_id on the stage, or create the taxonomy.",
"id": "tax_abc123",
"stage": "<string>"
}
]
}{
"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
}{
"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
}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, malformed, unknown, revoked, inactive or expired key returns 401; a key without the permission, scope or plan an operation needs returns 403.
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.
Query Parameters
1 <= x <= 10001 <= x <= 10000 <= x <= 10000x >= 1Body
Keys this body does not declare are ignored, and the response's warnings name them, until 2026-11-02; from 2026-11-02 they are refused with 422 extra_forbidden naming the accepted keys.
Request model for listing buckets.
Inherits body-level limit/page_size/offset/page. The old hardcoded limit=10/offset=0 defaults moved to the controller so an unset body field can fall back to query-string pagination (body wins when set).
Page size. A body value wins over the limit query param.
1 <= x <= 1000Alias for limit (page size). If both are given, limit wins.
1 <= x <= 1000Number of results to skip (legacy, use cursor instead). A body value wins over the offset query param.
0 <= x <= 100001-indexed page number. Folds to offset = (page-1) * limit. If both page and offset are given, offset wins.
x >= 1Search term for wildcard search across bucket_id, bucket_name, description, and other text fields
Filters to apply to the bucket list. Supports filtering by bucket_id or bucket_name.
Sort options for the bucket list (single-column, legacy)
Sort options for the bucket list as a list of {field, direction} — the shape Studio datatables and the retriever list send. The first entry is the primary sort. Takes precedence over the singular sort.
If True, filters and search will be case-sensitive
Response
Successful Response
Response model for listing buckets.
Show child attributes
Show child attributes
Total number of buckets matching the query
PaginationResponse.
Cursor-based pagination response:
- Use next_cursor for navigation
- Total count fields only populated when include_total=true
Show child attributes
Show child attributes
Aggregate statistics across all buckets in the result
Show child attributes
Show child attributes
Why this page may not be the whole answer. An entry with resource 'namespace' and reason 'unresolved' means X-Namespace did not resolve for this API key, so the empty list is not that namespace's contents (the same condition as the X-Namespace-Unresolved response header). Empty when the namespace resolved.
Show child attributes
Show child attributes
Was this page helpful?

