Legacy Search API
vtex · Company
> Check the new [Search onboarding guide](https://developers.vtex.com/vtex-rest-api/docs/search-onboarding). We created this guide to improve the onboarding experience for developers at VTEX. It assembles all documentation on our Developer Portal about Search and is organized by focusing on the developer's journey. This API lets you search and sort products in the Catalog using Fulltext, Category and Brand search terms. Retrieve product data to create custom searches and product shelves
Authentication
Sample Requests
Retrieves product's information related to the searched string. `{{searchString}} is the part of string the user is looking for. E.g.: `ref` | `refrig` | `refrigerator`
Hover any highlighted part to learn what it does
| Accept | application/json |
| Content-Type | application/json |
curl -X GET "https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/buscaautocomplete?productNameContains=jeans" \ -H "Accept: application/json" \ -H "Content-Type: application/json"
import requests
params = {
"productNameContains": "jeans"
}
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
response = requests.get(
"https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/buscaautocomplete",
params=params,
headers=headers,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/buscaautocomplete');
url.searchParams.set('productNameContains', 'jeans');
const response = await fetch(url, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/buscaautocomplete")
q := baseURL.Query()
q.Set("productNameContains", "jeans")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("Accept", "application/json")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/buscaautocomplete")
uri.query = URI.encode_www_form({
"productNameContains" => "jeans"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["Accept"] = "application/json"
req["Content-Type"] = "application/json"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/buscaautocomplete?" . http_build_query([
"productNameContains" => "jeans"
]);
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"Accept: application/json",
"Content-Type: application/json"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Retrieves general information about the store products. This information can be filtered and ordered by a number of options. It also can be paginated, filtered and ordered. ## Filters - **Filter by full text** - `ft={searchWord}` E.g.: `ft=television` - **Filter by category** - `fq=C:
Hover any highlighted part to learn what it does
| Accept | application/json |
| Content-Type | application/json |
curl -X GET "https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/products/search?O=OrderByNameASC&fq=C%3A%2F1000041%2F1000049%2F&ft=television&_to=50&_from=1" \ -H "Accept: application/json" \ -H "Content-Type: application/json"
import requests
params = {
"O": "OrderByNameASC",
"fq": "C:/1000041/1000049/",
"ft": "television",
"_to": "50",
"_from": "1"
}
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
response = requests.get(
"https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/products/search",
params=params,
headers=headers,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/products/search');
url.searchParams.set('O', 'OrderByNameASC');
url.searchParams.set('fq', 'C:/1000041/1000049/');
url.searchParams.set('ft', 'television');
url.searchParams.set('_to', '50');
url.searchParams.set('_from', '1');
const response = await fetch(url, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/products/search")
q := baseURL.Query()
q.Set("O", "OrderByNameASC")
q.Set("fq", "C:/1000041/1000049/")
q.Set("ft", "television")
q.Set("_to", "50")
q.Set("_from", "1")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("Accept", "application/json")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/products/search")
uri.query = URI.encode_www_form({
"O" => "OrderByNameASC",
"fq" => "C:/1000041/1000049/",
"ft" => "television",
"_to" => "50",
"_from" => "1"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["Accept"] = "application/json"
req["Content-Type"] = "application/json"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/products/search?" . http_build_query([
"O" => "OrderByNameASC",
"fq" => "C:/1000041/1000049/",
"ft" => "television",
"_to" => "50",
"_from" => "1"
]);
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"Accept: application/json",
"Content-Type: application/json"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Retrieves the names and IDs of the categories facets. >⚠️ This endpoint returns a maximum of 50 items per response, so the difference between `_from` and `_to` should not exceed this number. The result order is descending, from the highest product ID to the lowest. ## Response body example:
Hover any highlighted part to learn what it does
| Accept | application/json |
| Content-Type | application/json |
curl -X GET "https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/facets/category/{categoryId}?_to=50&_from=1" \
-H "Accept: application/json" \
-H "Content-Type: application/json"import requests
params = {
"_to": "50",
"_from": "1"
}
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
response = requests.get(
"https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/facets/category/{categoryId}",
params=params,
headers=headers,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/facets/category/{categoryId}');
url.searchParams.set('_to', '50');
url.searchParams.set('_from', '1');
const response = await fetch(url, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/facets/category/{categoryId}")
q := baseURL.Query()
q.Set("_to", "50")
q.Set("_from", "1")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("Accept", "application/json")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/facets/category/{categoryId}")
uri.query = URI.encode_www_form({
"_to" => "50",
"_from" => "1"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["Accept"] = "application/json"
req["Content-Type"] = "application/json"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/facets/category/{categoryId}?" . http_build_query([
"_to" => "50",
"_from" => "1"
]);
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"Accept: application/json",
"Content-Type: application/json"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with Legacy Search API?
Legacy Search API is a Company API. Developers commonly use company APIs for:
- enriching CRM records with company firmographics
- building lead-generation and prospecting tools
- verifying business identity and registration details
- monitoring competitors and market intelligence
- powering B2B data enrichment pipelines
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Legacy Search API is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide · Learn about API keys · What is REST?