[{"data":1,"prerenderedAt":719},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fmcp\u002Fresources":319,"docs-\u002Fdocs\u002Fmcp\u002Fresources-surround":716},[4],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Docs","\u002Fdocs","docs",[9,35,60,78,120,186,229,240,264,289],{"title":10,"description":11,"icon":12,"path":13,"stem":14,"children":15,"page":34},"Getting started","What Zaproo Search is, a quickstart, and wiring search into a storefront.","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[16,22,28],{"title":17,"path":18,"stem":19,"description":20,"icon":21},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","What Zaproo Search is, the five things you work with, and how a product catalog becomes a search box on your shop.","i-lucide-book-open-text",{"title":23,"path":24,"stem":25,"description":26,"icon":27},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F2.quickstart","From a new account to a first search request in six steps, with curl or from your AI agent.","i-lucide-zap",{"title":29,"path":30,"stem":31,"description":32,"icon":33},"Integrate a storefront","\u002Fdocs\u002Fgetting-started\u002Fstorefront","docs\u002F1.getting-started\u002F3.storefront","Build a search results page with facets and an autocomplete box on top of the search and suggest routes.","i-lucide-store",false,{"title":36,"description":37,"icon":38,"path":39,"stem":40,"children":41,"page":34},"Account and team","Sign-in, sessions, organizations, members, roles and projects.","i-lucide-users","\u002Fdocs\u002Faccount","docs\u002F2.account",[42,48,54],{"title":43,"path":44,"stem":45,"description":46,"icon":47},"Account and sign-in","\u002Fdocs\u002Faccount\u002Fsign-in","docs\u002F2.account\u002F1.sign-in","Create an account, verify your email, stay signed in, manage signed-in devices and change or reset your password.","i-lucide-log-in",{"title":49,"path":50,"stem":51,"description":52,"icon":53},"Organizations, members and roles","\u002Fdocs\u002Faccount\u002Forganizations","docs\u002F2.account\u002F2.organizations","What an organization holds, how to add members, and what owners, admins and members may do.","i-lucide-building-2",{"title":55,"path":56,"stem":57,"description":58,"icon":59},"Projects","\u002Fdocs\u002Faccount\u002Fprojects","docs\u002F2.account\u002F3.projects","Group the indices and API keys of one shop or one environment, and keep staging apart from production.","i-lucide-folder-kanban",{"title":61,"description":62,"icon":63,"path":64,"stem":65,"children":66,"page":34},"API keys and security","Secret and public keys, scopes, allowed origins, rate limits and errors.","i-lucide-key-round","\u002Fdocs\u002Fkeys","docs\u002F3.keys",[67,72],{"title":68,"path":69,"stem":70,"description":71,"icon":63},"API keys","\u002Fdocs\u002Fkeys\u002Fapi-keys","docs\u002F3.keys\u002F1.api-keys","Secret and public keys, full and read access, index scope, allowed origins, expiry, and how to revoke a key.",{"title":73,"path":74,"stem":75,"description":76,"icon":77},"Rate limits and errors","\u002Fdocs\u002Fkeys\u002Frate-limits","docs\u002F3.keys\u002F2.rate-limits","How many requests each route accepts per minute, what a 429 looks like, the error format and every error code with its HTTP status.","i-lucide-gauge",{"title":79,"description":80,"icon":81,"path":82,"stem":83,"children":84,"page":34},"Indexing","Indices, languages, mappings, documents, tasks, full catalog sync and reindexing.","i-lucide-database","\u002Fdocs\u002Findexing","docs\u002F4.indexing",[85,90,96,102,108,114],{"title":86,"path":87,"stem":88,"description":89,"icon":81},"Indices and languages","\u002Fdocs\u002Findexing\u002Findices","docs\u002F4.indexing\u002F1.indices","Create an index, pick its language, read its status, and change the language later with a reindex.",{"title":91,"path":92,"stem":93,"description":94,"icon":95},"Mapping and fields","\u002Fdocs\u002Findexing\u002Fmapping","docs\u002F4.indexing\u002F2.mapping","Field types, the five flags that decide what a field is used for, text analysis options, unmapped fields, and which changes need a reindex.","i-lucide-table-properties",{"title":97,"path":98,"stem":99,"description":100,"icon":101},"Documents and tasks","\u002Fdocs\u002Findexing\u002Fdocuments","docs\u002F4.indexing\u002F3.documents","Upload and delete documents in batches, follow each write as a task, retry safely with Idempotency-Key, and browse what the index holds.","i-lucide-file-json",{"title":103,"path":104,"stem":105,"description":106,"icon":107},"Full catalog sync","\u002Fdocs\u002Findexing\u002Ffull-sync","docs\u002F4.indexing\u002F4.full-sync","Replace the whole catalog with a replace session, so products missing from your export disappear from search, without downtime.","i-lucide-refresh-cw",{"title":109,"path":110,"stem":111,"description":112,"icon":113},"Reindex and versions","\u002Fdocs\u002Findexing\u002Fversions","docs\u002F4.indexing\u002F5.versions","Rebuild an index with its saved mapping and swap it in without downtime, follow or cancel the rebuild, and read activeVersion and buildingVersion.","i-lucide-git-compare-arrows",{"title":115,"path":116,"stem":117,"description":118,"icon":119},"Data source","\u002Fdocs\u002Findexing\u002Fdata-source","docs\u002F4.indexing\u002F6.data-source","Let Zaproo download your product feed on a schedule, map it to documents, write only what changed and delete what left the feed.","i-lucide-rss",{"title":121,"description":122,"icon":123,"path":124,"stem":125,"children":126,"page":34},"Integrations","Connect your shop. Magento 2, product feeds and the API work today; more platforms are coming.","i-lucide-plug-zap","\u002Fdocs\u002Fintegrations","docs\u002F4.integrations",[127,133,139,144,150,156,161,166,171,176,181],{"title":128,"path":129,"stem":130,"description":131,"icon":132},"Integrations overview","\u002Fdocs\u002Fintegrations\u002Foverview","docs\u002F4.integrations\u002F01.overview","The ways to get your catalog into Zaproo Search, which one to pick, and how an integration shows up in the cabinet.","i-lucide-layout-grid",{"title":134,"path":135,"stem":136,"description":137,"icon":138},"Magento 2","\u002Fdocs\u002Fintegrations\u002Fmagento","docs\u002F4.integrations\u002F02.magento","Install the Zaproo Search module for Magento 2, connect each store view to its own index, and keep the catalog in sync.","i-lucide-shopping-cart",{"title":140,"path":141,"stem":142,"description":143,"icon":119},"Product feed","\u002Fdocs\u002Fintegrations\u002Fproduct-feed","docs\u002F4.integrations\u002F03.product-feed","Connect any shop that can publish its catalog as a feed. Zaproo downloads it on a schedule and writes only what changed.",{"title":145,"path":146,"stem":147,"description":148,"icon":149},"REST API and MCP","\u002Fdocs\u002Fintegrations\u002Frest-api-and-mcp","docs\u002F4.integrations\u002F04.rest-api-and-mcp","Send documents from your own code with the REST API, or let an AI agent manage the index over MCP.","i-lucide-code",{"title":151,"path":152,"stem":153,"description":154,"icon":155},"Shopify","\u002Fdocs\u002Fintegrations\u002Fshopify","docs\u002F4.integrations\u002F05.shopify","A Zaproo Search integration for Shopify is coming soon. Until then, connect the shop through a product feed or the REST API.","i-lucide-shopping-bag",{"title":157,"path":158,"stem":159,"description":160,"icon":155},"WooCommerce","\u002Fdocs\u002Fintegrations\u002Fwoocommerce","docs\u002F4.integrations\u002F06.woocommerce","A Zaproo Search integration for WooCommerce is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":162,"path":163,"stem":164,"description":165,"icon":155},"Shopware","\u002Fdocs\u002Fintegrations\u002Fshopware","docs\u002F4.integrations\u002F07.shopware","A Zaproo Search integration for Shopware is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":167,"path":168,"stem":169,"description":170,"icon":155},"BigCommerce","\u002Fdocs\u002Fintegrations\u002Fbigcommerce","docs\u002F4.integrations\u002F08.bigcommerce","A Zaproo Search integration for BigCommerce is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":172,"path":173,"stem":174,"description":175,"icon":155},"PrestaShop","\u002Fdocs\u002Fintegrations\u002Fprestashop","docs\u002F4.integrations\u002F09.prestashop","A Zaproo Search integration for PrestaShop is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":177,"path":178,"stem":179,"description":180,"icon":155},"commercetools","\u002Fdocs\u002Fintegrations\u002Fcommercetools","docs\u002F4.integrations\u002F10.commercetools","A Zaproo Search integration for commercetools is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":182,"path":183,"stem":184,"description":185,"icon":155},"Salesforce Commerce Cloud","\u002Fdocs\u002Fintegrations\u002Fsalesforce-commerce-cloud","docs\u002F4.integrations\u002F11.salesforce-commerce-cloud","A Zaproo Search integration for Salesforce Commerce Cloud is coming soon. Until then, connect the shop through a product feed or the REST API.",{"title":187,"description":188,"icon":189,"path":190,"stem":191,"children":192,"page":34},"Search and relevance","The search API, search profiles, facets, synonyms and ranking rules.","i-lucide-search","\u002Fdocs\u002Fsearch","docs\u002F5.search",[193,199,205,211,217,223],{"title":194,"path":195,"stem":196,"description":197,"icon":198},"Search API","\u002Fdocs\u002Fsearch\u002Fsearch-api","docs\u002F5.search\u002F1.search-api","The search request and response, every filter form, sorting, paging, highlighting and the inline profile for previews.","i-lucide-search-code",{"title":200,"path":201,"stem":202,"description":203,"icon":204},"Search profiles","\u002Fdocs\u002Fsearch\u002Fprofiles","docs\u002F5.search\u002F2.profiles","Every setting of a search profile, what it does to results, and the mistakes to avoid.","i-lucide-sliders-horizontal",{"title":206,"path":207,"stem":208,"description":209,"icon":210},"Facets","\u002Fdocs\u002Fsearch\u002Ffacets","docs\u002F5.search\u002F3.facets","The filter panels next to the results, the four facet types, index facets and profile facets, and how a shopper's clicks change the counts.","i-lucide-list-filter",{"title":212,"path":213,"stem":214,"description":215,"icon":216},"Synonyms","\u002Fdocs\u002Fsearch\u002Fsynonyms","docs\u002F5.search\u002F4.synonyms","Let different words find the same products, with equivalent and one-way rules, bulk import and export in the Solr format, and no reindex.","i-lucide-arrow-left-right",{"title":218,"path":219,"stem":220,"description":221,"icon":222},"Ranking rules","\u002Fdocs\u002Fsearch\u002Frules","docs\u002F5.search\u002F5.rules","Change the results for chosen searches. Put products first, hide them, lift or lower a brand, narrow the results or weigh fields differently, on a schedule and per profile.","i-lucide-list-ordered",{"title":224,"path":225,"stem":226,"description":227,"icon":228},"Language groups","\u002Fdocs\u002Fsearch\u002Flanguage-groups","docs\u002F5.search\u002F6.language-groups","Let each store of a multilingual shop find its products by the other stores' text, so an English search on the Estonian store still finds the Estonian product.","i-lucide-languages",{"title":230,"description":231,"icon":232,"path":233,"stem":234,"children":235,"page":34},"Autocomplete","Query suggestions as the shopper types.","i-lucide-text-cursor-input","\u002Fdocs\u002Fautocomplete","docs\u002F6.autocomplete",[236],{"title":230,"path":237,"stem":238,"description":239,"icon":232},"\u002Fdocs\u002Fautocomplete\u002Fsuggestions","docs\u002F6.autocomplete\u002F1.suggestions","Query suggestions as the shopper types, built every hour from your own searches, field values and custom entries.",{"title":241,"description":242,"icon":243,"path":244,"stem":245,"children":246,"page":34},"Analytics","Searches, zero-result queries and latency.","i-lucide-chart-line","\u002Fdocs\u002Fanalytics","docs\u002F7.analytics",[247,252,258],{"title":248,"path":249,"stem":250,"description":251,"icon":243},"Search analytics","\u002Fdocs\u002Fanalytics\u002Fsearch-analytics","docs\u002F7.analytics\u002F1.search-analytics","What the analytics page counts, which traffic it leaves out, how the headline numbers are defined, how comparisons and retention work, and how to get the weekly digest.",{"title":253,"path":254,"stem":255,"description":256,"icon":257},"Reports","\u002Fdocs\u002Fanalytics\u002Freports","docs\u002F7.analytics\u002F2.reports","Every analytics report with the definition of each column, the opportunities list and its fix buttons, the per-query view with before and after, and the CSV download.","i-lucide-table",{"title":259,"path":260,"stem":261,"description":262,"icon":263},"Event tracking","\u002Fdocs\u002Fanalytics\u002Fevent-tracking","docs\u002F7.analytics\u002F3.event-tracking","Send clicks, add-to-cart, purchases and suggestion clicks from your storefront, tie them to the search with searchId, and a copy-paste script that does it.","i-lucide-mouse-pointer-click",{"title":265,"description":266,"icon":267,"path":268,"stem":269,"children":270,"page":34},"AI agents (MCP)","Connect Claude Code or any MCP client and manage search from an agent.","i-lucide-bot","\u002Fdocs\u002Fmcp","docs\u002F8.mcp",[271,277,283],{"title":272,"path":273,"stem":274,"description":275,"icon":276},"MCP setup","\u002Fdocs\u002Fmcp\u002Fsetup","docs\u002F8.mcp\u002F1.setup","Connect Claude Code or any MCP client to Zaproo Search and manage indices, documents, profiles, synonyms and ranking rules from your agent.","i-lucide-plug",{"title":278,"path":279,"stem":280,"description":281,"icon":282},"MCP tools","\u002Fdocs\u002Fmcp\u002Ftools","docs\u002F8.mcp\u002F2.tools","Every tool the Zaproo Search MCP server offers, what an agent can do with each group, and prompts to start from.","i-lucide-wrench",{"title":284,"path":285,"stem":286,"description":287,"icon":288},"Resources and prompts","\u002Fdocs\u002Fmcp\u002Fresources","docs\u002F8.mcp\u002F3.resources","The index resources an MCP client can read, the tune_relevance prompt, and the errors the MCP server answers.","i-lucide-library",{"title":290,"description":291,"icon":292,"path":293,"stem":294,"children":295,"page":34},"Reference","Every REST route, every limit, plans and billing, and status.","i-lucide-book-open","\u002Fdocs\u002Freference","docs\u002F9.reference",[296,302,307,313],{"title":297,"path":298,"stem":299,"description":300,"icon":301},"REST API","\u002Fdocs\u002Freference\u002Frest-api","docs\u002F9.reference\u002F1.rest-api","The routes of the Zaproo Search REST API, grouped by area, with who may call it.","i-lucide-list-tree",{"title":303,"path":304,"stem":305,"description":306,"icon":77},"Limits","\u002Fdocs\u002Freference\u002Flimits","docs\u002F9.reference\u002F2.limits","Every size limit, cap and default of the Zaproo Search API in one place, with what happens when you reach it.",{"title":308,"path":309,"stem":310,"description":311,"icon":312},"Plans and billing","\u002Fdocs\u002Freference\u002Fbilling","docs\u002F9.reference\u002F3.billing","The plans, how usage is measured, what happens near a quota, and how plan changes and invoices work.","i-lucide-credit-card",{"title":314,"path":315,"stem":316,"description":317,"icon":318},"Status","\u002Fdocs\u002Freference\u002Fstatus","docs\u002F9.reference\u002F4.status","The status page and the status route, what each service covers and how to use them in your own monitoring.","i-lucide-activity",{"id":320,"title":284,"body":321,"description":287,"extension":711,"meta":712,"navigation":713,"path":285,"seo":714,"stem":286,"__hash__":715},"docs\u002Fdocs\u002F8.mcp\u002F3.resources.md",{"type":322,"value":323,"toc":698},"minimark",[324,329,333,338,349,362,366,372,405,423,427,430,437,457,460,534,537,541,544,660,678,682],[325,326,328],"h2",{"id":327},"resources","Resources",[330,331,332],"p",{},"Besides tools, the server offers two resource templates. A client reads them like files: they cost no tool call and change nothing. Both answer JSON and work with any secret key of the project.",[334,335,337],"h3",{"id":336},"mapping","Mapping",[339,340,346],"pre",{"className":341,"code":343,"language":344,"meta":345},[342],"language-text","index:\u002F\u002F{indexId}\u002Fmapping\n","text","",[347,348,343],"code",{"__ignoreMap":345},[330,350,351,352,355,356,361],{},"The language of the index and every field with its type and flags (searchable, filterable, facetable, sortable, returnable), the same as ",[347,353,354],{},"get_mapping"," and the ",[357,358,360],"a",{"href":359},"\u002Fdocs\u002Freference\u002Frest-api#indices","mapping route"," of the REST API. An agent reads it before it writes a profile, a facet or a rule, so it only uses fields that carry the flag they need.",[334,363,365],{"id":364},"stats","Stats",[339,367,370],{"className":368,"code":369,"language":344,"meta":345},[342],"index:\u002F\u002F{indexId}\u002Fstats\n",[347,371,369],{"__ignoreMap":345},[330,373,374,375,378,379,378,382,378,385,388,389,392,393,396,397,400,401,404],{},"The ",[347,376,377],{},"status",", ",[347,380,381],{},"docCount",[347,383,384],{},"activeVersion",[347,386,387],{},"buildingVersion"," and ",[347,390,391],{},"updatedAt"," of an index. A quick way to see whether an index is ",[347,394,395],{},"READY",", still ",[347,398,399],{},"REINDEXING"," or waiting in ",[347,402,403],{},"NEEDS_REINDEX",".",[330,406,407,408,411,412,415,416,419,420,404],{},"Replace ",[347,409,410],{},"{indexId}"," with the index id from ",[347,413,414],{},"list_indices",". An id that is not a UUID answers ",[347,417,418],{},"400 VALIDATION_FAILED","; an index of another project, or outside the key's index scope, answers ",[347,421,422],{},"404 INDEX_NOT_FOUND",[325,424,426],{"id":425},"prompts","Prompts",[334,428,429],{"id":429},"tune_relevance",[330,431,432,433,436],{},"A ready-made task for the agent: fix queries that find nothing or find the wrong products. In Claude Code, prompts show up as slash commands, so you start it with ",[347,434,435],{},"\u002Fmcp__zaproo-search__tune_relevance"," followed by the index id and, if you like, the queries.",[438,439,440,451],"field-group",{},[441,442,446],"field",{"name":443,"type":444,":required":445},"indexId","string","true",[330,447,448,449,404],{},"The index to tune, from ",[347,450,414],{},[441,452,454],{"name":453,"type":444},"queries",[330,455,456],{},"Comma-separated queries that find nothing or poor results. Leave it out to start from the ten queries that find nothing most often.",[330,458,459],{},"The prompt tells the agent to work in this order:",[461,462,464,469,475,479,487,491,497,501,504,508,514,518,521,525],"steps",{"level":463},"4",[465,466,468],"h4",{"id":467},"read-analytics","Read analytics",[330,470,471,474],{},[347,472,473],{},"get_search_analytics"," for the index, and its zero-result queries, most frequent first.",[465,476,478],{"id":477},"learn-the-index","Learn the index",[330,480,481,388,483,486],{},[347,482,354],{},[347,484,485],{},"list_profiles",", for the fields and the saved profiles.",[465,488,490],{"id":489},"search-each-query","Search each query",[330,492,493,496],{},[347,494,495],{},"search"," with the main profile, noting the total and the top hits.",[465,498,500],{"id":499},"propose-fixes","Propose fixes",[330,502,503],{},"Synonym rules (equivalent or one way) and profile changes: query field weights, match, typo tolerance.",[465,505,507],{"id":506},"preview","Preview",[330,509,510,513],{},[347,511,512],{},"preview_profile"," against the saved profile before saving anything.",[465,515,517],{"id":516},"ask-you","Ask you",[330,519,520],{},"The agent shows the before and after and waits for your go.",[465,522,524],{"id":523},"apply-and-check","Apply and check",[330,526,527,388,530,533],{},[347,528,529],{},"upsert_synonyms",[347,531,532],{},"upsert_profile",", then each query is searched again to confirm it now finds products.",[330,535,536],{},"The agent can only apply the changes with a full-access key. With a read-only key it stops after the proposal, which is a safe way to let it look without touching anything.",[325,538,540],{"id":539},"errors","Errors",[330,542,543],{},"The server checks the key on every request, before any tool runs.",[545,546,547,562],"table",{},[548,549,550],"thead",{},[551,552,553,556,559],"tr",{},[554,555,314],"th",{},[554,557,558],{},"Code",[554,560,561],{},"When",[563,564,565,583,595,607,624,640],"tbody",{},[551,566,567,571,576],{},[568,569,570],"td",{},"401",[568,572,573],{},[347,574,575],{},"UNAUTHENTICATED",[568,577,578,579,582],{},"No ",[347,580,581],{},"Authorization: Bearer"," header, or a key that does not exist.",[551,584,585,587,592],{},[568,586,570],{},[568,588,589],{},[347,590,591],{},"API_KEY_REVOKED",[568,593,594],{},"The key was revoked.",[551,596,597,599,604],{},[568,598,570],{},[568,600,601],{},[347,602,603],{},"API_KEY_EXPIRED",[568,605,606],{},"The key is past its expiry date.",[551,608,609,612,617],{},[568,610,611],{},"403",[568,613,614],{},[347,615,616],{},"SECRET_KEY_REQUIRED",[568,618,619,620,623],{},"A public key (",[347,621,622],{},"zs_pk_…",") sent from one of its allowed origins. MCP needs a secret key.",[551,625,626,628,633],{},[568,627,611],{},[568,629,630],{},[347,631,632],{},"ORIGIN_NOT_ALLOWED",[568,634,635,636,639],{},"A public key sent without an allowed ",[347,637,638],{},"Origin",", which is how a public key from a terminal or a server fails. Use a secret key.",[551,641,642,645,650],{},[568,643,644],{},"429",[568,646,647],{},[347,648,649],{},"RATE_LIMITED",[568,651,652,653,656,657,404],{},"More than 600 requests a minute for the key, or 1200 for one client IP. The ",[347,654,655],{},"Retry-After"," header says when to try again. See ",[357,658,659],{"href":74},"rate limits",[330,661,662,663,666,667,670,671,673,674,677],{},"Once the key is accepted, problems come back inside the tool result, with ",[347,664,665],{},"isError"," set and the REST status and code in the text: ",[347,668,669],{},"403 FORBIDDEN"," when a read-only key calls a write tool, ",[347,672,422],{}," for an index the key cannot reach, ",[347,675,676],{},"400"," with one issue per field for invalid input. Errors reading a resource come back as an MCP error with the same status and code.",[325,679,681],{"id":680},"related","Related",[683,684,685,690,694],"ul",{},[686,687,688],"li",{},[357,689,272],{"href":273},[686,691,692],{},[357,693,278],{"href":279},[686,695,696],{},[357,697,248],{"href":249},{"title":345,"searchDepth":699,"depth":699,"links":700},2,[701,706,709,710],{"id":327,"depth":699,"text":328,"children":702},[703,705],{"id":336,"depth":704,"text":337},3,{"id":364,"depth":704,"text":365},{"id":425,"depth":699,"text":426,"children":707},[708],{"id":429,"depth":704,"text":429},{"id":539,"depth":699,"text":540},{"id":680,"depth":699,"text":681},"md",{},{"icon":288},{"title":284,"description":287},"5n8mDZAOOZK6lvr-UEkvRsqkYMewuJgZbH0NIRP-uXA",[717,718],{"title":278,"path":279,"stem":280,"description":281,"icon":282,"children":-1},{"title":297,"path":298,"stem":299,"description":300,"icon":301,"children":-1},1792794344468]