Add product serials
curl --request POST \
--url https://api.shoppex.io/dev/v1/products/{id}/serials \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"serials": "ABC-123\nXYZ-789",
"remove_duplicates": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({serials: 'ABC-123\nXYZ-789', remove_duplicates: true})
};
fetch('https://api.shoppex.io/dev/v1/products/{id}/serials', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.shoppex.io/dev/v1/products/{id}/serials"
payload = {
"serials": "ABC-123
XYZ-789",
"remove_duplicates": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.shoppex.io/dev/v1/products/{id}/serials",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'serials' => 'ABC-123
XYZ-789',
'remove_duplicates' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.shoppex.io/dev/v1/products/{id}/serials"
payload := strings.NewReader("{\n \"serials\": \"ABC-123\\nXYZ-789\",\n \"remove_duplicates\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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))
}{
"data": {
"added_count": 2,
"duplicate_in_stock_count": 0,
"duplicate_used_count": 0,
"duplicates_in_batch": 0
}
}Products
Add product serials
Adds serial inventory to a base serial product without variants. This endpoint appends inventory. It does not replace the full serial list. One key per line. Repeated lines within one request are dropped and counted in duplicates_in_batch; set allow_duplicates_in_batch to keep them as separate stock units (placeholder stock). Set remove_duplicates to skip keys the product already has (in stock or delivered). Keys longer than 10,000 characters reject the whole request.
POST
/
dev
/
v1
/
products
/
{id}
/
serials
Add product serials
curl --request POST \
--url https://api.shoppex.io/dev/v1/products/{id}/serials \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"serials": "ABC-123\nXYZ-789",
"remove_duplicates": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({serials: 'ABC-123\nXYZ-789', remove_duplicates: true})
};
fetch('https://api.shoppex.io/dev/v1/products/{id}/serials', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.shoppex.io/dev/v1/products/{id}/serials"
payload = {
"serials": "ABC-123
XYZ-789",
"remove_duplicates": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.shoppex.io/dev/v1/products/{id}/serials",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'serials' => 'ABC-123
XYZ-789',
'remove_duplicates' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.shoppex.io/dev/v1/products/{id}/serials"
payload := strings.NewReader("{\n \"serials\": \"ABC-123\\nXYZ-789\",\n \"remove_duplicates\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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))
}{
"data": {
"added_count": 2,
"duplicate_in_stock_count": 0,
"duplicate_used_count": 0,
"duplicates_in_batch": 0
}
}Authorizations
Use your Shoppex API key in the Authorization header.
Path Parameters
Body
application/jsonapplication/x-www-form-urlencodedmultipart/form-data
Response
200 - application/json
Successful response
The response is of type object.