Products
Claim product serials
Atomically claims and removes the requested number of available serials from a base serial product without variants, then returns the claimed serial values plus the updated remaining stock. Use this endpoint when you want serial values directly and do not want to manually fetch serial IDs first.
POST
/
dev
/
v1
/
products
/
{id}
/
serials
/
claim
Claim product serials
curl --request POST \
--url https://api.shoppex.io/dev/v1/products/{id}/serials/claim \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"amount": 2
}'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({amount: 2})
};
fetch('https://api.shoppex.io/dev/v1/products/{id}/serials/claim', 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/claim"
payload = { "amount": 2 }
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/claim",
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([
'amount' => 2
]),
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/claim"
payload := strings.NewReader("{\n \"amount\": 2\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": {
"claimed_count": 2,
"remaining_stock": 7,
"serials": [
{
"id": "serial_1",
"serial": "ABC-123",
"variant_id": null,
"variant_title": null,
"created_at": "2026-03-16T10:00:00.000Z"
},
{
"id": "serial_2",
"serial": "XYZ-789",
"variant_id": null,
"variant_title": null,
"created_at": "2026-03-16T10:01:00.000Z"
}
]
}
}⌘I
Claim product serials
curl --request POST \
--url https://api.shoppex.io/dev/v1/products/{id}/serials/claim \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"amount": 2
}'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({amount: 2})
};
fetch('https://api.shoppex.io/dev/v1/products/{id}/serials/claim', 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/claim"
payload = { "amount": 2 }
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/claim",
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([
'amount' => 2
]),
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/claim"
payload := strings.NewReader("{\n \"amount\": 2\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": {
"claimed_count": 2,
"remaining_stock": 7,
"serials": [
{
"id": "serial_1",
"serial": "ABC-123",
"variant_id": null,
"variant_title": null,
"created_at": "2026-03-16T10:00:00.000Z"
},
{
"id": "serial_2",
"serial": "XYZ-789",
"variant_id": null,
"variant_title": null,
"created_at": "2026-03-16T10:01:00.000Z"
}
]
}
}