{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"7ad47538-9331-48d7-add5-c705c50a116b","name":"ZOOVU API V3 PUBLIC","description":"# 5 Minute search setup Guide\n\n**​Please make sure to always use encrypted communication via HTTPS to the API.**\n\n## 1\\. Upload products to the API\n\n​  \nSimply use the \"[create or update products](https://documenter.getpostman.com/view/1933592/SWTBfdoi?version=latest#9e50aefc-87d0-4b02-8bee-ab017d5489ac)\" endpoint to upload products.  \n​  \nLet us use some example data. Just send a POST request to  \n{{BASE}}/products?apiKey={{APIKEY}}\n\n**BASE URL: https://api.data.zoovu.com/**  \n​  \nwith this Body JSON:  \n​\n\n``` javascript\n{\n    \"products\": [\n                {\n            \"identifier\": \"61149\",\n            \"groupIdentifier\": \"61149\",\n            \"name\": \"Branching Life Wall Hanging\",\n            \"productUrl\": \"https://www.tenthousandvillages.com/wall-decor/e252ce8d53a61149d6c2d0a7c5147617\",\n            \"categories\": [\n                {\n                    \"path\": [\n                        \"Home\",\n                        \"Decoration\"\n                    ]\n                },\n                {\n                    \"path\": [\n                        \"Home\",\n                        \"House\",\n                        \"Living Room\"\n                    ]\n                }\n            ],\n            \"settings\": {\n                \"includeUserGroups\": [\n                    \"23\",\n                    \"42\"\n                ],\n                \"excludeUserGroups\": [\n                    \"64\"\n                ]\n            },\n            \"images\": [\n                {\n                    \"url\": \"https://www.tenthousandvillages.com/media/catalog/product/cache/1/large_image/100x100/9df78eab33525d08d6e5fb8d27136e95/6/6/6607890_1.jpg\",\n                    \"type\":\"LARGE\"\n                },\n                {\n                    \"url\": \"https://www.tenthousandvillages.com/media/catalog/product/cache/1/small_image/100x100/9df78eab33525d08d6e5fb8d27136e95/6/6/6607890_1.jpg\",\n                    \"type\":\"SMALL\"\n                },\n                {\n                    \"url\": \"https://www.tenthousandvillages.com/media/catalog/product/cache/1/thumb_image/100x100/9df78eab33525d08d6e5fb8d27136e95/6/6/6607890_1.jpg\",\n                    \"type\":\"THUMB\"\n                }\n            ],\n            \"attributes\": [\n                {\n                    \"key\": \"Price\",\n                    \"value\": \"175\"\n                },\n                {\n                    \"key\": \"Price\",\n                    \"value\": \"170\",\n                    \"userGroups\": [\n                        \"23, 42\"\n                    ]\n                },\n                {\n                    \"key\": \"Color\",\n                    \"value\": \"blue\"\n                },\n                {\n                    \"key\": \"Made in\",\n                    \"value\": \"Peru\"\n                },\n                {\n                    \"key\": \"Description\",\n                    \"value\": \"Blending different colors to create specific hues|Cotton threads form the warp; wool coils form the weft.|Peruvian artisans used coiled wool to create this painterly image with depth and feeling.|Peruvian weavers use wool from sheep of the Andes.|They wash it in a local river|To make coiled wool tapestries|card and dye it.|ready to create a tapestry on a wooden loom.|they roll the wool fibers into long strands - \\\"I love it\\\"\"\n                }\n            ]\n        },{\n            \"identifier\": \"6379b9_B\",\n            \"groupIdentifier\": \"937\",\n            \"name\": \"Garden Kitty Planter (Small)\",\n            \"productUrl\": \"https://www.tenthousandvillages.com/pet-parent/6379b95b7e4577dd7216dd13ae6ba0d4\",\n            \"categories\": [\n                {\n                     \"path\": [\n                         \"Home\",\n                        \"Garden\",\n                        \"Garden Maintainance\"\n                    ]\n                }\n            ],\n            \"image\": \"https://www.tenthousandvillages.com/media/catalog/product/cache/1/small_image/100x100/9df78eab33525d08d6e5fb8d27136e95/6/6/6607890_1.jpg\",\n            \"attributes\": [\n                {\n                    \"key\": \"Price\",\n                    \"value\": \"10.99\"\n                },\n                {\n                    \"key\": \"Price\",\n                    \"value\": \"6.99\",\n                    \"userGroups\" : [\"42\"]\n                },\n                {\n                    \"key\": \"Price\",\n                    \"value\": \"2.99\",\n                    \"userGroups\" : [\"23\"]\n                },\n                {\n                    \"key\": \"Color\",\n                    \"value\": \"red\"\n                },\n                {\n                    \"key\": \"Made in\",\n                    \"value\": \"USA\"\n                },\n                {\n                    \"key\": \"Description\",\n                    \"value\": \"The Garden Kitty Planter is handcrafted in Bangladesh where makers from Corr-The Jute Works showcase their skill in ceramics by crafting each white-washed terracotta planter by hand.|The perfect pot for cat nip!\"\n                }\n            ]\n        },\n        {\n            \"identifier\": \"6379b9_C\",\n            \"groupIdentifier\": \"937\",\n            \"name\": \"Garden Kitty Planter (Small) Typ C\",\n            \"productUrl\": \"https://www.tenthousandvillages.com/pet-parent/6379b95b7e4577dd7216dd13ae6ba0d4\",\n            \"categories\": [\n                {\n                    \"path\": [\n                        \"Home\",\n                        \"Garden\",\n                        \"Garden Maintainance\"\n                    ]\n                }\n            ],\n            \"image\": \"https://www.tenthousandvillages.com/media/catalog/product/cache/1/small_image/100x100/9df78eab33525d08d6e5fb8d27136e95/6/6/6607890_1.jpg\",\n            \"attributes\": [\n                {\n                    \"key\": \"Price\",\n                    \"value\": \"5.99\"\n                },\n                {\n                    \"key\": \"Price\",\n                    \"value\": \"3.99\",\n                    \"userGroups\" : [\"23\"]\n                },\n                {\n                    \"key\": \"Price\",\n                    \"value\": \"7.99\",\n                    \"userGroups\" : [\"42\"]\n                },\n                {\n                    \"key\": \"Made in\",\n                    \"value\": \"Germany\",\n                    \"userGroups\" : [\"23\"]\n                },\n                {\n                    \"key\": \"Color\",\n                    \"value\": \"green\"\n                },\n                {\n                    \"key\": \"Description\",\n                    \"value\": \"The Garden Kitty Planter is handcrafted in Bangladesh where makers from Corr-The Jute Works showcase their skill in ceramics by crafting each white-washed terracotta planter by hand.|The perfect pot for cat nip!\"\n                }\n            ]\n        }\n    ]\n}\n\n ```\n\nIn the request response you will get information about the running task since the update runs **asynchronously** on the server. The response might look like this:  \n​\n\n``` javascript\n{\n    \"message\": \"Update will now be started\",\n    \"status\": \"success\",\n    \"task\": {\n        \"projectId\": 8,\n        \"taskStatus\": \"RUNNING\",\n        \"failure\": false,\n        \"requestTime\": \"1586885089508\",\n        \"startTime\": \"1586885089884\",\n        \"finishTime\": null,\n        \"nrOfItems\": 8,\n        \"progress\": 0,\n        \"id\": \"5e95f1e1b29702008d86d0d8\"\n    }\n}\n\n ```\n\n​  \n​\n\n## 2\\. Wait for the Update to finish\n\n​  \nIn step 1 you received a task id. To check whether the update has been processed you can call the [get task information](https://documenter.getpostman.com/view/1933592/SWTBfdoi?version=latest#3f3467b1-f55c-438a-8ea0-a911f847e6b3) endpoint.  \n​\n\nSimply send a GET request to  \n{{BASE}}/tasks/{{TASKID}}?apiKey={{APIKEY}} and put in the task id from your previous response.  \n​  \nThe task contains a **progress** field with a float value between 0 and 1. If the progress is 1 your update has finished.  \n​\n\n``` javascript\n{\n    \"message\": \"Task received\",\n    \"status\": \"success\",\n    \"task\": {\n        \"projectId\": 8,\n        \"taskStatus\": \"FINISHED\",\n        \"failure\": false,\n        \"requestTime\": \"1586885089508\",\n        \"startTime\": \"1586885089884\",\n        \"finishTime\": \"1586885099136\",\n        \"nrOfItems\": 8,\n        \"progress\": 1,\n        \"id\": \"5e95f1e1b29702008d86d0d8\"\n    }\n}\n\n ```\n\n​\n\n## 3\\. Implement the Search\n\n​  \nThe final step is to implement the search API endpoint and the autosuggestion API endpoint from here: [search](https://documenter.getpostman.com/view/1933592/SWTBfdoi?version=latest#0e67e902-66cb-4c3b-ac36-2a27b46f7615)\n\nPlease make sure to always attach a sessionId query parameter to suggestion/search queries.\n\nAnd also make sure to forward the client IP address via HTTP header called HTTP_CLIENT_IP - otherwise settings like \"max queries per IP per hour\" do not work.\n\nOptional: Of course you may build your own search frontend by implementing the search API endpoints but we already have built a JavaScript plugin that is ready to be used, mobile ready, accessibility tested, and highly customizable. You may use this free of charge.  \n​  \nTake this sample HTML and just replace **PROJECT_ID** with your project id.  \n​  \nThe rest is handled automatically by the imported script as described in more detail here: [https://semantic-studio-docs.zoovu.com/installation-guide](https://semantic-studio-docs.zoovu.com/installation-guide)  \n​\n\n``` html\n<html lang=\"en\">  \n<head>  \n <meta charset=\"utf-8\"/>  \n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\"/>  \n <title>Simple Example</title>  \n  <comment class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;> simple styles for the demo     -->  \n</head>  \n<body>  \n  <comment class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;> the header content of your page    -->  \n  <header id=\"header\">  \n <h1 class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;>Search Example</h1>  \n </header>  \n  <comment class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;> the input field, the id must be placed in the setting \"searchBoxSelector\" at the bottom of the page     -->  \n  <section class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; id=\"search\" role=\"search\" class=\"search\">  \n  <input id=\"searchBox\" type=\"text\" placeholder=\"search\"/>  \n </section>  <comment class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;> the main content area of your page     -->  \n  <main role=\"main\" id=\"main\">  \n </main>  <comment class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;> end main     -->  \n <comment class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;> Beginning of SS360 scripts     -->  <script>  \n  var ss360Config =  \n            {  \n                baseUrl: 'https://api-v3.semknox.com/search?projectId=PROJECT_ID',  \n  siteId: \"PROJECT_ID\",  \n  showImagesResults: true,  \n  showResultLink: false,  \n  showErrors: true,  \n  layout: {  \n                    navigation: {position: \"top\",}  \n                },  \n  style: {defaultCss: true, animationSpeed: 200, themeColor: '#313648'},  \n  searchBox: {selector: \"#searchBox\"},  \n  results: {  \n                    embedConfig: {contentBlock: \"#main\"},  \n  caption: \"Found #COUNT# search results for your query #QUERY#\",  \n  moreResultsButton: \"Show more results\",  \n  noResultsText: \"<p class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;>I got <strong class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27; class=&#x27;preserveHtml&#x27;>NOTHING</b></p>\",  \n  queryCorrectionText: \"Did you mean \\\"#CORRECTION#\\\"?\",  \n  moreResultsPagingSize: 5  \n  },  \n  };  \n  </script>  \n <script type=\"module\" src=\"https://cdn.sitesearch360.com/sitesearch360-v12.mjs\"></script>  \n <script nomodule src=\"https://cdn.sitesearch360.com/sitesearch360-v12.min.js\"></script>  \n</body>  \n</html>\n\n ```\n\n​  \nAnd that's all there is to get the search up an running. Of course there are plenty of configuration options.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"1933592","team":42349,"collectionId":"7ad47538-9331-48d7-add5-c705c50a116b","publishedId":"SWTBfdoi","public":true,"publicUrl":"https://semantic-studio-api-docs.zoovu.com","privateUrl":"https://go.postman.co/documentation/1933592-7ad47538-9331-48d7-add5-c705c50a116b","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0079BC"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2022-06-22T21:05:35.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/bf843838c8fd7743e3158562ff205c5482690626bb06864ac7e91c89fbadf5f2","favicon":"https://zoovu.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://semantic-studio-api-docs.zoovu.com/view/metadata/SWTBfdoi"}