curl --request PUT \
--url https://api.exowpee.com/v1/catalog/bundles/{bundle} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exowpee.com/v1/catalog/bundles/{bundle}"
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/bundles/{bundle}', 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/bundles/{bundle}",
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/bundles/{bundle}"
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/bundles/{bundle}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/catalog/bundles/{bundle}")
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>",
"stockable_id": "<string>",
"title": "<string>",
"handle": "<string>",
"description": "<string>",
"status": "<string>",
"image_url": "<string>",
"sku": "<string>",
"is_taxable": true,
"units": "<array>",
"prices": "<array>",
"inventory_item": {},
"components_count": 123,
"components": "<array>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"vat_rate_id": "<string>",
"tax_configuration_mode": "<string>",
"vat_rate": {},
"taxes": "<array>",
"category_id": "<string>"
}{
"message": "<string>",
"errors": {}
}Edit a bundle
Changes a bundle’s title, description, image, category or tax settings.
curl --request PUT \
--url https://api.exowpee.com/v1/catalog/bundles/{bundle} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exowpee.com/v1/catalog/bundles/{bundle}"
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/bundles/{bundle}', 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/bundles/{bundle}",
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/bundles/{bundle}"
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/bundles/{bundle}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/catalog/bundles/{bundle}")
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>",
"stockable_id": "<string>",
"title": "<string>",
"handle": "<string>",
"description": "<string>",
"status": "<string>",
"image_url": "<string>",
"sku": "<string>",
"is_taxable": true,
"units": "<array>",
"prices": "<array>",
"inventory_item": {},
"components_count": 123,
"components": "<array>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"vat_rate_id": "<string>",
"tax_configuration_mode": "<string>",
"vat_rate": {},
"taxes": "<array>",
"category_id": "<string>"
}{
"message": "<string>",
"errors": {}
}bundles.update
Conditions
- An archived bundle cannot be modified.
- components, status, prices, sku and barcode are refused on update: use the component, activate, archive and price routes instead.
- The handle must stay unique within the company (the bundle’s own handle is ignored).
- category_id, when sent, must be a category of the organization.
- is_tracked, when sent, must be true.
- Sending tax fields also needs the tax-assignment update permission on bundles.
- The change is refused when it would make a stored price of the bundle impossible to compute taxes for (category change).
- Replaces the image file when a new image is sent and deletes the previous file afterwards.
- Updates the item’s tax configuration when tax fields are sent.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Identifier of the bundle (27-character KSUID string).
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: vat_rate_id, tax_configuration_mode, category_id, id, stockable_id, title, handle, description, status, image_url, sku, is_taxable, components_count, created_at, updated_at.
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: vat_rate, taxes, units, units.uomUnit, units.prices, units.stockable, prices, inventoryItem, inventoryItem.stockable, inventoryItem.inventoryLevels, components, components.variant, components.stockableUnit.
Response
Resource (only with response=resource).
Identifier of the bundle (27-character KSUID string).
Identifier of the bundle's item, the stock and price record behind it.
Name of the bundle.
Unique short name of the bundle within the company, used like a slug.
Free-text description; null when none.
Sale status of the bundle, read from its item: draft (not on sale), active (on sale) or archived (withdrawn and not editable).
Public URL of the bundle's image; null when it has none.
Stock-keeping code of the bundle's unit; null when none was set. Present only when the bundle's units are loaded.
Whether tax applies to the bundle, from its tax configuration; null when it inherits the category setting. Present only when the item is loaded.
The bundle's units of sale (a bundle has a single one, in the built-in bundle unit of measure). Included only when requested.
Prices of the bundle for the current company. Included only when requested.
Stock record of the bundle, null until a first assembly. Included only when requested.
Number of components in the bundle's recipe. Present when counted.
The recipe of the bundle. Included only when requested.
Date and time the record was created (ISO 8601, UTC).
Date and time the record was last changed (ISO 8601, UTC).
Identifier of the VAT rate set on the bundle; null when it uses the category's or the default rate.
inherit: the bundle follows its category's tax setting. custom: the bundle has its own taxable flag, VAT rate and taxes.
The VAT rate set on the bundle. Included only when requested.
Additional taxes assigned to the bundle. Included only when requested.
Identifier of the bundle's category; null when none.