Find an API

Search public APIs with auth details & Postman guides

← All APIs

Legacy Search API

vtex · Company

Company No Auth Free & Open API

> 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

No authentication requiredFree to use with no key needed.

Sample Requests

GET Product Search Autocomplete

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`

https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/buscaautocomplete?productNameContains=jeans

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
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));
GET Search for Products with Filter, Order and Pagination

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:

https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/products/search?O=OrderByNameASC&fq=C:/1000041/1000049/&ft=television&_to=50&_from=1

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
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));
GET Get Category Facets

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:

https://api.apis.guru/v2/specs/vtex.local/Search-API/1.0/api/catalog_system/pub/facets/category/{categoryId}?_to=50&_from=1

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
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

Get Postman ↗
  1. 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?

Open documentation ↗