Update Product
curl --request PUT \
--url https://api.launchmystore.io/api/v1/products/:id.json \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"body_html": "<string>",
"handle": "<string>",
"status": "<string>",
"tags": [
{}
],
"variants": [
{
"price": 123,
"compare_at_price": 123,
"inventory_quantity": 123
}
]
}
'import requests
url = "https://api.launchmystore.io/api/v1/products/:id.json"
payload = {
"title": "<string>",
"body_html": "<string>",
"handle": "<string>",
"status": "<string>",
"tags": [{}],
"variants": [
{
"price": 123,
"compare_at_price": 123,
"inventory_quantity": 123
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
body_html: '<string>',
handle: '<string>',
status: '<string>',
tags: [{}],
variants: [{price: 123, compare_at_price: 123, inventory_quantity: 123}]
})
};
fetch('https://api.launchmystore.io/api/v1/products/:id.json', 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.launchmystore.io/api/v1/products/:id.json",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'body_html' => '<string>',
'handle' => '<string>',
'status' => '<string>',
'tags' => [
[
]
],
'variants' => [
[
'price' => 123,
'compare_at_price' => 123,
'inventory_quantity' => 123
]
]
]),
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.launchmystore.io/api/v1/products/:id.json"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"body_html\": \"<string>\",\n \"handle\": \"<string>\",\n \"status\": \"<string>\",\n \"tags\": [\n {}\n ],\n \"variants\": [\n {\n \"price\": 123,\n \"compare_at_price\": 123,\n \"inventory_quantity\": 123\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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))
}HttpResponse<String> response = Unirest.put("https://api.launchmystore.io/api/v1/products/:id.json")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"body_html\": \"<string>\",\n \"handle\": \"<string>\",\n \"status\": \"<string>\",\n \"tags\": [\n {}\n ],\n \"variants\": [\n {\n \"price\": 123,\n \"compare_at_price\": 123,\n \"inventory_quantity\": 123\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.launchmystore.io/api/v1/products/:id.json")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"body_html\": \"<string>\",\n \"handle\": \"<string>\",\n \"status\": \"<string>\",\n \"tags\": [\n {}\n ],\n \"variants\": [\n {\n \"price\": 123,\n \"compare_at_price\": 123,\n \"inventory_quantity\": 123\n }\n ]\n}"
response = http.request(request)
puts response.read_bodyProducts
Update Product
Update an existing product
PUT
/
api
/
v1
/
products
/
:id.json
Update Product
curl --request PUT \
--url https://api.launchmystore.io/api/v1/products/:id.json \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"body_html": "<string>",
"handle": "<string>",
"status": "<string>",
"tags": [
{}
],
"variants": [
{
"price": 123,
"compare_at_price": 123,
"inventory_quantity": 123
}
]
}
'import requests
url = "https://api.launchmystore.io/api/v1/products/:id.json"
payload = {
"title": "<string>",
"body_html": "<string>",
"handle": "<string>",
"status": "<string>",
"tags": [{}],
"variants": [
{
"price": 123,
"compare_at_price": 123,
"inventory_quantity": 123
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
body_html: '<string>',
handle: '<string>',
status: '<string>',
tags: [{}],
variants: [{price: 123, compare_at_price: 123, inventory_quantity: 123}]
})
};
fetch('https://api.launchmystore.io/api/v1/products/:id.json', 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.launchmystore.io/api/v1/products/:id.json",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'body_html' => '<string>',
'handle' => '<string>',
'status' => '<string>',
'tags' => [
[
]
],
'variants' => [
[
'price' => 123,
'compare_at_price' => 123,
'inventory_quantity' => 123
]
]
]),
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.launchmystore.io/api/v1/products/:id.json"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"body_html\": \"<string>\",\n \"handle\": \"<string>\",\n \"status\": \"<string>\",\n \"tags\": [\n {}\n ],\n \"variants\": [\n {\n \"price\": 123,\n \"compare_at_price\": 123,\n \"inventory_quantity\": 123\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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))
}HttpResponse<String> response = Unirest.put("https://api.launchmystore.io/api/v1/products/:id.json")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"body_html\": \"<string>\",\n \"handle\": \"<string>\",\n \"status\": \"<string>\",\n \"tags\": [\n {}\n ],\n \"variants\": [\n {\n \"price\": 123,\n \"compare_at_price\": 123,\n \"inventory_quantity\": 123\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.launchmystore.io/api/v1/products/:id.json")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"body_html\": \"<string>\",\n \"handle\": \"<string>\",\n \"status\": \"<string>\",\n \"tags\": [\n {}\n ],\n \"variants\": [\n {\n \"price\": 123,\n \"compare_at_price\": 123,\n \"inventory_quantity\": 123\n }\n ]\n}"
response = http.request(request)
puts response.read_bodyUpdate Product
Updates an existing product. Only include the fields you want to update.Request
curl -X PUT "https://api.launchmystore.io/api/v1/products/8a1f3c2e-6b4d-4e8a-9c1f-2d3e4f5a6b7c.json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Classic T-Shirt - Updated",
"status": "active",
"tags": ["cotton", "casual", "bestseller"]
}'
const response = await fetch('https://api.launchmystore.io/api/v1/products/8a1f3c2e-6b4d-4e8a-9c1f-2d3e4f5a6b7c.json', {
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Classic T-Shirt - Updated',
status: 'active',
tags: ['cotton', 'casual', 'bestseller']
})
});
Path Parameters
The product ID. Accepts either the product UUID or the numeric product id.
Body Parameters
All body parameters are optional. Only include the fields you want to update. Any field not listed below is ignored.The product title.
Product description (supports HTML).
URL-safe handle.
Product status:
active, draft, or archived.Array of tags (replaces existing tags).
Array of variants. On update, only the first entry’s pricing and stock
are applied — they are mirrored onto the product-level price/stock columns.
Existing variant rows are not modified, and additional entries are ignored.
Response
Returns the updated product as a bareproduct object (Shopify-compatible
shape). Money values are returned as decimal strings, id is the numeric
product id, and product_id is the product UUID. The vendor and
product_type fields are derived from the product’s category, not from the
request body.
Example Response
{
"product": {
"id": 481023,
"product_id": "8a1f3c2e-6b4d-4e8a-9c1f-2d3e4f5a6b7c",
"title": "Classic T-Shirt - Updated",
"handle": "classic-t-shirt",
"body_html": "<p>A comfortable cotton t-shirt.</p>",
"vendor": "Apparel",
"product_type": "Apparel",
"published_scope": "global",
"tags": ["cotton", "casual", "bestseller"],
"price": "25.00",
"compare_at_price": null,
"variants": [
{
"id": 902145,
"product_id": "8a1f3c2e-6b4d-4e8a-9c1f-2d3e4f5a6b7c",
"title": "Small / Black",
"price": "25.00",
"compare_at_price": null,
"sku": "TSHIRT-S-BLK",
"inventory_quantity": 50,
"available": true
}
],
"images": [
{
"id": 1,
"product_id": "8a1f3c2e-6b4d-4e8a-9c1f-2d3e4f5a6b7c",
"src": "https://cdn.launchmystore.io/images/tshirt.jpg",
"position": 1
}
],
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-25T15:00:00Z"
}
}
Error Response
Errors are returned as a Shopify-styleerrors object:
{
"errors": {
"base": ["Product not found"]
}
}
Error Codes
| Status | Description |
|---|---|
401 | Invalid or missing access token |
403 | App doesn’t have the write_products scope |
404 | Product with the specified ID does not exist |
400 | Invalid request body |
⌘I