curl --request PUT \
--url https://api.exowpee.com/v1/catalog/products/{product} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exowpee.com/v1/catalog/products/{product}"
headers = {"Authorization": "Bearer <token>"}
response = requests.put(url, headers=headers)
print(response.text)const options = {method: 'PUT', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.exowpee.com/v1/catalog/products/{product}', 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.exowpee.com/v1/catalog/products/{product}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.exowpee.com/v1/catalog/products/{product}"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.exowpee.com/v1/catalog/products/{product}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/catalog/products/{product}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"handle": "<string>",
"status_counts": {},
"type": "<string>",
"tags": "<string>",
"published_at": "2023-11-07T05:31:56Z",
"title": "<string>",
"description": "<string>",
"is_tracked": true,
"uom_category_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"options": [
"<unknown>"
],
"variants": "<array>",
"images": "<array>",
"category": {},
"organization_id": "<string>"
}{
"message": "<string>",
"errors": {}
}Edit a product
Changes a product title, description, tags, category or tracking setting.
curl --request PUT \
--url https://api.exowpee.com/v1/catalog/products/{product} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exowpee.com/v1/catalog/products/{product}"
headers = {"Authorization": "Bearer <token>"}
response = requests.put(url, headers=headers)
print(response.text)const options = {method: 'PUT', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.exowpee.com/v1/catalog/products/{product}', 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.exowpee.com/v1/catalog/products/{product}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.exowpee.com/v1/catalog/products/{product}"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.exowpee.com/v1/catalog/products/{product}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/catalog/products/{product}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"handle": "<string>",
"status_counts": {},
"type": "<string>",
"tags": "<string>",
"published_at": "2023-11-07T05:31:56Z",
"title": "<string>",
"description": "<string>",
"is_tracked": true,
"uom_category_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"options": [
"<unknown>"
],
"variants": "<array>",
"images": "<array>",
"category": {},
"organization_id": "<string>"
}{
"message": "<string>",
"errors": {}
}products.update
Conditions
- Not accepted: uom_category_id, variants, images and categories cannot be changed through this call.
- The handle must stay unique among the organization’s products (the product itself is ignored).
- The category, when sent, must exist in the organization; send null to clear it.
- Fields omitted keep their current value.
- Changing is_tracked copies the new value to every variant of the product and creates stock records for variants that are newly tracked and had none; turning tracking off does not delete inventory data.
- Changing the category changes the inherited tax configuration of the product’s items; the call preserves the calculability of stored prices while doing so.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Identifier of the product to update (27-character KSUID).
Query Parameters
Response mode. Default none; none answers 204 No Content.
none, resource Comma-separated JSON keys of the root resource (id is always rendered). Available: id, handle, status_counts, type, tags, published_at, title, description, is_tracked, uom_category_id, created_at, updated_at, options, organization_id.
Comma-separated include paths, each optionally followed by its fields in parentheses: units(id,sku),units.uomUnit(id,name). Max depth 6, max 40 paths. Available: variants, variants.vat_rate, variants.taxes, variants.image, variants.inventoryItem, variants.levels, variants.units, images, category, category.vat_rate, category.taxes.
Response
Resource (only with response=resource).
Identifier of the product (27-character KSUID).
Short text identifier of the product, unique within the organization. Built from the title when it was not sent at creation.
Number of variants of the product in each item status (active, draft, archived).
Kind of product: physical, digital or service.
Tags as one text separated by semicolons, or null when none.
Publication date and time in ISO 8601, or null while the product is not published. It is left empty at creation.
Display name of the product.
Free text description; an empty string when none was given.
Whether stock is tracked for the variants of this product. Changing it also changes the tracking of all its variants.
Identifier of the unit-of-measure category that defines the units the product's variants are sold and stocked in (27-character KSUID). It cannot be changed after creation.
Date and time the record was created (ISO 8601, UTC).
Date and time the record was last changed (ISO 8601, UTC).
Options of the product (for example size, colour; stored in lower case), each with its id, name and the list of values used by its variants. Present only when the product's option values are loaded.
Variants of the product. Present only when requested with include=variants.
Pictures of the product. Present only when requested with include=images.
Catalog category of the product, or null when it has none. Present only when requested with include=category.
Identifier of the organization the record belongs to.