Search products
curl --request GET \
--url https://api.upstackdata.com/accounts/api/products/search \
--header 'x-api-key: <api-key>' \
--header 'x-pixel-id: <api-key>'import requests
url = "https://api.upstackdata.com/accounts/api/products/search"
headers = {
"x-api-key": "<api-key>",
"x-pixel-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>', 'x-pixel-id': '<api-key>'}};
fetch('https://api.upstackdata.com/accounts/api/products/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.upstackdata.com/accounts/api/products/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>",
"x-pixel-id: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.upstackdata.com/accounts/api/products/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("x-pixel-id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.upstackdata.com/accounts/api/products/search")
.header("x-api-key", "<api-key>")
.header("x-pixel-id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upstackdata.com/accounts/api/products/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
request["x-pixel-id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrls": [
"<string>"
],
"hasOnlyDefaultVariant": true,
"variants": [
{
"variantId": "<string>",
"variantTitle": "<string>",
"sku": "<string>",
"currency": "<string>",
"currentPrice": 123,
"shopifyCost": 123,
"effectiveCost": 123,
"costSource": "manual",
"handlingFee": 123,
"quantity": 123
}
],
"handle": "<string>",
"vendor": "<string>",
"productType": "<string>"
}
],
"pagination": {
"hasMore": true,
"cursor": "<string>"
}
}{
"message": "<string>",
"errors": [
{
"message": "<string>",
"key": "<string>",
"path": [
"<string>"
]
}
]
}{
"message": "<string>",
"errors": [
{
"message": "<string>",
"key": "<string>",
"path": [
"<string>"
]
}
]
}{
"message": "<string>",
"errors": [
{
"message": "<string>",
"key": "<string>",
"path": [
"<string>"
]
}
]
}PRODUCTS
Search products
Search products by title / SKU / variant. Cursor-paginated.
Pass ids instead to fetch specific products by id. That looks them up
directly rather than searching, so q, pageSize and cursor are
ignored and pagination.hasMore is always false.
Required scope: costs:read.
GET
/
accounts
/
api
/
products
/
search
Search products
curl --request GET \
--url https://api.upstackdata.com/accounts/api/products/search \
--header 'x-api-key: <api-key>' \
--header 'x-pixel-id: <api-key>'import requests
url = "https://api.upstackdata.com/accounts/api/products/search"
headers = {
"x-api-key": "<api-key>",
"x-pixel-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>', 'x-pixel-id': '<api-key>'}};
fetch('https://api.upstackdata.com/accounts/api/products/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.upstackdata.com/accounts/api/products/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>",
"x-pixel-id: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.upstackdata.com/accounts/api/products/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("x-pixel-id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.upstackdata.com/accounts/api/products/search")
.header("x-api-key", "<api-key>")
.header("x-pixel-id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upstackdata.com/accounts/api/products/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
request["x-pixel-id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrls": [
"<string>"
],
"hasOnlyDefaultVariant": true,
"variants": [
{
"variantId": "<string>",
"variantTitle": "<string>",
"sku": "<string>",
"currency": "<string>",
"currentPrice": 123,
"shopifyCost": 123,
"effectiveCost": 123,
"costSource": "manual",
"handlingFee": 123,
"quantity": 123
}
],
"handle": "<string>",
"vendor": "<string>",
"productType": "<string>"
}
],
"pagination": {
"hasMore": true,
"cursor": "<string>"
}
}{
"message": "<string>",
"errors": [
{
"message": "<string>",
"key": "<string>",
"path": [
"<string>"
]
}
]
}{
"message": "<string>",
"errors": [
{
"message": "<string>",
"key": "<string>",
"path": [
"<string>"
]
}
]
}{
"message": "<string>",
"errors": [
{
"message": "<string>",
"key": "<string>",
"path": [
"<string>"
]
}
]
}Authorizations
Your Upstack API key. Starts with upstack_.
The pixel id the request targets.
Query Parameters
Search term (matched against title / SKU / variant).
Required range:
1 <= x <= 100Pagination cursor from a previous response's pagination.cursor.
Comma-separated product ids. Fetches those products directly instead of searching. Duplicates are ignored; at most 100 ids per request.
Whether each product carries its variants. Defaults to true when
searching and false when fetching by ids.
Was this page helpful?