curl --request POST \
--url https://api.mixpeek.com/v1/retrievers/{retriever_id}/publish \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'X-Namespace: <x-namespace>' \
--data @- <<EOF
{
"public_name": "<string>",
"display_config": {
"title": "<string>",
"inputs": [
{
"field_name": "<string>",
"field_schema": {
"type": "string",
"default": "<unknown>",
"items": "<unknown>",
"properties": {},
"examples": [
"<unknown>"
],
"description": "<string>",
"enum": [
"<unknown>"
],
"required": false
},
"label": "<string>",
"placeholder": "Enter search terms...",
"helper_text": "Describe the aesthetic, outfit, or vibe you're looking for",
"suggestions": [
"streetwear urban",
"clean girl minimal",
"summer haul bright"
],
"required": true,
"order": 0
}
],
"exposed_fields": [
"<string>"
],
"description": "Search through thousands of products",
"logo_url": "https://example.com/logo.png",
"og_image_url": "https://s3.amazonaws.com/mixpeek-server-dev/org123/ns456/public-retriever-og-images/video-search/og.png",
"markdowns": [
{
"title": "<string>",
"content": "<string>"
}
],
"theme": {
"primary_color": "#007AFF",
"secondary_color": "#FF6B6B",
"font_family": "system-ui, -apple-system, sans-serif",
"background_color": "#FFFFFF",
"text_color": "#000000"
},
"layout": {
"mode": "grid",
"columns": 3,
"gap": "16px"
},
"components": {
"show_search": true,
"show_filters": false,
"result_layout": "grid",
"result_card": {
"layout": "vertical",
"show_thumbnail": true,
"thumbnail_aspect_ratio": "16/9",
"thumbnail_fit": "cover",
"show_score": false,
"truncate_title": 60,
"truncate_description": 120,
"field_order": [
"<string>"
]
}
},
"field_config": {}
},
"rate_limit_config": {
"enabled": true,
"tier": "standard",
"requests_per_minute": 2,
"requests_per_hour": 2,
"requests_per_day": 2,
"max_results_per_query": 100,
"enable_ip_limits": false,
"max_requests_per_ip_hour": 2
},
"password_secret_name": "published_retriever_password",
"include_metadata": true
}
EOF{
"public_id": "<string>",
"retriever_id": "<string>",
"public_url": "<string>",
"short_url": "<string>",
"public_api_key": "<string>"
}Publish a retriever as a public search interface.
Creates a public API endpoint and branded page for the retriever. Returns a public API key that should be stored securely (shown only once).
Limits:
Security:
curl --request POST \
--url https://api.mixpeek.com/v1/retrievers/{retriever_id}/publish \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'X-Namespace: <x-namespace>' \
--data @- <<EOF
{
"public_name": "<string>",
"display_config": {
"title": "<string>",
"inputs": [
{
"field_name": "<string>",
"field_schema": {
"type": "string",
"default": "<unknown>",
"items": "<unknown>",
"properties": {},
"examples": [
"<unknown>"
],
"description": "<string>",
"enum": [
"<unknown>"
],
"required": false
},
"label": "<string>",
"placeholder": "Enter search terms...",
"helper_text": "Describe the aesthetic, outfit, or vibe you're looking for",
"suggestions": [
"streetwear urban",
"clean girl minimal",
"summer haul bright"
],
"required": true,
"order": 0
}
],
"exposed_fields": [
"<string>"
],
"description": "Search through thousands of products",
"logo_url": "https://example.com/logo.png",
"og_image_url": "https://s3.amazonaws.com/mixpeek-server-dev/org123/ns456/public-retriever-og-images/video-search/og.png",
"markdowns": [
{
"title": "<string>",
"content": "<string>"
}
],
"theme": {
"primary_color": "#007AFF",
"secondary_color": "#FF6B6B",
"font_family": "system-ui, -apple-system, sans-serif",
"background_color": "#FFFFFF",
"text_color": "#000000"
},
"layout": {
"mode": "grid",
"columns": 3,
"gap": "16px"
},
"components": {
"show_search": true,
"show_filters": false,
"result_layout": "grid",
"result_card": {
"layout": "vertical",
"show_thumbnail": true,
"thumbnail_aspect_ratio": "16/9",
"thumbnail_fit": "cover",
"show_score": false,
"truncate_title": 60,
"truncate_description": 120,
"field_order": [
"<string>"
]
}
},
"field_config": {}
},
"rate_limit_config": {
"enabled": true,
"tier": "standard",
"requests_per_minute": 2,
"requests_per_hour": 2,
"requests_per_day": 2,
"max_results_per_query": 100,
"enable_ip_limits": false,
"max_requests_per_ip_hour": 2
},
"password_secret_name": "published_retriever_password",
"include_metadata": true
}
EOF{
"public_id": "<string>",
"retriever_id": "<string>",
"public_url": "<string>",
"short_url": "<string>",
"public_api_key": "<string>"
}REQUIRED: Bearer token authentication using your API key. Format: 'Bearer sk_xxxxxxxxxxxxx'. You can create API keys in the Mixpeek dashboard under Organization Settings.
REQUIRED: Namespace identifier for scoping this request. All resources (collections, buckets, taxonomies, etc.) are scoped to a namespace. You can provide either the namespace name or namespace ID. Format: ns_xxxxxxxxxxxxx (ID) or a custom name like 'my-namespace'
ID of the retriever to publish
Request to publish a retriever.
Requires public_name and display_config. Other fields have sensible defaults.
Public URL-safe name (lowercase, numbers, hyphens only). Must start and end with alphanumeric character. Will be used in URL: apps.mixpeek.com/r/{public_name}
3 - 50Display configuration defining how the public UI should be rendered. Includes input fields, theme, layout, and exposed result fields.
Show child attributes
Title/heading for the public search page
List of input fields to render in the search interface. Each input maps to a field in the retriever's input_schema. Frontend uses the field_schema to render the appropriate component type.
1Show child attributes
Name of the input field (matches retriever input_schema key)
Schema definition for this input field. Defines type, description, examples, and validation rules. Frontend uses this to render the appropriate input component (text input, image upload, dropdown, etc.)
Show child attributes
Supported data types for bucket schema fields.
Types fall into two categories:
Explicit Types (Type-Safe):
Automatic Type (Flexible):
string, number, integer, float, boolean, object, array, date, datetime, json, file, text, image, audio, video, pdf, document, spreadsheet, presentation, dense_vector, sparse_vector, int8_vector, automatic OPTIONAL. List of example values for this field. Used by Apps to show example inputs in the UI. Provide multiple diverse examples when possible.
Human-readable label for the input
Placeholder text for the input
"Enter search terms..."
Helper text displayed below the input to guide users
"Describe the aesthetic, outfit, or vibe you're looking for"
Pre-filled suggestion chips that users can click to populate the input
[
"streetwear urban",
"clean girl minimal",
"summer haul bright"
]Whether this input is required
Display order (lower numbers appear first)
x >= 0List of document metadata fields to show in results. Only these fields are returned to end users.
1Optional description/subtitle for the page
"Search through thousands of products"
URL to logo image
"https://example.com/logo.png"
URL to auto-generated social preview/OG image
"https://s3.amazonaws.com/mixpeek-server-dev/org123/ns456/public-retriever-og-images/video-search/og.png"
Array of markdown content sections for documentation, guides, or informational modals. Each section has a title and markdown-formatted content. Displayed in modals, expandable sections, or tabs on the public interface. Examples: 'How it Works', 'Search Guide', 'About', 'FAQ', etc.
Show child attributes
Title for the markdown content section
1 - 200Markdown-formatted content. Supports standard markdown syntax including headers, lists, links, images, code blocks, and emphasis. Limited to 50KB to prevent database issues.
1 - 50000Theme/styling configuration
Show child attributes
Primary brand color (hex code)
Secondary/accent color (hex code)
"#FF6B6B"
Font family for text
Background color (hex code)
Primary text color (hex code)
Configuration for UI components including search inputs, filters, and result card display options.
Show child attributes
Whether to show search input fields
Whether to show filters sidebar
Layout mode for results display
Configuration for result card display
Show child attributes
Card layout orientation
Whether to show thumbnail image in results
Aspect ratio for thumbnail images
How thumbnail should fit in container
Whether to display relevance score
Maximum characters for title before truncation
x >= 160
Maximum characters for description before truncation
x >= 1120
Order of fields to display in result card. Fields not in this list won't be shown. Must be subset of exposed_fields.
Configuration for how each field should be displayed. Keys are field names (must be subset of exposed_fields). Values are FieldConfig objects specifying format and display options.
Show child attributes
Configuration for how to display a specific field in results.
Show child attributes
Format type for this field (text, image, date, number, etc.)
text, image, date, number, url, boolean, array, object Format-specific display options
Show child attributes
Display label for this field
"Title"
Whether to show the field if value is empty/null
Maximum characters before truncation (for text fields)
x >= 160
Image width in pixels
x >= 1400
Image height in pixels
x >= 1300
Enable lazy loading for images (default: true)
Aspect ratio for image container
"16/9"
CSS object-fit property for images
Date format type: 'iso', 'relative', or custom format string
Number of decimal places
x >= 00
Prefix for number display
"$"
Suffix for number display
"%"
Open URLs in new tab (default: true)
Show domain instead of full URL
Label for true values
Label for false values
Separator for array items (default: ', ')
Maximum array items to display
x >= 1Rate limiting configuration for public endpoint. Defaults to STANDARD tier (10/min, 100/hour, 1k/day). Use ELEVATED tier for trusted public apps (30/min, 500/hour, 5k/day). Use ENTERPRISE tier for monitored deployments (100/min, 2k/hour, 20k/day). Custom limits override tier defaults.
Show child attributes
Enable rate limiting for this published retriever. Set to False to disable all rate limiting (not recommended for public retrievers).
Rate limit tier preset. STANDARD (default): 60/min, 1k/hour, 10k/day. ELEVATED: 300/min, 10k/hour, 100k/day. ENTERPRISE: 1000/min, 50k/hour, 500k/day. UNLIMITED: No limits. Custom limits override tier defaults.
standard, elevated, enterprise, unlimited Maximum requests per minute (OPTIONAL). If not specified, uses tier default. If specified, overrides tier default.
x >= 1Maximum requests per hour (OPTIONAL). If not specified, uses tier default. If specified, overrides tier default.
x >= 1Maximum requests per day (OPTIONAL). If not specified, uses tier default. If specified, overrides tier default.
x >= 1Maximum number of results per search query (1-1000)
1 <= x <= 1000Enable IP-based rate limiting in addition to retriever-level limits. Useful for preventing individual IPs from monopolizing the retriever.
Maximum requests per IP address per hour (OPTIONAL). Only enforced if enable_ip_limits=True. Recommended: 100-500 for standard tier, 1000+ for elevated/enterprise.
x >= 1OPTIONAL. Name of organization secret containing password for access protection. If provided, users must send password via X-Retriever-Password header.
"published_retriever_password"
Whether to capture and store retriever metadata (stages, collections, capabilities). Recommended: True for better developer experience and debugging. Default: True.
Successful Response
Response after successfully publishing a retriever.
Public identifier for this published retriever
ID of the underlying retriever
Full public URL to the retriever page
Short URL via mxp.co redirect
Public API key for accessing this retriever. IMPORTANT: Save this key - it's needed for all API requests. It's safe to share since it's scoped to this retriever only.
Was this page helpful?