[{"data":1,"prerenderedAt":1640},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Findexing\u002Fdocuments":313,"docs-\u002Fdocs\u002Findexing\u002Fdocuments-surround":1637},[4],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Docs","\u002Fdocs","docs",[9,35,60,78,120,186,223,234,258,283],{"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],{"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,"description":225,"icon":226,"path":227,"stem":228,"children":229,"page":34},"Autocomplete","Query suggestions as the shopper types.","i-lucide-text-cursor-input","\u002Fdocs\u002Fautocomplete","docs\u002F6.autocomplete",[230],{"title":224,"path":231,"stem":232,"description":233,"icon":226},"\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":235,"description":236,"icon":237,"path":238,"stem":239,"children":240,"page":34},"Analytics","Searches, zero-result queries and latency.","i-lucide-chart-line","\u002Fdocs\u002Fanalytics","docs\u002F7.analytics",[241,246,252],{"title":242,"path":243,"stem":244,"description":245,"icon":237},"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":247,"path":248,"stem":249,"description":250,"icon":251},"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":253,"path":254,"stem":255,"description":256,"icon":257},"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":259,"description":260,"icon":261,"path":262,"stem":263,"children":264,"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",[265,271,277],{"title":266,"path":267,"stem":268,"description":269,"icon":270},"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":272,"path":273,"stem":274,"description":275,"icon":276},"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":278,"path":279,"stem":280,"description":281,"icon":282},"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":284,"description":285,"icon":286,"path":287,"stem":288,"children":289,"page":34},"Reference","Every REST route, every limit, plans and billing, and status.","i-lucide-book-open","\u002Fdocs\u002Freference","docs\u002F9.reference",[290,296,301,307],{"title":291,"path":292,"stem":293,"description":294,"icon":295},"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":297,"path":298,"stem":299,"description":300,"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":302,"path":303,"stem":304,"description":305,"icon":306},"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":308,"path":309,"stem":310,"description":311,"icon":312},"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":314,"title":97,"body":315,"description":100,"extension":1632,"meta":1633,"navigation":1634,"path":98,"seo":1635,"stem":99,"__hash__":1636},"docs\u002Fdocs\u002F4.indexing\u002F3.documents.md",{"type":316,"value":317,"toc":1613},"minimark",[318,323,332,364,372,376,386,537,543,573,580,584,603,606,610,613,616,665,678,682,685,688,725,753,771,805,808,834,845,861,865,872,886,889,893,903,910,914,922,927,930,962,1188,1211,1233,1244,1248,1326,1340,1344,1436,1440,1465,1484,1488,1495,1497,1500,1526,1536,1540,1555,1566,1570,1591,1595,1609],[319,320,322],"h2",{"id":321},"how-writes-work","How writes work",[324,325,326,327,331],"p",{},"Every document write is asynchronous. The API checks the batch, stores it and answers ",[328,329,330],"code",{},"202"," with a task id. A worker then writes the documents to the index. Poll the task to learn when the documents are searchable and which ones failed.",[333,334,339],"pre",{"className":335,"code":336,"language":337,"meta":338,"style":338},"language-json shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","{ \"taskId\": \"0b9f7c1e-3a52-4f7e-9d0b-6a1c2e4d8f10\" }\n","json","",[328,340,341],{"__ignoreMap":338},[342,343,346,350,354,357,361],"span",{"class":344,"line":345},"line",1,[342,347,349],{"class":348},"s7iLA","{ ",[342,351,353],{"class":352},"sb7M8","\"taskId\"",[342,355,356],{"class":348},": ",[342,358,360],{"class":359},"semJd","\"0b9f7c1e-3a52-4f7e-9d0b-6a1c2e4d8f10\"",[342,362,363],{"class":348}," }\n",[324,365,366,367,371],{},"Use upserts and deletes for day-to-day changes: a price, a stock level, a new product. To send the whole catalog and drop everything you did not send, use a ",[368,369,370],"a",{"href":104},"full catalog sync"," instead.",[319,373,375],{"id":374},"upsert-documents","Upsert documents",[324,377,378,379,382,383,385],{},"The body is a bare JSON array of documents, not an object around one. Every document has an ",[328,380,381],{},"id"," string of 1 to 512 bytes. A document with an ",[328,384,381],{}," the index already holds replaces that document as a whole. Fields you leave out are gone from it afterwards, so always send the complete document.",[387,388,389,414,516],"tabs",{},[390,391,393],"tabs-item",{"icon":257,"label":392},"Cabinet",[324,394,395,396,400,401,404,405,408,409,413],{},"Open the index, then ",[397,398,399],"strong",{},"Documents",", and drop a ",[328,402,403],{},".json"," file on ",[397,406,407],{},"Upload documents",". See ",[368,410,412],{"href":411},"#upload-a-file-in-the-cabinet","upload a file in the cabinet",".",[390,415,418],{"icon":416,"label":417},"i-lucide-terminal","curl",[333,419,423],{"className":420,"code":421,"language":422,"meta":338,"style":338},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","curl -X POST https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Fdocuments \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Idempotency-Key: catalog-2026-10-16-batch-1\" \\\n  -d '[\n    {\"id\": \"tv-1\", \"title\": \"55 inch OLED TV\", \"brand\": \"Samsung\", \"price\": 899, \"attributes\": {\"color\": \"black\"}},\n    {\"id\": \"tv-2\", \"title\": \"50 inch LED TV\", \"brand\": \"LG\", \"price\": 449, \"attributes\": {\"color\": \"silver\"}}\n  ]'\n","bash",[328,424,425,456,479,489,498,504,510],{"__ignoreMap":338},[342,426,427,430,434,437,440,443,446,449,452],{"class":344,"line":345},[342,428,417],{"class":429},"szw1H",[342,431,433],{"class":432},"ssYy9"," -X",[342,435,436],{"class":359}," POST",[342,438,439],{"class":359}," https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F",[342,441,442],{"class":348},"$PROJECT_ID",[342,444,445],{"class":359},"\u002Findices\u002F",[342,447,448],{"class":348},"$INDEX_ID",[342,450,451],{"class":359},"\u002Fdocuments",[342,453,455],{"class":454},"sklAV"," \\\n",[342,457,459,462,465,468,471,474,477],{"class":344,"line":458},2,[342,460,461],{"class":432},"  -H",[342,463,464],{"class":359}," \"Authorization: Bearer ",[342,466,467],{"class":348},"$ZS_KEY",[342,469,470],{"class":359},"\"",[342,472,473],{"class":432}," -H",[342,475,476],{"class":359}," \"Content-Type: application\u002Fjson\"",[342,478,455],{"class":454},[342,480,482,484,487],{"class":344,"line":481},3,[342,483,461],{"class":432},[342,485,486],{"class":359}," \"Idempotency-Key: catalog-2026-10-16-batch-1\"",[342,488,455],{"class":454},[342,490,492,495],{"class":344,"line":491},4,[342,493,494],{"class":432},"  -d",[342,496,497],{"class":359}," '[\n",[342,499,501],{"class":344,"line":500},5,[342,502,503],{"class":359},"    {\"id\": \"tv-1\", \"title\": \"55 inch OLED TV\", \"brand\": \"Samsung\", \"price\": 899, \"attributes\": {\"color\": \"black\"}},\n",[342,505,507],{"class":344,"line":506},6,[342,508,509],{"class":359},"    {\"id\": \"tv-2\", \"title\": \"50 inch LED TV\", \"brand\": \"LG\", \"price\": 449, \"attributes\": {\"color\": \"silver\"}}\n",[342,511,513],{"class":344,"line":512},7,[342,514,515],{"class":359},"  ]'\n",[390,517,519,527],{"icon":261,"label":518},"MCP",[333,520,525],{"className":521,"code":523,"language":524,"meta":338},[522],"language-text","Upload the documents in .\u002Fcatalog.json to the products index and tell me when the task is done.\n","text",[328,526,523],{"__ignoreMap":338},[324,528,529,530,533,534,413],{},"The agent calls ",[328,531,532],{},"index_documents"," with up to 1000 documents per call, then ",[328,535,536],{},"get_task",[538,539],"api-route",{"auth":540,"method":541,"path":542},"Project admin or a full-access secret key","POST","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fdocuments",[324,544,545,546,549,550,552,553,556,557,560,561,564,565,568,569,572],{},"Before it creates the task, the API checks every document against the ",[368,547,548],{"href":92},"mapping",". If any document has a value of the wrong type or the same ",[328,551,381],{}," appears twice in the batch, the whole batch is refused with ",[328,554,555],{},"400 INVALID_DOCUMENTS",". Nothing is written. ",[328,558,559],{},"details"," lists up to 20 problems, each with ",[328,562,563],{},"docId",", ",[328,566,567],{},"path"," and ",[328,570,571],{},"message",". Fix them and send the batch again.",[324,574,575,576,413],{},"Fields the mapping does not list are accepted and stored, but search ignores them. They show up as ",[368,577,579],{"href":578},"\u002Fdocs\u002Findexing\u002Fmapping#unmapped-fields","unmapped fields",[581,582,297],"h3",{"id":583},"limits",[585,586,587,591,597],"ul",{},[588,589,590],"li",{},"Up to 1000 documents per request.",[588,592,593,594,413],{},"Up to 10 MB of JSON per request. A larger body answers ",[328,595,596],{},"413 PAYLOAD_TOO_LARGE",[588,598,599,600,602],{},"A document ",[328,601,381],{}," is 1 to 512 bytes.",[324,604,605],{},"To send more, split the catalog into batches and send them one after another. Each batch is its own task.",[319,607,609],{"id":608},"delete-documents","Delete documents",[324,611,612],{},"The body is a bare JSON array of up to 1000 document ids. An id the index does not hold is not an error. Duplicate ids are counted once.",[538,614],{"auth":540,"method":541,"path":615},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fdocuments\u002Fdelete",[333,617,619],{"className":420,"code":618,"language":422,"meta":338,"style":338},"curl -X POST https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Fdocuments\u002Fdelete \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -d '[\"tv-1\", \"tv-2\"]'\n",[328,620,621,642,658],{"__ignoreMap":338},[342,622,623,625,627,629,631,633,635,637,640],{"class":344,"line":345},[342,624,417],{"class":429},[342,626,433],{"class":432},[342,628,436],{"class":359},[342,630,439],{"class":359},[342,632,442],{"class":348},[342,634,445],{"class":359},[342,636,448],{"class":348},[342,638,639],{"class":359},"\u002Fdocuments\u002Fdelete",[342,641,455],{"class":454},[342,643,644,646,648,650,652,654,656],{"class":344,"line":458},[342,645,461],{"class":432},[342,647,464],{"class":359},[342,649,467],{"class":348},[342,651,470],{"class":359},[342,653,473],{"class":432},[342,655,476],{"class":359},[342,657,455],{"class":454},[342,659,660,662],{"class":344,"line":481},[342,661,494],{"class":432},[342,663,664],{"class":359}," '[\"tv-1\", \"tv-2\"]'\n",[324,666,667,668,670,671,674,675,413],{},"In the cabinet, tick documents in the ",[397,669,399],{}," table and click ",[397,672,673],{},"Delete selected",". Over MCP, the tool is ",[328,676,677],{},"delete_documents",[319,679,681],{"id":680},"delete-all-documents","Delete all documents",[324,683,684],{},"A flush deletes every document of the index at once, to start its data over after a bad import, test data or a catalogue switch. It cannot be undone.",[538,686],{"auth":540,"method":541,"path":687},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fdocuments\u002Fflush",[333,689,691],{"className":420,"code":690,"language":422,"meta":338,"style":338},"curl -X POST https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Fdocuments\u002Fflush \\\n  -H \"Authorization: Bearer $ZS_KEY\"\n",[328,692,693,714],{"__ignoreMap":338},[342,694,695,697,699,701,703,705,707,709,712],{"class":344,"line":345},[342,696,417],{"class":429},[342,698,433],{"class":432},[342,700,436],{"class":359},[342,702,439],{"class":359},[342,704,442],{"class":348},[342,706,445],{"class":359},[342,708,448],{"class":348},[342,710,711],{"class":359},"\u002Fdocuments\u002Fflush",[342,713,455],{"class":454},[342,715,716,718,720,722],{"class":344,"line":458},[342,717,461],{"class":432},[342,719,464],{"class":359},[342,721,467],{"class":348},[342,723,724],{"class":359},"\"\n",[333,726,728],{"className":335,"code":727,"language":337,"meta":338,"style":338},"{ \"taskId\": \"5c2d1f0a-7e43-4b8e-a1d9-3f6b2c8e0d47\", \"previousDocCount\": 1200 }\n",[328,729,730],{"__ignoreMap":338},[342,731,732,734,736,738,741,743,746,748,751],{"class":344,"line":345},[342,733,349],{"class":348},[342,735,353],{"class":352},[342,737,356],{"class":348},[342,739,740],{"class":359},"\"5c2d1f0a-7e43-4b8e-a1d9-3f6b2c8e0d47\"",[342,742,564],{"class":348},[342,744,745],{"class":352},"\"previousDocCount\"",[342,747,356],{"class":348},[342,749,750],{"class":432},"1200",[342,752,363],{"class":348},[324,754,755,756,758,759,762,763,766,767,770],{},"The answer is ",[328,757,330],{}," with a ",[328,760,761],{},"DOCS_FLUSH"," task. ",[328,764,765],{},"previousDocCount"," is the number of documents the index held. When the task is ",[328,768,769],{},"SUCCEEDED",":",[585,772,773,792,799,802],{},[588,774,775,776,779,780,783,784,787,788,791],{},"Every ",[368,777,778],{"href":110},"physical version"," of the index is deleted, the one search served included. The index serves a new, empty version built from the saved mapping, so it is ",[328,781,782],{},"READY"," (a pending ",[328,785,786],{},"NEEDS_REINDEX"," is resolved) and ",[328,789,790],{},"docCount"," is 0.",[588,793,794,795,798],{},"Search answers ",[328,796,797],{},"200"," with no hits. Autocomplete stops suggesting values of the deleted documents once its suggestions are rebuilt, which the flush starts. Custom suggestions and popular searches stay.",[588,800,801],{},"The mapping, facets, search profiles, rules, synonyms, autocomplete settings, data source, analytics and API keys stay.",[588,803,804],{},"The documents quota on the Billing page follows at its next count.",[324,806,807],{},"What was in flight when the flush was accepted:",[585,809,810,821,824,827],{},[588,811,812,813,816,817,820],{},"Uploads and deletes still ",[328,814,815],{},"QUEUED"," are ",[328,818,819],{},"CANCELLED",". A write already running finishes first, and what it wrote is deleted too.",[588,822,823],{},"An open replace session is aborted and a running reindex is cancelled.",[588,825,826],{},"Uploads sent after the flush land in the new version, even while the task runs.",[588,828,829,830,833],{},"An enabled ",[368,831,832],{"href":116},"data source"," fills the index again at its next sync. Disable it first to keep the index empty.",[324,835,836,837,840,841,844],{},"A second flush while one is queued or running answers the same task. Cancelling a reindex while a flush runs answers ",[328,838,839],{},"409 FLUSH_RUNNING",". If the saved mapping would break a profile, rule, facet, autocomplete field or data source, the flush is refused with ",[328,842,843],{},"409 MAPPING_BREAKS_CONFIG"," and nothing is stopped, as for a reindex.",[324,846,847,848,850,851,853,854,857,858,413],{},"In the cabinet, open ",[397,849,399],{},", click ",[397,852,681],{}," in the ",[397,855,856],{},"Danger zone"," and type the index name to confirm. The page shows the task until it ends. Owners and admins can flush; members see the button disabled. Over MCP, the tool is ",[328,859,860],{},"flush_documents",[319,862,864],{"id":863},"retry-safely-with-idempotency-key","Retry safely with Idempotency-Key",[324,866,867,868,871],{},"A network error leaves you unsure whether the API received a batch. Send an ",[328,869,870],{},"Idempotency-Key"," header with every write, up to 200 characters, and retry with the same key.",[585,873,874,877,883],{},[588,875,876],{},"The same key within 24 hours returns the task of the first request. No second task is created, even if the body changed.",[588,878,879,880,413],{},"Keys are unique per project. The same key for another index, another replace session or another operation answers ",[328,881,882],{},"409 IDEMPOTENCY_KEY_REUSED",[588,884,885],{},"After 24 hours the key can be used again.",[324,887,888],{},"Build the key from what makes the batch unique, for example your export run and the batch number. The cabinet upload does this with a hash of the file and the batch position, so uploading the same file twice does not write it twice.",[319,890,892],{"id":891},"write-order-and-superseded-documents","Write order and superseded documents",[324,894,895,896,899,900,902],{},"Each task gets a sequence number, ",[328,897,898],{},"seq",", when the API accepts it. The worker writes every document with ",[328,901,898],{}," as its version, and the index never replaces a document with an older version. When two tasks change the same document, the one accepted last wins, whichever finishes first.",[324,904,905,906,909],{},"A write that finds a newer version already stored is counted as ",[328,907,908],{},"superseded",". It counts as success: the newer data is already there. You see superseded documents when an older task was retried after a newer one, or when two of your processes send the same product.",[319,911,913],{"id":912},"follow-a-task","Follow a task",[324,915,916],{},[917,918],"img",{"alt":919,"src":920,"title":921},"The Tasks page listing a suggestion build and three document upserts, all SUCCEEDED, with received, succeeded, superseded and failed counts and durations","\u002Fdocs\u002Fscreenshots\u002Ftasks.png","Every write is a task with its own counts",[538,923],{"auth":924,"method":925,"path":926},"Project member or any secret key","GET","\u002Fv1\u002Fprojects\u002F:projectId\u002Ftasks\u002F:taskId",[538,928],{"auth":924,"method":925,"path":929},"\u002Fv1\u002Fprojects\u002F:projectId\u002Ftasks",[333,931,933],{"className":420,"code":932,"language":422,"meta":338,"style":338},"curl https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Ftasks\u002F$TASK_ID \\\n  -H \"Authorization: Bearer $ZS_KEY\"\n",[328,934,935,952],{"__ignoreMap":338},[342,936,937,939,941,943,946,949],{"class":344,"line":345},[342,938,417],{"class":429},[342,940,439],{"class":359},[342,942,442],{"class":348},[342,944,945],{"class":359},"\u002Ftasks\u002F",[342,947,948],{"class":348},"$TASK_ID ",[342,950,951],{"class":454},"\\\n",[342,953,954,956,958,960],{"class":344,"line":458},[342,955,461],{"class":432},[342,957,464],{"class":359},[342,959,467],{"class":348},[342,961,724],{"class":359},[333,963,965],{"className":335,"code":964,"language":337,"meta":338,"style":338},"{\n  \"id\": \"0b9f7c1e-3a52-4f7e-9d0b-6a1c2e4d8f10\",\n  \"type\": \"DOCS_UPSERT\",\n  \"status\": \"PARTIAL\",\n  \"seq\": 1042,\n  \"attempts\": 1,\n  \"counts\": { \"received\": 2, \"succeeded\": 1, \"superseded\": 0, \"failed\": 1 },\n  \"errors\": [{ \"docId\": \"tv-2\", \"type\": \"mapper_parsing_exception\", \"reason\": \"failed to parse field [price]\" }],\n  \"idempotencyKey\": \"catalog-2026-10-16-batch-1\",\n  \"sessionId\": null,\n  \"createdAt\": \"2026-10-16T09:30:00.000Z\",\n  \"startedAt\": \"2026-10-16T09:30:00.120Z\",\n  \"finishedAt\": \"2026-10-16T09:30:00.480Z\"\n}\n",[328,966,967,972,984,996,1008,1020,1032,1079,1119,1132,1145,1158,1171,1182],{"__ignoreMap":338},[342,968,969],{"class":344,"line":345},[342,970,971],{"class":348},"{\n",[342,973,974,977,979,981],{"class":344,"line":458},[342,975,976],{"class":352},"  \"id\"",[342,978,356],{"class":348},[342,980,360],{"class":359},[342,982,983],{"class":348},",\n",[342,985,986,989,991,994],{"class":344,"line":481},[342,987,988],{"class":352},"  \"type\"",[342,990,356],{"class":348},[342,992,993],{"class":359},"\"DOCS_UPSERT\"",[342,995,983],{"class":348},[342,997,998,1001,1003,1006],{"class":344,"line":491},[342,999,1000],{"class":352},"  \"status\"",[342,1002,356],{"class":348},[342,1004,1005],{"class":359},"\"PARTIAL\"",[342,1007,983],{"class":348},[342,1009,1010,1013,1015,1018],{"class":344,"line":500},[342,1011,1012],{"class":352},"  \"seq\"",[342,1014,356],{"class":348},[342,1016,1017],{"class":432},"1042",[342,1019,983],{"class":348},[342,1021,1022,1025,1027,1030],{"class":344,"line":506},[342,1023,1024],{"class":352},"  \"attempts\"",[342,1026,356],{"class":348},[342,1028,1029],{"class":432},"1",[342,1031,983],{"class":348},[342,1033,1034,1037,1040,1043,1045,1048,1050,1053,1055,1057,1059,1062,1064,1067,1069,1072,1074,1076],{"class":344,"line":512},[342,1035,1036],{"class":352},"  \"counts\"",[342,1038,1039],{"class":348},": { ",[342,1041,1042],{"class":352},"\"received\"",[342,1044,356],{"class":348},[342,1046,1047],{"class":432},"2",[342,1049,564],{"class":348},[342,1051,1052],{"class":352},"\"succeeded\"",[342,1054,356],{"class":348},[342,1056,1029],{"class":432},[342,1058,564],{"class":348},[342,1060,1061],{"class":352},"\"superseded\"",[342,1063,356],{"class":348},[342,1065,1066],{"class":432},"0",[342,1068,564],{"class":348},[342,1070,1071],{"class":352},"\"failed\"",[342,1073,356],{"class":348},[342,1075,1029],{"class":432},[342,1077,1078],{"class":348}," },\n",[342,1080,1082,1085,1088,1091,1093,1096,1098,1101,1103,1106,1108,1111,1113,1116],{"class":344,"line":1081},8,[342,1083,1084],{"class":352},"  \"errors\"",[342,1086,1087],{"class":348},": [{ ",[342,1089,1090],{"class":352},"\"docId\"",[342,1092,356],{"class":348},[342,1094,1095],{"class":359},"\"tv-2\"",[342,1097,564],{"class":348},[342,1099,1100],{"class":352},"\"type\"",[342,1102,356],{"class":348},[342,1104,1105],{"class":359},"\"mapper_parsing_exception\"",[342,1107,564],{"class":348},[342,1109,1110],{"class":352},"\"reason\"",[342,1112,356],{"class":348},[342,1114,1115],{"class":359},"\"failed to parse field [price]\"",[342,1117,1118],{"class":348}," }],\n",[342,1120,1122,1125,1127,1130],{"class":344,"line":1121},9,[342,1123,1124],{"class":352},"  \"idempotencyKey\"",[342,1126,356],{"class":348},[342,1128,1129],{"class":359},"\"catalog-2026-10-16-batch-1\"",[342,1131,983],{"class":348},[342,1133,1135,1138,1140,1143],{"class":344,"line":1134},10,[342,1136,1137],{"class":352},"  \"sessionId\"",[342,1139,356],{"class":348},[342,1141,1142],{"class":432},"null",[342,1144,983],{"class":348},[342,1146,1148,1151,1153,1156],{"class":344,"line":1147},11,[342,1149,1150],{"class":352},"  \"createdAt\"",[342,1152,356],{"class":348},[342,1154,1155],{"class":359},"\"2026-10-16T09:30:00.000Z\"",[342,1157,983],{"class":348},[342,1159,1161,1164,1166,1169],{"class":344,"line":1160},12,[342,1162,1163],{"class":352},"  \"startedAt\"",[342,1165,356],{"class":348},[342,1167,1168],{"class":359},"\"2026-10-16T09:30:00.120Z\"",[342,1170,983],{"class":348},[342,1172,1174,1177,1179],{"class":344,"line":1173},13,[342,1175,1176],{"class":352},"  \"finishedAt\"",[342,1178,356],{"class":348},[342,1180,1181],{"class":359},"\"2026-10-16T09:30:00.480Z\"\n",[342,1183,1185],{"class":344,"line":1184},14,[342,1186,1187],{"class":348},"}\n",[324,1189,1190,1191,564,1193,564,1196,1199,1200,1202,1203,1199,1205,1207,1208,1210],{},"Poll every second or two until the status is one of ",[328,1192,769],{},[328,1194,1195],{},"PARTIAL",[328,1197,1198],{},"FAILED"," or ",[328,1201,819],{},". Documents are searchable once their task reaches ",[328,1204,769],{},[328,1206,1195],{},", and the index's ",[328,1209,790],{}," includes them by then.",[324,1212,1213,1214,568,1217,1220,1221,1224,1225,1228,1229,1232],{},"The list returns the project's tasks newest first. Filter with ",[328,1215,1216],{},"indexId",[328,1218,1219],{},"status",". ",[328,1222,1223],{},"limit"," is 1 to 100 (default 50). Pass ",[328,1226,1227],{},"nextCursor"," from the previous page as ",[328,1230,1231],{},"cursor"," to get the next page.",[324,1234,1235,1236,1239,1240,1243],{},"In the cabinet, open the index and then ",[397,1237,1238],{},"Tasks",". The table shows each task's type, status and counts. ",[397,1241,1242],{},"Details"," opens the errors.",[581,1245,1247],{"id":1246},"task-status","Task status",[1249,1250,1251,1263],"table",{},[1252,1253,1254],"thead",{},[1255,1256,1257,1260],"tr",{},[1258,1259,308],"th",{},[1258,1261,1262],{},"Meaning",[1264,1265,1266,1276,1286,1295,1308,1317],"tbody",{},[1255,1267,1268,1273],{},[1269,1270,1271],"td",{},[328,1272,815],{},[1269,1274,1275],{},"Accepted, waiting for a worker. A task that hit a temporary error waits here before its next attempt.",[1255,1277,1278,1283],{},[1269,1279,1280],{},[328,1281,1282],{},"RUNNING",[1269,1284,1285],{},"A worker is writing it.",[1255,1287,1288,1292],{},[1269,1289,1290],{},[328,1291,769],{},[1269,1293,1294],{},"Every document was written or superseded.",[1255,1296,1297,1301],{},[1269,1298,1299],{},[328,1300,1195],{},[1269,1302,1303,1304,1307],{},"Some documents failed. ",[328,1305,1306],{},"errors"," names them.",[1255,1309,1310,1314],{},[1269,1311,1312],{},[328,1313,1198],{},[1269,1315,1316],{},"Every document failed, or the task failed as a whole.",[1255,1318,1319,1323],{},[1269,1320,1321],{},[328,1322,819],{},[1269,1324,1325],{},"The index was deleted or flushed, or the reindex or replace session the task belonged to was cancelled, aborted or expired.",[324,1327,1328,1329,1332,1333,1335,1336,1199,1338,413],{},"Document tasks are tried up to 5 times, with a growing pause, when the search cluster is busy or unreachable. ",[328,1330,1331],{},"attempts"," counts the tries. A document the cluster rejects for its content is not retried: it lands in ",[328,1334,1306],{}," and the task ends ",[328,1337,1195],{},[328,1339,1198],{},[581,1341,1343],{"id":1342},"task-types","Task types",[1249,1345,1346,1356],{},[1252,1347,1348],{},[1255,1349,1350,1353],{},[1258,1351,1352],{},"Type",[1258,1354,1355],{},"Created by",[1264,1357,1358,1368,1378,1391,1401,1414,1424],{},[1255,1359,1360,1365],{},[1269,1361,1362],{},[328,1363,1364],{},"DOCS_UPSERT",[1269,1366,1367],{},"An upsert",[1255,1369,1370,1375],{},[1269,1371,1372],{},[328,1373,1374],{},"DOCS_DELETE",[1269,1376,1377],{},"A delete",[1255,1379,1380,1385],{},[1269,1381,1382],{},[328,1383,1384],{},"SESSION_BATCH",[1269,1386,1387,1388],{},"A batch sent to a ",[368,1389,1390],{"href":104},"replace session",[1255,1392,1393,1398],{},[1269,1394,1395],{},[328,1396,1397],{},"SESSION_COMMIT",[1269,1399,1400],{},"A replace session commit",[1255,1402,1403,1408],{},[1269,1404,1405],{},[328,1406,1407],{},"REINDEX",[1269,1409,1410,1411],{},"A ",[368,1412,1413],{"href":110},"reindex",[1255,1415,1416,1421],{},[1269,1417,1418],{},[328,1419,1420],{},"SUGGEST_BUILD",[1269,1422,1423],{},"A rebuild of the autocomplete suggestions",[1255,1425,1426,1430],{},[1269,1427,1428],{},[328,1429,761],{},[1269,1431,1410,1432],{},[368,1433,1435],{"href":1434},"#delete-all-documents","flush of every document",[581,1437,1439],{"id":1438},"counts-and-errors","Counts and errors",[585,1441,1442,1448,1454,1459],{},[588,1443,1444,1447],{},[328,1445,1446],{},"received",": documents in the batch. For a reindex, the documents to copy. For a flush, the documents the index held.",[588,1449,1450,1453],{},[328,1451,1452],{},"succeeded",": documents written.",[588,1455,1456,1458],{},[328,1457,908],{},": documents skipped because a newer version was already stored.",[588,1460,1461,1464],{},[328,1462,1463],{},"failed",": documents the cluster rejected.",[324,1466,1467,1469,1470,564,1472,568,1475,1220,1478,1480,1481,1483],{},[328,1468,1306],{}," holds up to 1000 entries, each with ",[328,1471,563],{},[328,1473,1474],{},"type",[328,1476,1477],{},"reason",[328,1479,563],{}," is ",[328,1482,1142],{}," for an error that failed the whole task.",[319,1485,1487],{"id":1486},"browse-documents","Browse documents",[324,1489,1490],{},[917,1491],{"alt":1492,"src":1493,"title":1494},"The Documents page with a drop zone for a JSON file, a search box and a table of documents with id, SKU, name and a View JSON link","\u002Fdocs\u002Fscreenshots\u002Fdocuments.png","Browse, upload and delete documents",[538,1496],{"auth":924,"method":925,"path":542},[538,1498],{"auth":924,"method":925,"path":1499},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Fdocuments\u002F:docId",[324,1501,1502,1503,1505,1506,1508,1509,1511,1512,1514,1515,1518,1519,1522,1523,413],{},"The list returns documents ordered by ",[328,1504,381],{},", as search sees them. ",[328,1507,1223],{}," is 1 to 100 (default 20). Pass ",[328,1510,1227],{}," as ",[328,1513,1231],{}," for the next page. ",[328,1516,1517],{},"q"," matches a document id exactly, or the start of a value in any indexed field. One document by id answers ",[328,1520,1521],{},"404 DOCUMENT_NOT_FOUND"," when the index does not hold it. Over MCP, the tool is ",[328,1524,1525],{},"get_document",[324,1527,1528,1529,1531,1532,1535],{},"The cabinet's ",[397,1530,399],{}," page shows the same list with a search box. ",[397,1533,1534],{},"View JSON"," shows the stored document, unmapped fields included.",[319,1537,1539],{"id":1538},"upload-a-file-in-the-cabinet","Upload a file in the cabinet",[324,1541,1542,1543,1545,1546,404,1548,1550,1551,1554],{},"On ",[397,1544,399],{},", drop a ",[328,1547,403],{},[397,1549,407],{}," or click to pick one. The file holds a JSON array of documents, or an object with a ",[328,1552,1553],{},"documents"," array. The cabinet splits it into batches of up to 1000 documents and 10 MB, sends them one after another and shows each batch's task as it runs.",[585,1556,1557,1560,1563],{},[588,1558,1559],{},"A batch the API refuses shows its error code and the documents at fault. The other batches still go through.",[588,1561,1562],{},"Each batch carries an Idempotency-Key made from the file's content and the batch number. After a failure, upload the same file again: batches already accepted in the last 24 hours are not written twice.",[588,1564,1565],{},"Uploading and deleting needs the organization owner or admin role.",[319,1567,1569],{"id":1568},"common-mistakes","Common mistakes",[585,1571,1572,1579,1582,1588],{},[588,1573,1574,1575,1578],{},"Sending ",[328,1576,1577],{},"{\"documents\": [...]}"," to the API. The API takes a bare array. Only the cabinet upload accepts the wrapped form.",[588,1580,1581],{},"Sending only the changed fields. An upsert replaces the whole document.",[588,1583,1584,1585,1587],{},"Treating ",[328,1586,330],{}," as done. The documents are searchable only when the task finishes.",[588,1589,1590],{},"Retrying without an Idempotency-Key. A retry of a batch the API already accepted creates a second task. It writes the same data, but it costs a task and shows twice in the task list.",[319,1592,1594],{"id":1593},"related","Related",[585,1596,1597,1601,1605],{},[588,1598,1599],{},[368,1600,91],{"href":92},[588,1602,1603],{},[368,1604,103],{"href":104},[588,1606,1607],{},[368,1608,23],{"href":24},[1610,1611,1612],"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}html pre.shiki code .sklAV, html code.shiki .sklAV{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF9492}",{"title":338,"searchDepth":458,"depth":458,"links":1614},[1615,1616,1619,1620,1621,1622,1623,1628,1629,1630,1631],{"id":321,"depth":458,"text":322},{"id":374,"depth":458,"text":375,"children":1617},[1618],{"id":583,"depth":481,"text":297},{"id":608,"depth":458,"text":609},{"id":680,"depth":458,"text":681},{"id":863,"depth":458,"text":864},{"id":891,"depth":458,"text":892},{"id":912,"depth":458,"text":913,"children":1624},[1625,1626,1627],{"id":1246,"depth":481,"text":1247},{"id":1342,"depth":481,"text":1343},{"id":1438,"depth":481,"text":1439},{"id":1486,"depth":458,"text":1487},{"id":1538,"depth":458,"text":1539},{"id":1568,"depth":458,"text":1569},{"id":1593,"depth":458,"text":1594},"md",{},{"icon":101},{"title":97,"description":100},"xkxJ8kN4mdM_o4MVI7ikogWqQo3JYF645QA6FIoawzo",[1638,1639],{"title":91,"path":92,"stem":93,"description":94,"icon":95,"children":-1},{"title":103,"path":104,"stem":105,"description":106,"icon":107,"children":-1},1792679791163]