[{"data":1,"prerenderedAt":655},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Freference\u002Fstatus":235,"docs-\u002Fdocs\u002Freference\u002Fstatus-surround":652},[4],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Docs","\u002Fdocs","docs",[9,35,60,78,120,157,168,180,205],{"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},"Search and relevance","The search API, search profiles, facets, synonyms and ranking rules.","i-lucide-search","\u002Fdocs\u002Fsearch","docs\u002F5.search",[127,133,139,145,151],{"title":128,"path":129,"stem":130,"description":131,"icon":132},"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":134,"path":135,"stem":136,"description":137,"icon":138},"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":140,"path":141,"stem":142,"description":143,"icon":144},"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":146,"path":147,"stem":148,"description":149,"icon":150},"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":152,"path":153,"stem":154,"description":155,"icon":156},"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":158,"description":159,"icon":160,"path":161,"stem":162,"children":163,"page":34},"Autocomplete","Query suggestions as the shopper types.","i-lucide-text-cursor-input","\u002Fdocs\u002Fautocomplete","docs\u002F6.autocomplete",[164],{"title":158,"path":165,"stem":166,"description":167,"icon":160},"\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":169,"description":170,"icon":171,"path":172,"stem":173,"children":174,"page":34},"Analytics","Searches, zero-result queries and latency.","i-lucide-chart-line","\u002Fdocs\u002Fanalytics","docs\u002F7.analytics",[175],{"title":176,"path":177,"stem":178,"description":179,"icon":171},"Search analytics","\u002Fdocs\u002Fanalytics\u002Fsearch-analytics","docs\u002F7.analytics\u002F1.search-analytics","How many searches an index serves, which queries find nothing, how fast it answers, and what to do about zero results.",{"title":181,"description":182,"icon":183,"path":184,"stem":185,"children":186,"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",[187,193,199],{"title":188,"path":189,"stem":190,"description":191,"icon":192},"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":194,"path":195,"stem":196,"description":197,"icon":198},"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":200,"path":201,"stem":202,"description":203,"icon":204},"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":206,"description":207,"icon":208,"path":209,"stem":210,"children":211,"page":34},"Reference","Every REST route, every limit, plans and billing, and status.","i-lucide-book-open","\u002Fdocs\u002Freference","docs\u002F9.reference",[212,218,223,229],{"title":213,"path":214,"stem":215,"description":216,"icon":217},"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":219,"path":220,"stem":221,"description":222,"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":224,"path":225,"stem":226,"description":227,"icon":228},"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":230,"path":231,"stem":232,"description":233,"icon":234},"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":236,"title":230,"body":237,"description":233,"extension":647,"meta":648,"navigation":649,"path":231,"seo":650,"stem":232,"__hash__":651},"docs\u002Fdocs\u002F9.reference\u002F4.status.md",{"type":238,"value":239,"toc":640},"minimark",[240,245,254,257,308,311,356,360,366,373,533,539,559,563,583,587,622,626,636],[241,242,244],"h2",{"id":243},"the-status-page","The status page",[246,247,248,253],"p",{},[249,250,252],"a",{"href":251},"\u002Fstatus","https:\u002F\u002Fsearch.k8s-dev.zaproo.net\u002Fstatus"," shows whether each part of Zaproo Search works right now. The answer is at most 15 seconds old; there is no history or incident log yet.",[246,255,256],{},"The page shows an overall state, which is the worst of the services, and one line per service:",[258,259,260,273],"table",{},[261,262,263],"thead",{},[264,265,266,270],"tr",{},[267,268,269],"th",{},"Service",[267,271,272],{},"What it covers",[274,275,276,285,292,300],"tbody",{},[264,277,278,282],{},[279,280,281],"td",{},"Search and autocomplete",[279,283,284],{},"The storefront search and suggest routes, and search from the REST API and MCP.",[264,286,287,289],{},[279,288,79],{},[279,290,291],{},"Document uploads, deletes, full syncs, reindexing and suggestion rebuilds: the tasks that change an index.",[264,293,294,297],{},[279,295,296],{},"Dashboard and API",[279,298,299],{},"Signing in, the dashboard, and the REST API for managing projects, keys, indices and profiles.",[264,301,302,305],{},[279,303,304],{},"MCP",[279,306,307],{},"The MCP server AI agents connect to.",[246,309,310],{},"Each service is in one of three states:",[258,312,313,323],{},[261,314,315],{},[264,316,317,320],{},[267,318,319],{},"State",[267,321,322],{},"Meaning",[274,324,325,336,346],{},[264,326,327,333],{},[279,328,329],{},[330,331,332],"code",{},"operational",[279,334,335],{},"It works.",[264,337,338,343],{},[279,339,340],{},[330,341,342],{},"degraded",[279,344,345],{},"It works, but slower than it should. For indexing: tasks wait longer than usual before they start.",[264,347,348,353],{},[279,349,350],{},[330,351,352],{},"down",[279,354,355],{},"It does not work. Requests fail, or tasks wait until it is back.",[241,357,359],{"id":358},"status-route","Status route",[361,362],"api-route",{"auth":363,"method":364,"path":365},"Anyone","GET","\u002Fv1\u002Fstatus",[246,367,368,369,372],{},"The same answer as the page, as JSON. It always answers ",[330,370,371],{},"200","; the body carries the state:",[374,375,380],"pre",{"className":376,"code":377,"language":378,"meta":379,"style":379},"language-json shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","{\n  \"status\": \"operational\",\n  \"services\": [\n    {\"name\": \"search\", \"state\": \"operational\"},\n    {\"name\": \"indexing\", \"state\": \"operational\"},\n    {\"name\": \"dashboard\", \"state\": \"operational\"},\n    {\"name\": \"mcp\", \"state\": \"operational\"}\n  ],\n  \"checkedAt\": \"2026-10-16T12:00:00.000Z\"\n}\n","json","",[330,381,382,391,408,417,444,466,488,511,517,528],{"__ignoreMap":379},[383,384,387],"span",{"class":385,"line":386},"line",1,[383,388,390],{"class":389},"s7iLA","{\n",[383,392,394,398,401,405],{"class":385,"line":393},2,[383,395,397],{"class":396},"sb7M8","  \"status\"",[383,399,400],{"class":389},": ",[383,402,404],{"class":403},"semJd","\"operational\"",[383,406,407],{"class":389},",\n",[383,409,411,414],{"class":385,"line":410},3,[383,412,413],{"class":396},"  \"services\"",[383,415,416],{"class":389},": [\n",[383,418,420,423,426,428,431,434,437,439,441],{"class":385,"line":419},4,[383,421,422],{"class":389},"    {",[383,424,425],{"class":396},"\"name\"",[383,427,400],{"class":389},[383,429,430],{"class":403},"\"search\"",[383,432,433],{"class":389},", ",[383,435,436],{"class":396},"\"state\"",[383,438,400],{"class":389},[383,440,404],{"class":403},[383,442,443],{"class":389},"},\n",[383,445,447,449,451,453,456,458,460,462,464],{"class":385,"line":446},5,[383,448,422],{"class":389},[383,450,425],{"class":396},[383,452,400],{"class":389},[383,454,455],{"class":403},"\"indexing\"",[383,457,433],{"class":389},[383,459,436],{"class":396},[383,461,400],{"class":389},[383,463,404],{"class":403},[383,465,443],{"class":389},[383,467,469,471,473,475,478,480,482,484,486],{"class":385,"line":468},6,[383,470,422],{"class":389},[383,472,425],{"class":396},[383,474,400],{"class":389},[383,476,477],{"class":403},"\"dashboard\"",[383,479,433],{"class":389},[383,481,436],{"class":396},[383,483,400],{"class":389},[383,485,404],{"class":403},[383,487,443],{"class":389},[383,489,491,493,495,497,500,502,504,506,508],{"class":385,"line":490},7,[383,492,422],{"class":389},[383,494,425],{"class":396},[383,496,400],{"class":389},[383,498,499],{"class":403},"\"mcp\"",[383,501,433],{"class":389},[383,503,436],{"class":396},[383,505,400],{"class":389},[383,507,404],{"class":403},[383,509,510],{"class":389},"}\n",[383,512,514],{"class":385,"line":513},8,[383,515,516],{"class":389},"  ],\n",[383,518,520,523,525],{"class":385,"line":519},9,[383,521,522],{"class":396},"  \"checkedAt\"",[383,524,400],{"class":389},[383,526,527],{"class":403},"\"2026-10-16T12:00:00.000Z\"\n",[383,529,531],{"class":385,"line":530},10,[383,532,510],{"class":389},[246,534,535,538],{},[330,536,537],{},"checkedAt"," is when the state was last checked. Calls within 15 seconds of each other get the same answer, and the route is rate limited per IP address.",[374,540,544],{"className":541,"code":542,"language":543,"meta":379,"style":379},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","curl -s https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fstatus\n","bash",[330,545,546],{"__ignoreMap":379},[383,547,548,552,556],{"class":385,"line":386},[383,549,551],{"class":550},"szw1H","curl",[383,553,555],{"class":554},"ssYy9"," -s",[383,557,558],{"class":403}," https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fstatus\n",[241,560,562],{"id":561},"using-it-in-your-monitoring","Using it in your monitoring",[564,565,566,577,580],"ul",{},[567,568,569,570,573,574,576],"li",{},"Alert on the service you depend on, not on the overall state. A storefront that only searches cares about ",[330,571,572],{},"search","; indexing being ",[330,575,352],{}," delays new documents but leaves search working with what is already indexed.",[567,578,579],{},"Check every minute and alert after two or three bad answers in a row, not on a single one.",[567,581,582],{},"Your storefront should not call the route on each page view. Check from your monitoring, and let the storefront degrade on its own when a search request fails.",[241,584,586],{"id":585},"infrastructure-probes","Infrastructure probes",[246,588,589,592,593,596,597,600,601,604,605,608,609,611,612,608,615,618,619,621],{},[330,590,591],{},"GET \u002Fhealth"," and ",[330,594,595],{},"GET \u002Fready"," sit at the root of the API, outside ",[330,598,599],{},"\u002Fv1",". They are for the load balancer and the cluster that run Zaproo Search, and answer only ",[330,602,603],{},"{\"status\": ...}",". ",[330,606,607],{},"\u002Fhealth"," answers ",[330,610,371],{}," while the API process runs. ",[330,613,614],{},"\u002Fready",[330,616,617],{},"503"," when this API instance cannot serve search, so traffic goes to another one. Neither tells you whether your part of the service works; use ",[330,620,365],{}," for that.",[241,623,625],{"id":624},"related","Related",[564,627,628,632],{},[567,629,630],{},[249,631,213],{"href":214},[567,633,634],{},[249,635,219],{"href":220},[637,638,639],"style",{},"html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .sb7M8, html code.shiki .sb7M8{--shiki-light:#024C1A;--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}",{"title":379,"searchDepth":393,"depth":393,"links":641},[642,643,644,645,646],{"id":243,"depth":393,"text":244},{"id":358,"depth":393,"text":359},{"id":561,"depth":393,"text":562},{"id":585,"depth":393,"text":586},{"id":624,"depth":393,"text":625},"md",{},{"icon":234},{"title":230,"description":233},"axsASHphUJSZWc7avTZ-5zJrhmhb35jgFWve3AzGinw",[653,654],{"title":224,"path":225,"stem":226,"description":227,"icon":228,"children":-1},null,1792598976628]