curl --request GET \
--url https://store.salesive.com/api/v1/products/{id} \
--header 'Authorization: Bearer <token>' \
--header 'x-shop-id: <api-key>'import requests
url = "https://store.salesive.com/api/v1/products/{id}"
headers = {
"Authorization": "Bearer <token>",
"x-shop-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'x-shop-id': '<api-key>'}
};
fetch('https://store.salesive.com/api/v1/products/{id}', 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://store.salesive.com/api/v1/products/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"x-shop-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://store.salesive.com/api/v1/products/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("x-shop-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://store.salesive.com/api/v1/products/{id}")
.header("Authorization", "Bearer <token>")
.header("x-shop-id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://store.salesive.com/api/v1/products/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["x-shop-id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"price": 123,
"itemType": "product",
"catalogType": "product",
"description": "<string>",
"currency": "<string>",
"category": "<string>",
"status": "<string>",
"images": [
"<string>"
],
"addons": [
{
"name": "<string>",
"price": 123,
"maxQuantity": 2,
"available": true,
"_id": "<string>",
"description": "<string>",
"image": "<string>"
}
],
"variants": [
{
"sku": "<string>",
"options": {},
"stock": 1
}
]
}Get product
Return a single catalog item by its ID or slug.
curl --request GET \
--url https://store.salesive.com/api/v1/products/{id} \
--header 'Authorization: Bearer <token>' \
--header 'x-shop-id: <api-key>'import requests
url = "https://store.salesive.com/api/v1/products/{id}"
headers = {
"Authorization": "Bearer <token>",
"x-shop-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'x-shop-id': '<api-key>'}
};
fetch('https://store.salesive.com/api/v1/products/{id}', 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://store.salesive.com/api/v1/products/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"x-shop-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://store.salesive.com/api/v1/products/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("x-shop-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://store.salesive.com/api/v1/products/{id}")
.header("Authorization", "Bearer <token>")
.header("x-shop-id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://store.salesive.com/api/v1/products/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["x-shop-id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"price": 123,
"itemType": "product",
"catalogType": "product",
"description": "<string>",
"currency": "<string>",
"category": "<string>",
"status": "<string>",
"images": [
"<string>"
],
"addons": [
{
"name": "<string>",
"price": 123,
"maxQuantity": 2,
"available": true,
"_id": "<string>",
"description": "<string>",
"image": "<string>"
}
],
"variants": [
{
"sku": "<string>",
"options": {},
"stock": 1
}
]
}Request
GET /products/69fb494e51280f9f65d059ae
x-shop-id: {{shopId}}
id path segment. Food and service catalogs currently resolve by MongoDB item ID.Headers
| Header | Type | Description |
|---|---|---|
x-shop-id | string | Identify the shop context. |
Path parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Product ID or slug. |
catalogType: "food" / itemType: "food", and business storefronts return catalogType: "service" / itemType: "service" on the item payload. Service items include addons and video.Successful response
{
"status": 200,
"success": true,
"message": "Food found",
"data": {
"_id": "68e5bb463a1fc56a8ac150c0",
"shop": {
"_id": "68b8f52575da81b332af29f1",
"name": "Sample Kitchen",
"currency": {
"_id": "68c54dd440e9beff3260c2b2",
"name": "Nigerian Naira",
"symbol": "₦",
"code": "NGN",
"id": "68c54dd440e9beff3260c2b2"
},
"logo": "https://cdn.salesive.com/logos/shop.webp",
"id": "68b8f52575da81b332af29f1"
},
"category": {
"_id": "69fb494ddf63302ed89ba11d",
"name": "Pizza",
"id": "69fb494ddf63302ed89ba11d"
},
"createdAt": "2026-05-06T13:59:42.799Z",
"description": "<p>Stone-baked pizza with basil and tomato sauce</p>",
"featured": false,
"images": [
"https://cdn.salesive.com/foods/margherita.webp"
],
"name": "Margherita Pizza",
"price": 8500,
"promoPrice": 7500,
"updatedAt": "2026-05-06T14:44:04.903Z",
"video": null,
"available": true,
"addons": [
{
"_id": "68e5bb463a1fc56a8ac150d1",
"name": "Extra Cheese",
"description": "A richer mozzarella finish baked on top.",
"price": 1500,
"maxQuantity": 3,
"image": null,
"available": true
}
],
"id": "68e5bb463a1fc56a8ac150c0",
"inWishlist": false,
"itemType": "food",
"catalogType": "food"
}
}
Error response
{
"status": 404,
"success": false,
"message": "Food not found",
"data": {}
}
Authorizations
JWT issued by the Salesive Store API for authenticated shoppers.
Optional storefront identifier sent as a header to scope responses to a specific shop. Try It requests remember this value once provided.
Headers
Optional identifier that scopes responses to a specific storefront when the referer cannot be inferred.
Path Parameters
Product's MongoDB identifier or slug.
Response
Product detail response.
Unique product identifier.
Display name of the product.
Unit price for the product.
Catalog item type.
product, food, service Catalog response type for the current storefront.
product, food, service Rich description of the product.
ISO currency code for the product price.
Identifier of the category the product belongs to.
Derived status such as active or archived.
Optional list of image URLs for the product.
Available add-ons for food catalog items.
Show child attributes
Show child attributes
Optional list of variant definitions for the product.
Show child attributes
Show child attributes
Was this page helpful?

