curl --request GET \
--url https://api.mixpeek.com/v1/public/apps/{slug}/config \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mixpeek.com/v1/public/apps/{slug}/config"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mixpeek.com/v1/public/apps/{slug}/config', 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/public/apps/{slug}/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/public/apps/{slug}/config"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.mixpeek.com/v1/public/apps/{slug}/config")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/public/apps/{slug}/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"slug": "<string>",
"template": "<string>",
"meta": {
"title": "My Product Search",
"description": "Search across 10k+ product images",
"logo_url": "https://cdn.example.com/logo.png",
"favicon_url": "https://cdn.example.com/favicon.ico",
"indexable": false
},
"hero": {
"headline": "<string>",
"subheadline": "<string>",
"background_type": "solid",
"background_url": "<string>",
"background_color": "<string>",
"text_color": "#FFFFFF",
"logo_url": "<string>",
"height": "420px",
"cta_label": "<string>",
"cta_url": "<string>"
},
"theme": {
"primary_color": "#007AFF",
"secondary_color": "#FF6B6B",
"font_family": "Inter, sans-serif",
"background_color": "#FFFFFF",
"text_color": "#374151",
"heading_font_family": "Georgia, serif",
"surface_color": "#F9FAFB",
"muted_color": "#6B7280",
"border_color": "#E5E7EB",
"border_radius": "8px",
"card_style": "elevated",
"card_hover_effect": "lift"
},
"seo": {
"author": "Mixpeek",
"favicon_url": "https://example.com/favicon.ico",
"keywords": [
"fitness",
"yoga",
"workout",
"exercise videos"
],
"locale": "en_US",
"logo_url": "https://example.com/logo.png",
"meta_description": "Search and discover fitness videos using AI-powered semantic search.",
"meta_title": "Fitness Video Search | Mixpeek",
"og_image_alt": "Fitness video search interface",
"og_image_url": "https://mixpeek-public-pages.s3.amazonaws.com/og.png",
"og_type": "website",
"robots": "index, follow",
"site_name": "Mixpeek",
"structured_data": {
"additional_properties": {
"applicationCategory": "Search"
},
"type": "WebApplication"
},
"twitter_card": "summary_large_image",
"twitter_site": "@mixpeek"
},
"stats": [
{
"label": "<string>",
"value": "<string>"
}
],
"featured_gallery": {
"enabled": true,
"title": "Featured",
"retriever_id": "<string>",
"public_name": "<string>",
"default_inputs": {},
"layout": {
"mode": "grid",
"columns": 3,
"gap": "8px",
"full_width": false
},
"field_config": {}
},
"tabs": [
{
"tab_id": "<string>",
"label": "<string>",
"display_config": {
"components": {
"result_card": {
"card_click_action": "viewDetails",
"field_order": [
"title",
"description",
"price"
],
"layout": "vertical",
"show_find_similar": true,
"show_thumbnail": true
},
"result_layout": "grid",
"show_hero": true,
"show_results_header": true,
"show_search": true
},
"custom_cta": {
"label": "Search Tips",
"markdown_content": "# Search Tips\n\n- Use quotes for exact phrases\n- Try descriptive terms"
},
"description": "Search through our product catalog",
"exposed_fields": [
"title",
"description",
"price",
"image_url"
],
"external_links": [
{
"name": "GitHub Repository",
"url": "https://github.com/mixpeek/product-search"
},
{
"name": "Blog Post",
"url": "https://blog.mixpeek.com/building-product-search"
}
],
"field_config": {
"price": {
"format": "number",
"format_options": {
"decimals": 2,
"label": "Price",
"prefix": "$"
}
},
"title": {
"format": "text",
"format_options": {
"label": "Product Name",
"truncate_chars": 60
}
}
},
"field_mappings": {
"thumbnail": "image_url",
"title": "title"
},
"inputs": [
{
"field_name": "query",
"field_schema": {
"description": "Search query",
"examples": [
"wireless headphones",
"laptop"
],
"type": "string"
},
"input_type": "text",
"label": "Search Products",
"order": 0,
"placeholder": "What are you looking for?",
"required": true
}
],
"layout": {
"columns": 3,
"gap": "16px",
"mode": "grid"
},
"logo_url": "https://example.com/logo.png",
"markdowns": [
{
"content": "# AI-Powered Product Search\n\nOur search uses **machine learning** to understand your queries and find the most relevant products.\n\n## Features\n\n- **Semantic Search**: Understands meaning, not just keywords\n- **Visual Search**: Upload images to find similar products\n- **Smart Filters**: Automatically suggests relevant filters",
"title": "How it Works"
},
{
"content": "## Tips for Better Results\n\n1. Use descriptive terms (e.g., \"wireless noise-canceling headphones\")\n2. Try different keywords if you don't find what you're looking for\n3. Use filters to narrow down results\n\n*Happy searching!*",
"title": "Search Guide"
}
],
"template_type": "media-search",
"theme": {
"border_radius": "12px",
"card_style": "elevated",
"font_family": "Inter, sans-serif",
"primary_color": "#007AFF"
},
"title": "Product Search"
},
"retriever_id": "<string>",
"public_name": "<string>",
"description": "<string>"
}
],
"is_active": true,
"password_protected": true,
"sections": [
{
"type": "<string>",
"section_id": "<string>",
"props": {},
"order": 123
}
],
"custom_html": "<string>",
"bundle_url": "<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
}{
"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
}Get public App config
Fetch the full configuration for a public App — no authentication required.
Used by the canvas/ host runtime and the @mixpeek/canvas-sdk
useApp() hook to render the app. Returns tabs, hero, stats, sections,
theme, and SEO settings.
Serves the published_config snapshot when available, so draft edits
made via PATCH /v1/apps/{app_id} are not visible until the app is
published.
curl --request GET \
--url https://api.mixpeek.com/v1/public/apps/{slug}/config \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mixpeek.com/v1/public/apps/{slug}/config"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mixpeek.com/v1/public/apps/{slug}/config', 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/public/apps/{slug}/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/public/apps/{slug}/config"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.mixpeek.com/v1/public/apps/{slug}/config")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/public/apps/{slug}/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"slug": "<string>",
"template": "<string>",
"meta": {
"title": "My Product Search",
"description": "Search across 10k+ product images",
"logo_url": "https://cdn.example.com/logo.png",
"favicon_url": "https://cdn.example.com/favicon.ico",
"indexable": false
},
"hero": {
"headline": "<string>",
"subheadline": "<string>",
"background_type": "solid",
"background_url": "<string>",
"background_color": "<string>",
"text_color": "#FFFFFF",
"logo_url": "<string>",
"height": "420px",
"cta_label": "<string>",
"cta_url": "<string>"
},
"theme": {
"primary_color": "#007AFF",
"secondary_color": "#FF6B6B",
"font_family": "Inter, sans-serif",
"background_color": "#FFFFFF",
"text_color": "#374151",
"heading_font_family": "Georgia, serif",
"surface_color": "#F9FAFB",
"muted_color": "#6B7280",
"border_color": "#E5E7EB",
"border_radius": "8px",
"card_style": "elevated",
"card_hover_effect": "lift"
},
"seo": {
"author": "Mixpeek",
"favicon_url": "https://example.com/favicon.ico",
"keywords": [
"fitness",
"yoga",
"workout",
"exercise videos"
],
"locale": "en_US",
"logo_url": "https://example.com/logo.png",
"meta_description": "Search and discover fitness videos using AI-powered semantic search.",
"meta_title": "Fitness Video Search | Mixpeek",
"og_image_alt": "Fitness video search interface",
"og_image_url": "https://mixpeek-public-pages.s3.amazonaws.com/og.png",
"og_type": "website",
"robots": "index, follow",
"site_name": "Mixpeek",
"structured_data": {
"additional_properties": {
"applicationCategory": "Search"
},
"type": "WebApplication"
},
"twitter_card": "summary_large_image",
"twitter_site": "@mixpeek"
},
"stats": [
{
"label": "<string>",
"value": "<string>"
}
],
"featured_gallery": {
"enabled": true,
"title": "Featured",
"retriever_id": "<string>",
"public_name": "<string>",
"default_inputs": {},
"layout": {
"mode": "grid",
"columns": 3,
"gap": "8px",
"full_width": false
},
"field_config": {}
},
"tabs": [
{
"tab_id": "<string>",
"label": "<string>",
"display_config": {
"components": {
"result_card": {
"card_click_action": "viewDetails",
"field_order": [
"title",
"description",
"price"
],
"layout": "vertical",
"show_find_similar": true,
"show_thumbnail": true
},
"result_layout": "grid",
"show_hero": true,
"show_results_header": true,
"show_search": true
},
"custom_cta": {
"label": "Search Tips",
"markdown_content": "# Search Tips\n\n- Use quotes for exact phrases\n- Try descriptive terms"
},
"description": "Search through our product catalog",
"exposed_fields": [
"title",
"description",
"price",
"image_url"
],
"external_links": [
{
"name": "GitHub Repository",
"url": "https://github.com/mixpeek/product-search"
},
{
"name": "Blog Post",
"url": "https://blog.mixpeek.com/building-product-search"
}
],
"field_config": {
"price": {
"format": "number",
"format_options": {
"decimals": 2,
"label": "Price",
"prefix": "$"
}
},
"title": {
"format": "text",
"format_options": {
"label": "Product Name",
"truncate_chars": 60
}
}
},
"field_mappings": {
"thumbnail": "image_url",
"title": "title"
},
"inputs": [
{
"field_name": "query",
"field_schema": {
"description": "Search query",
"examples": [
"wireless headphones",
"laptop"
],
"type": "string"
},
"input_type": "text",
"label": "Search Products",
"order": 0,
"placeholder": "What are you looking for?",
"required": true
}
],
"layout": {
"columns": 3,
"gap": "16px",
"mode": "grid"
},
"logo_url": "https://example.com/logo.png",
"markdowns": [
{
"content": "# AI-Powered Product Search\n\nOur search uses **machine learning** to understand your queries and find the most relevant products.\n\n## Features\n\n- **Semantic Search**: Understands meaning, not just keywords\n- **Visual Search**: Upload images to find similar products\n- **Smart Filters**: Automatically suggests relevant filters",
"title": "How it Works"
},
{
"content": "## Tips for Better Results\n\n1. Use descriptive terms (e.g., \"wireless noise-canceling headphones\")\n2. Try different keywords if you don't find what you're looking for\n3. Use filters to narrow down results\n\n*Happy searching!*",
"title": "Search Guide"
}
],
"template_type": "media-search",
"theme": {
"border_radius": "12px",
"card_style": "elevated",
"font_family": "Inter, sans-serif",
"primary_color": "#007AFF"
},
"title": "Product Search"
},
"retriever_id": "<string>",
"public_name": "<string>",
"description": "<string>"
}
],
"is_active": true,
"password_protected": true,
"sections": [
{
"type": "<string>",
"section_id": "<string>",
"props": {},
"order": 123
}
],
"custom_html": "<string>",
"bundle_url": "<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
}{
"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
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Globally unique app slug
Response
Full app configuration for UI rendering
Public app configuration (strips internal fields).
Returned by GET /v1/public/apps/{slug}/config — used by the canvas/ host runtime and the @mixpeek/canvas-sdk useApp() hook.
Page-level metadata (REQUIRED when creating a page).
This object is separate from the optional seo field.
meta controls the visible page chrome (browser tab title, logo, favicon),
while seo controls search-engine tags (og:title, og:description, etc.).
Show child attributes
Show child attributes
Hero section configuration for a page.
Show child attributes
Show child attributes
Theme configuration for public retriever UI.
Defines colors, fonts, and visual styling for the public search interface.
Show child attributes
Show child attributes
SEO configuration for public retriever discoverability.
Auto-generated during publishing with sensible defaults inferred from the retriever's display_config. All fields can be overridden manually.
This configuration controls how the public retriever appears in:
- Search engine results (Google, Bing, etc.)
- Social media shares (Twitter, Facebook, LinkedIn)
- Link previews in messaging apps
Show child attributes
Show child attributes
{ "author": "Mixpeek", "favicon_url": "https://example.com/favicon.ico", "keywords": [ "fitness", "yoga", "workout", "exercise videos" ], "locale": "en_US", "logo_url": "https://example.com/logo.png", "meta_description": "Search and discover fitness videos using AI-powered semantic search.", "meta_title": "Fitness Video Search | Mixpeek", "og_image_alt": "Fitness video search interface", "og_image_url": "https://mixpeek-public-pages.s3.amazonaws.com/og.png", "og_type": "website", "robots": "index, follow", "site_name": "Mixpeek", "structured_data": { "additional_properties": { "applicationCategory": "Search" }, "type": "WebApplication" }, "twitter_card": "summary_large_image", "twitter_site": "@mixpeek" }
Show child attributes
Show child attributes
Configuration for the featured gallery section.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
URL of the deployed bundle index.html (set when app is deployed via CLI upload).
Was this page helpful?

