curl --request PATCH \
--url https://api.products.kameleoon.com/import/products \
--header 'Content-Type: application/json' \
--data '
{
"shop_id": "eehj3eu84299kg5ghw5a6743r8",
"shop_secret": "pmd5362597thrgq8k256ep01t0",
"items": [
"1235",
"4337",
"7578"
]
}
'import requests
url = "https://api.products.kameleoon.com/import/products"
payload = {
"shop_id": "eehj3eu84299kg5ghw5a6743r8",
"shop_secret": "pmd5362597thrgq8k256ep01t0",
"items": ["1235", "4337", "7578"]
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
shop_id: 'eehj3eu84299kg5ghw5a6743r8',
shop_secret: 'pmd5362597thrgq8k256ep01t0',
items: ['1235', '4337', '7578']
})
};
fetch('https://api.products.kameleoon.com/import/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.products.kameleoon.com/import/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'shop_id' => 'eehj3eu84299kg5ghw5a6743r8',
'shop_secret' => 'pmd5362597thrgq8k256ep01t0',
'items' => [
'1235',
'4337',
'7578'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.products.kameleoon.com/import/products"
payload := strings.NewReader("{\n \"shop_id\": \"eehj3eu84299kg5ghw5a6743r8\",\n \"shop_secret\": \"pmd5362597thrgq8k256ep01t0\",\n \"items\": [\n \"1235\",\n \"4337\",\n \"7578\"\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.products.kameleoon.com/import/products")
.header("Content-Type", "application/json")
.body("{\n \"shop_id\": \"eehj3eu84299kg5ghw5a6743r8\",\n \"shop_secret\": \"pmd5362597thrgq8k256ep01t0\",\n \"items\": [\n \"1235\",\n \"4337\",\n \"7578\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.products.kameleoon.com/import/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"shop_id\": \"eehj3eu84299kg5ghw5a6743r8\",\n \"shop_secret\": \"pmd5362597thrgq8k256ep01t0\",\n \"items\": [\n \"1235\",\n \"4337\",\n \"7578\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "error",
"message": "Incorrect shop credentials"
}Update available products
Update the list of in-stock products in Kameleoon by sending all available product IDs; Kameleoon marks omitted items as out-of-stock.
curl --request PATCH \
--url https://api.products.kameleoon.com/import/products \
--header 'Content-Type: application/json' \
--data '
{
"shop_id": "eehj3eu84299kg5ghw5a6743r8",
"shop_secret": "pmd5362597thrgq8k256ep01t0",
"items": [
"1235",
"4337",
"7578"
]
}
'import requests
url = "https://api.products.kameleoon.com/import/products"
payload = {
"shop_id": "eehj3eu84299kg5ghw5a6743r8",
"shop_secret": "pmd5362597thrgq8k256ep01t0",
"items": ["1235", "4337", "7578"]
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
shop_id: 'eehj3eu84299kg5ghw5a6743r8',
shop_secret: 'pmd5362597thrgq8k256ep01t0',
items: ['1235', '4337', '7578']
})
};
fetch('https://api.products.kameleoon.com/import/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.products.kameleoon.com/import/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'shop_id' => 'eehj3eu84299kg5ghw5a6743r8',
'shop_secret' => 'pmd5362597thrgq8k256ep01t0',
'items' => [
'1235',
'4337',
'7578'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.products.kameleoon.com/import/products"
payload := strings.NewReader("{\n \"shop_id\": \"eehj3eu84299kg5ghw5a6743r8\",\n \"shop_secret\": \"pmd5362597thrgq8k256ep01t0\",\n \"items\": [\n \"1235\",\n \"4337\",\n \"7578\"\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.products.kameleoon.com/import/products")
.header("Content-Type", "application/json")
.body("{\n \"shop_id\": \"eehj3eu84299kg5ghw5a6743r8\",\n \"shop_secret\": \"pmd5362597thrgq8k256ep01t0\",\n \"items\": [\n \"1235\",\n \"4337\",\n \"7578\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.products.kameleoon.com/import/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"shop_id\": \"eehj3eu84299kg5ghw5a6743r8\",\n \"shop_secret\": \"pmd5362597thrgq8k256ep01t0\",\n \"items\": [\n \"1235\",\n \"4337\",\n \"7578\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "error",
"message": "Incorrect shop credentials"
}List of query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
shop_id | String | Yes | Store Key. Find this in Recommendations > Settings > Store settings in the Kameleoon app. Contact your Customer Success Manager for the key if necessary. |
shop_secret | String | Yes | Secret Key. Find this in Recommendations > Settings > Store settings in the Kameleoon app. Contact your Customer Success Manager for the key if necessary. |
items | List | Yes | A list of product IDs that are in stock. List the identifiers of all products that are available (in-stock). Kameleoon marks items in the database that aren’t included in the PATCH request as not available (out-of-stock). |
Example JSON request
{
"shop_id": "eehj3eu84299kg5ghw5a6743r8",
"shop_secret": "pmd5362597thrgq8k256ep01t0",
"items": ["1235", "4337", "7578"]
}
Body
Store Key. Find this in Recommendations > Settings > Store settings in the Kameleoon app. Contact your Customer Success Manager for the key if necessary.
Secret Key. Find this in Recommendations > Settings > Store settings in the Kameleoon app. Contact your Customer Success Manager for the key if necessary.
IDs of all products that are currently available (in-stock).
Response
Availability updated. Verified against a live response on 2026-09-24: this endpoint returns an empty 204 response on success, not a JSON body — the {"status": "success"} shape only applies to the asynchronous webhook callback payload, if a webhook was provided.
Was this page helpful?