[{"data":1,"prerenderedAt":954},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Findexing\u002Ffull-sync":319,"docs-\u002Fdocs\u002Findexing\u002Ffull-sync-surround":951},[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":103,"body":321,"description":106,"extension":946,"meta":947,"navigation":948,"path":104,"seo":949,"stem":105,"__hash__":950},"docs\u002Fdocs\u002F4.indexing\u002F4.full-sync.md",{"type":322,"value":323,"toc":930},"minimark",[324,329,333,336,349,357,361,364,375,391,395,685,689,694,701,785,801,805,808,822,826,835,839,894,898,912,916,926],[325,326,328],"h2",{"id":327},"when-to-use-a-replace-session","When to use a replace session",[330,331,332],"p",{},"Upserts and deletes change the documents you name. They cannot remove a product you forgot to delete. A replace session makes the index hold exactly what you send: you open it, send the whole catalog in batches and commit. Search switches to the new catalog in one step, and every document you did not send is gone.",[330,334,335],{},"Use a replace session when:",[337,338,339,343,346],"ul",{},[340,341,342],"li",{},"your shop exports the full catalog on a schedule, for example every night, and you have no reliable list of deleted products;",[340,344,345],{},"the index has drifted from the shop and you want a clean copy;",[340,347,348],{},"you changed the mapping and want to rebuild from your source data instead of from the stored documents.",[330,350,351,352,356],{},"Use ",[353,354,355],"a",{"href":98},"upserts and deletes"," for changes during the day. They are cheaper, and they keep working while a session is open.",[325,358,360],{"id":359},"how-a-session-works","How a session works",[330,362,363],{},"Opening a session builds a new, empty version of the index next to the live one, with the saved mapping. Search keeps using the live version the whole time.",[337,365,366,369,372],{},[340,367,368],{},"Batches sent to the session go to the new version only.",[340,370,371],{},"Normal upserts and deletes sent while the session is open go to both versions, so they survive the commit.",[340,373,374],{},"Commit waits until every batch is written, then swaps search to the new version in one step.",[330,376,377,378,382,383,386,387,390],{},"The index's status is ",[379,380,381],"code",{},"REINDEXING"," while the session is open, and its ",[379,384,385],{},"buildingVersion"," is the session's ",[379,388,389],{},"version",".",[325,392,394],{"id":393},"run-a-sync","Run a sync",[396,397,399,404,410,471,554,560,564,567,582,650,654,657,661,664],"steps",{"level":398},"3",[400,401,403],"h3",{"id":402},"open-a-session","Open a session",[405,406],"api-route",{"auth":407,"method":408,"path":409},"Project admin or a full-access secret key","POST","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Freplace-sessions",[411,412,417],"pre",{"className":413,"code":414,"language":415,"meta":416,"style":416},"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\u002Freplace-sessions \\\n  -H \"Authorization: Bearer $ZS_KEY\"\n","bash","",[379,418,419,456],{"__ignoreMap":416},[420,421,424,428,432,436,439,443,446,449,452],"span",{"class":422,"line":423},"line",1,[420,425,427],{"class":426},"szw1H","curl",[420,429,431],{"class":430},"ssYy9"," -X",[420,433,435],{"class":434},"semJd"," POST",[420,437,438],{"class":434}," https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F",[420,440,442],{"class":441},"s7iLA","$PROJECT_ID",[420,444,445],{"class":434},"\u002Findices\u002F",[420,447,448],{"class":441},"$INDEX_ID",[420,450,451],{"class":434},"\u002Freplace-sessions",[420,453,455],{"class":454},"sklAV"," \\\n",[420,457,459,462,465,468],{"class":422,"line":458},2,[420,460,461],{"class":430},"  -H",[420,463,464],{"class":434}," \"Authorization: Bearer ",[420,466,467],{"class":441},"$ZS_KEY",[420,469,470],{"class":434},"\"\n",[411,472,476],{"className":473,"code":474,"language":475,"meta":416,"style":416},"language-json shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","{\n  \"id\": \"5d2c9a40-8a51-4c3e-b8f1-2f6d0e7c9b13\",\n  \"version\": 4,\n  \"status\": \"OPEN\",\n  \"expiresAt\": \"2026-10-16T15:30:00.000Z\",\n  \"commitTaskId\": null\n}\n","json",[379,477,478,483,498,511,524,537,548],{"__ignoreMap":416},[420,479,480],{"class":422,"line":423},[420,481,482],{"class":441},"{\n",[420,484,485,489,492,495],{"class":422,"line":458},[420,486,488],{"class":487},"sb7M8","  \"id\"",[420,490,491],{"class":441},": ",[420,493,494],{"class":434},"\"5d2c9a40-8a51-4c3e-b8f1-2f6d0e7c9b13\"",[420,496,497],{"class":441},",\n",[420,499,501,504,506,509],{"class":422,"line":500},3,[420,502,503],{"class":487},"  \"version\"",[420,505,491],{"class":441},[420,507,508],{"class":430},"4",[420,510,497],{"class":441},[420,512,514,517,519,522],{"class":422,"line":513},4,[420,515,516],{"class":487},"  \"status\"",[420,518,491],{"class":441},[420,520,521],{"class":434},"\"OPEN\"",[420,523,497],{"class":441},[420,525,527,530,532,535],{"class":422,"line":526},5,[420,528,529],{"class":487},"  \"expiresAt\"",[420,531,491],{"class":441},[420,533,534],{"class":434},"\"2026-10-16T15:30:00.000Z\"",[420,536,497],{"class":441},[420,538,540,543,545],{"class":422,"line":539},6,[420,541,542],{"class":487},"  \"commitTaskId\"",[420,544,491],{"class":441},[420,546,547],{"class":430},"null\n",[420,549,551],{"class":422,"line":550},7,[420,552,553],{"class":441},"}\n",[330,555,556,557,390],{},"Only one version can be built at a time. If a reindex or another session is running, the API answers ",[379,558,559],{},"409 VERSION_BUILDING",[400,561,563],{"id":562},"send-the-catalog-in-batches","Send the catalog in batches",[405,565],{"auth":407,"method":408,"path":566},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Freplace-sessions\u002F:sessionId\u002Fdocuments",[330,568,569,570,573,574,577,578,581],{},"The body is the same bare array as an upsert, with the same limits: up to 1000 documents and 10 MB per request. Each batch answers ",[379,571,572],{},"202"," with a ",[379,575,576],{},"SESSION_BATCH"," task. Send an ",[379,579,580],{},"Idempotency-Key"," with each batch so a retry does not send it twice.",[411,583,585],{"className":413,"code":584,"language":415,"meta":416,"style":416},"curl -X POST https:\u002F\u002Fapi.zaproo-search.com\u002Fv1\u002Fprojects\u002F$PROJECT_ID\u002Findices\u002F$INDEX_ID\u002Freplace-sessions\u002F$SESSION_ID\u002Fdocuments \\\n  -H \"Authorization: Bearer $ZS_KEY\" -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Idempotency-Key: nightly-2026-10-16-batch-1\" \\\n  -d '[{\"id\": \"tv-1\", \"title\": \"55 inch OLED TV\", \"price\": 899}]'\n",[379,586,587,614,633,642],{"__ignoreMap":416},[420,588,589,591,593,595,597,599,601,603,606,609,612],{"class":422,"line":423},[420,590,427],{"class":426},[420,592,431],{"class":430},[420,594,435],{"class":434},[420,596,438],{"class":434},[420,598,442],{"class":441},[420,600,445],{"class":434},[420,602,448],{"class":441},[420,604,605],{"class":434},"\u002Freplace-sessions\u002F",[420,607,608],{"class":441},"$SESSION_ID",[420,610,611],{"class":434},"\u002Fdocuments",[420,613,455],{"class":454},[420,615,616,618,620,622,625,628,631],{"class":422,"line":458},[420,617,461],{"class":430},[420,619,464],{"class":434},[420,621,467],{"class":441},[420,623,624],{"class":434},"\"",[420,626,627],{"class":430}," -H",[420,629,630],{"class":434}," \"Content-Type: application\u002Fjson\"",[420,632,455],{"class":454},[420,634,635,637,640],{"class":422,"line":500},[420,636,461],{"class":430},[420,638,639],{"class":434}," \"Idempotency-Key: nightly-2026-10-16-batch-1\"",[420,641,455],{"class":454},[420,643,644,647],{"class":422,"line":513},[420,645,646],{"class":430},"  -d",[420,648,649],{"class":434}," '[{\"id\": \"tv-1\", \"title\": \"55 inch OLED TV\", \"price\": 899}]'\n",[400,651,653],{"id":652},"check-every-batch","Check every batch",[330,655,656],{},"Poll each batch task until it finishes. A document that failed in a batch is not in the new version, so it disappears from search when you commit. Fix and resend failed documents before you commit.",[400,658,660],{"id":659},"commit","Commit",[405,662],{"auth":407,"method":408,"path":663},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Freplace-sessions\u002F:sessionId\u002Fcommit",[330,665,666,667,573,669,672,673,676,677,680,681,684],{},"The answer is ",[379,668,572],{},[379,670,671],{},"SESSION_COMMIT"," task. The session moves to ",[379,674,675],{},"COMMITTING"," and takes no more batches. When the task succeeds, the session is ",[379,678,679],{},"COMMITTED",", the index's ",[379,682,683],{},"activeVersion"," is the session's version and search returns the new catalog.",[325,686,688],{"id":687},"watch-a-session","Watch a session",[405,690],{"auth":691,"method":692,"path":693},"Project member or any secret key","GET","\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Freplace-sessions\u002F:sessionId",[330,695,696,697,700],{},"The session's ",[379,698,699],{},"status"," is one of:",[702,703,704,716],"table",{},[705,706,707],"thead",{},[708,709,710,713],"tr",{},[711,712,314],"th",{},[711,714,715],{},"Meaning",[717,718,719,730,739,748,758,772],"tbody",{},[708,720,721,727],{},[722,723,724],"td",{},[379,725,726],{},"OPEN",[722,728,729],{},"Takes batches.",[708,731,732,736],{},[722,733,734],{},[379,735,675],{},[722,737,738],{},"Commit is running. No more batches.",[708,740,741,745],{},[722,742,743],{},[379,744,679],{},[722,746,747],{},"The new catalog is live.",[708,749,750,755],{},[722,751,752],{},[379,753,754],{},"ABORTED",[722,756,757],{},"You aborted it. The live index is as it was.",[708,759,760,765],{},[722,761,762],{},[379,763,764],{},"EXPIRED",[722,766,767,768,771],{},"It stayed open past ",[379,769,770],{},"expiresAt",". The live index is as it was.",[708,773,774,779],{},[722,775,776],{},[379,777,778],{},"FAILED",[722,780,781,782,784],{},"The commit failed. The live index is as it was, and the index status is ",[379,783,778],{}," until the next build.",[330,786,787,788,791,792,796,797,800],{},"The index itself names its open session in ",[379,789,790],{},"openReplaceSessionId",". In the cabinet, the ",[793,794,795],"strong",{},"Reindex"," panel on the index overview and on ",[793,798,799],{},"Fields & mapping"," shows an open session with its status, version and expiry. Sessions are opened, filled and committed through the API only.",[325,802,804],{"id":803},"abort-a-session","Abort a session",[405,806],{"auth":407,"method":408,"path":807},"\u002Fv1\u002Fprojects\u002F:projectId\u002Findices\u002F:indexId\u002Freplace-sessions\u002F:sessionId\u002Fabort",[330,809,810,811,814,815,817,818,821],{},"Aborting drops the new version and cancels batches that have not finished. Search never sees any of it. In the cabinet, click ",[793,812,813],{},"Abort session"," in the ",[793,816,795],{}," panel. ",[793,819,820],{},"Cancel reindex"," does not apply to a session.",[325,823,825],{"id":824},"session-lifetime","Session lifetime",[330,827,828,829,831,832,834],{},"A session expires 6 hours after it was opened, counted from the open, not from the last batch. Within a minute of ",[379,830,770],{},", an open session becomes ",[379,833,764],{}," and its new version is dropped. Commit before then. A session that is already committing does not expire.",[325,836,838],{"id":837},"errors","Errors",[702,840,841,851],{},[705,842,843],{},[708,844,845,848],{},[711,846,847],{},"Code",[711,849,850],{},"When",[717,852,853,862,874,884],{},[708,854,855,859],{},[722,856,857],{},[379,858,559],{},[722,860,861],{},"Opening a session while a reindex or another session builds a version.",[708,863,864,869],{},[722,865,866],{},[379,867,868],{},"409 SESSION_NOT_OPEN",[722,870,871,872,390],{},"Sending a batch, committing or aborting a session that is no longer ",[379,873,726],{},[708,875,876,881],{},[722,877,878],{},[379,879,880],{},"404 SESSION_NOT_FOUND",[722,882,883],{},"The session does not exist or belongs to another index.",[708,885,886,891],{},[722,887,888],{},[379,889,890],{},"400 INVALID_DOCUMENTS",[722,892,893],{},"A batch has documents that do not match the mapping. Nothing from that batch is written.",[325,895,897],{"id":896},"common-mistakes","Common mistakes",[337,899,900,903,909],{},[340,901,902],{},"Committing before every batch task has finished without errors. Commit waits for the batches, but it does not check their results. Failed documents are missing from the new catalog.",[340,904,905,906,908],{},"Opening a session and never committing it. The index stays ",[379,907,381],{},", and no reindex or breaking mapping change can start until the session expires 6 hours later. Abort it instead.",[340,910,911],{},"Running a full sync for a handful of changes. Upserts are enough, and they do not block other builds.",[325,913,915],{"id":914},"related","Related",[337,917,918,922],{},[340,919,920],{},[353,921,97],{"href":98},[340,923,924],{},[353,925,109],{"href":110},[927,928,929],"style",{},"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 .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .sklAV, html code.shiki .sklAV{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF9492}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 .sb7M8, html code.shiki .sb7M8{--shiki-light:#024C1A;--shiki-default:#024C1A;--shiki-dark:#72F088}",{"title":416,"searchDepth":458,"depth":458,"links":931},[932,933,934,940,941,942,943,944,945],{"id":327,"depth":458,"text":328},{"id":359,"depth":458,"text":360},{"id":393,"depth":458,"text":394,"children":935},[936,937,938,939],{"id":402,"depth":500,"text":403},{"id":562,"depth":500,"text":563},{"id":652,"depth":500,"text":653},{"id":659,"depth":500,"text":660},{"id":687,"depth":458,"text":688},{"id":803,"depth":458,"text":804},{"id":824,"depth":458,"text":825},{"id":837,"depth":458,"text":838},{"id":896,"depth":458,"text":897},{"id":914,"depth":458,"text":915},"md",{},{"icon":107},{"title":103,"description":106},"WjzfaZl9L0sJw87-G6urk_m-DatbV0ENzW0o7ZEMHws",[952,953],{"title":97,"path":98,"stem":99,"description":100,"icon":101,"children":-1},{"title":109,"path":110,"stem":111,"description":112,"icon":113,"children":-1},1792794344455]