List Storefront Products
curl --request GET \
--url https://api.getscale.ng/api/v1/storefront/shop/{shopId}/products \
--header 'X-Shop-API-Key: <x-shop-api-key>'import requests
url = "https://api.getscale.ng/api/v1/storefront/shop/{shopId}/products"
headers = {"X-Shop-API-Key": "<x-shop-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Shop-API-Key': '<x-shop-api-key>'}};
fetch('https://api.getscale.ng/api/v1/storefront/shop/{shopId}/products', 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.getscale.ng/api/v1/storefront/shop/{shopId}/products",
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-Shop-API-Key: <x-shop-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.getscale.ng/api/v1/storefront/shop/{shopId}/products"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Shop-API-Key", "<x-shop-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.getscale.ng/api/v1/storefront/shop/{shopId}/products")
.header("X-Shop-API-Key", "<x-shop-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getscale.ng/api/v1/storefront/shop/{shopId}/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Shop-API-Key"] = '<x-shop-api-key>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"products": [
{
"id": 1,
"productName": "Air Max Sneaker",
"productSlug": "air-max-sneaker",
"productDescription": "Running athletic shoes",
"productPrice": 12000,
"currencySymbol": "₦",
"media": [
{
"mediaUrl": "https://cdn.getscale.ng/products/sneaker1.jpg",
"mediaType": "image",
"mediaIndex": 0
}
]
}
],
"totalCount": 42,
"limit": 10,
"offset": 0
}
}
{
"message": "FORM_VALIDATION_ERROR",
"code": 400,
"validationErrors": [
{
"path": [
"sortBy"
],
"message": "Invalid enum value. Expected 'newest' | 'oldest' | 'name' | 'price_low' | 'price_high', received 'invalid_sort'"
}
]
}
Products Catalog
List Storefront Products
GET
/
api
/
v1
/
storefront
/
shop
/
{shopId}
/
products
List Storefront Products
curl --request GET \
--url https://api.getscale.ng/api/v1/storefront/shop/{shopId}/products \
--header 'X-Shop-API-Key: <x-shop-api-key>'import requests
url = "https://api.getscale.ng/api/v1/storefront/shop/{shopId}/products"
headers = {"X-Shop-API-Key": "<x-shop-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Shop-API-Key': '<x-shop-api-key>'}};
fetch('https://api.getscale.ng/api/v1/storefront/shop/{shopId}/products', 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.getscale.ng/api/v1/storefront/shop/{shopId}/products",
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-Shop-API-Key: <x-shop-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.getscale.ng/api/v1/storefront/shop/{shopId}/products"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Shop-API-Key", "<x-shop-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.getscale.ng/api/v1/storefront/shop/{shopId}/products")
.header("X-Shop-API-Key", "<x-shop-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getscale.ng/api/v1/storefront/shop/{shopId}/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Shop-API-Key"] = '<x-shop-api-key>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"products": [
{
"id": 1,
"productName": "Air Max Sneaker",
"productSlug": "air-max-sneaker",
"productDescription": "Running athletic shoes",
"productPrice": 12000,
"currencySymbol": "₦",
"media": [
{
"mediaUrl": "https://cdn.getscale.ng/products/sneaker1.jpg",
"mediaType": "image",
"mediaIndex": 0
}
]
}
],
"totalCount": 42,
"limit": 10,
"offset": 0
}
}
{
"message": "FORM_VALIDATION_ERROR",
"code": 400,
"validationErrors": [
{
"path": [
"sortBy"
],
"message": "Invalid enum value. Expected 'newest' | 'oldest' | 'name' | 'price_low' | 'price_high', received 'invalid_sort'"
}
]
}
Retrieves a paginated list of all active products inside the shop catalog. Supports keyword search queries against names/descriptions, category ID filtering, curated collection filtering, and custom sorting options.
You can use this endpoint to render search bars, filter sidebars, product grids, and pagination lists on product index pages.
Authorizations
string
required
Your Publishable Key (
pk_live_... or pk_test_...) generated from the Developer settings in your dashboard.Path Parameters
string
required
The unique UUID of the shop.
Query Parameters
number
default:"20"
Number of items to return. Must be a positive integer.
number
default:"0"
Number of items to skip for paging. Must be non-negative.
string
A keyword search query to filter products by title or description matching.
number
Filter products belonging to a specific category ID.
number
Filter products mapped to a specific curated collection ID.
string
default:"newest"
Results sorting field. Options:
newest, oldest, name, price_low (ascending), price_high (descending).{
"status": "success",
"data": {
"products": [
{
"id": 1,
"productName": "Air Max Sneaker",
"productSlug": "air-max-sneaker",
"productDescription": "Running athletic shoes",
"productPrice": 12000,
"currencySymbol": "₦",
"media": [
{
"mediaUrl": "https://cdn.getscale.ng/products/sneaker1.jpg",
"mediaType": "image",
"mediaIndex": 0
}
]
}
],
"totalCount": 42,
"limit": 10,
"offset": 0
}
}
{
"message": "FORM_VALIDATION_ERROR",
"code": 400,
"validationErrors": [
{
"path": [
"sortBy"
],
"message": "Invalid enum value. Expected 'newest' | 'oldest' | 'name' | 'price_low' | 'price_high', received 'invalid_sort'"
}
]
}