Add a variant to a product
curl --request POST \
--url https://api.juo.io/admin/v1/products/{productId}/variants \
--header 'Content-Type: application/json' \
--header 'X-Juo-Admin-Api-Key: <api-key>' \
--header 'X-Tenant-ID: <x-tenant-id>' \
--data '
{
"price": 123,
"compareAtPrice": 123,
"sku": "<string>",
"barcode": "<string>",
"optionValues": [
{
"optionName": "<string>",
"name": "<string>"
}
]
}
'import requests
url = "https://api.juo.io/admin/v1/products/{productId}/variants"
payload = {
"price": 123,
"compareAtPrice": 123,
"sku": "<string>",
"barcode": "<string>",
"optionValues": [
{
"optionName": "<string>",
"name": "<string>"
}
]
}
headers = {
"X-Tenant-ID": "<x-tenant-id>",
"X-Juo-Admin-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Tenant-ID': '<x-tenant-id>',
'X-Juo-Admin-Api-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
price: 123,
compareAtPrice: 123,
sku: '<string>',
barcode: '<string>',
optionValues: [{optionName: '<string>', name: '<string>'}]
})
};
fetch('https://api.juo.io/admin/v1/products/{productId}/variants', 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.juo.io/admin/v1/products/{productId}/variants",
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([
'price' => 123,
'compareAtPrice' => 123,
'sku' => '<string>',
'barcode' => '<string>',
'optionValues' => [
[
'optionName' => '<string>',
'name' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Juo-Admin-Api-Key: <api-key>",
"X-Tenant-ID: <x-tenant-id>"
],
]);
$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.juo.io/admin/v1/products/{productId}/variants"
payload := strings.NewReader("{\n \"price\": 123,\n \"compareAtPrice\": 123,\n \"sku\": \"<string>\",\n \"barcode\": \"<string>\",\n \"optionValues\": [\n {\n \"optionName\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Tenant-ID", "<x-tenant-id>")
req.Header.Add("X-Juo-Admin-Api-Key", "<api-key>")
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.post("https://api.juo.io/admin/v1/products/{productId}/variants")
.header("X-Tenant-ID", "<x-tenant-id>")
.header("X-Juo-Admin-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"price\": 123,\n \"compareAtPrice\": 123,\n \"sku\": \"<string>\",\n \"barcode\": \"<string>\",\n \"optionValues\": [\n {\n \"optionName\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.juo.io/admin/v1/products/{productId}/variants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Tenant-ID"] = '<x-tenant-id>'
request["X-Juo-Admin-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"price\": 123,\n \"compareAtPrice\": 123,\n \"sku\": \"<string>\",\n \"barcode\": \"<string>\",\n \"optionValues\": [\n {\n \"optionName\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"title": "<string>",
"image": {
"id": "<string>",
"url": "<string>",
"altText": "<string>"
},
"price": 123,
"purchaseOptions": [
{
"name": "<string>",
"price": 123,
"interval": {
"intervalCount": 123
}
}
],
"product": "<string>",
"planGroups": [
"<string>"
]
}Products
Add a variant
Used to add a variant to a product.
POST
/
products
/
{productId}
/
variants
Add a variant to a product
curl --request POST \
--url https://api.juo.io/admin/v1/products/{productId}/variants \
--header 'Content-Type: application/json' \
--header 'X-Juo-Admin-Api-Key: <api-key>' \
--header 'X-Tenant-ID: <x-tenant-id>' \
--data '
{
"price": 123,
"compareAtPrice": 123,
"sku": "<string>",
"barcode": "<string>",
"optionValues": [
{
"optionName": "<string>",
"name": "<string>"
}
]
}
'import requests
url = "https://api.juo.io/admin/v1/products/{productId}/variants"
payload = {
"price": 123,
"compareAtPrice": 123,
"sku": "<string>",
"barcode": "<string>",
"optionValues": [
{
"optionName": "<string>",
"name": "<string>"
}
]
}
headers = {
"X-Tenant-ID": "<x-tenant-id>",
"X-Juo-Admin-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Tenant-ID': '<x-tenant-id>',
'X-Juo-Admin-Api-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
price: 123,
compareAtPrice: 123,
sku: '<string>',
barcode: '<string>',
optionValues: [{optionName: '<string>', name: '<string>'}]
})
};
fetch('https://api.juo.io/admin/v1/products/{productId}/variants', 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.juo.io/admin/v1/products/{productId}/variants",
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([
'price' => 123,
'compareAtPrice' => 123,
'sku' => '<string>',
'barcode' => '<string>',
'optionValues' => [
[
'optionName' => '<string>',
'name' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Juo-Admin-Api-Key: <api-key>",
"X-Tenant-ID: <x-tenant-id>"
],
]);
$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.juo.io/admin/v1/products/{productId}/variants"
payload := strings.NewReader("{\n \"price\": 123,\n \"compareAtPrice\": 123,\n \"sku\": \"<string>\",\n \"barcode\": \"<string>\",\n \"optionValues\": [\n {\n \"optionName\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Tenant-ID", "<x-tenant-id>")
req.Header.Add("X-Juo-Admin-Api-Key", "<api-key>")
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.post("https://api.juo.io/admin/v1/products/{productId}/variants")
.header("X-Tenant-ID", "<x-tenant-id>")
.header("X-Juo-Admin-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"price\": 123,\n \"compareAtPrice\": 123,\n \"sku\": \"<string>\",\n \"barcode\": \"<string>\",\n \"optionValues\": [\n {\n \"optionName\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.juo.io/admin/v1/products/{productId}/variants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Tenant-ID"] = '<x-tenant-id>'
request["X-Juo-Admin-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"price\": 123,\n \"compareAtPrice\": 123,\n \"sku\": \"<string>\",\n \"barcode\": \"<string>\",\n \"optionValues\": [\n {\n \"optionName\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"title": "<string>",
"image": {
"id": "<string>",
"url": "<string>",
"altText": "<string>"
},
"price": 123,
"purchaseOptions": [
{
"name": "<string>",
"price": 123,
"interval": {
"intervalCount": 123
}
}
],
"product": "<string>",
"planGroups": [
"<string>"
]
}Authorizations
AdminApiKeyBearerToken
Long-lived Admin API key issued from the Juo merchant portal. Pass as the X-Juo-Admin-Api-Key header.
Headers
Unique identifier of the tenant in the system (usually a store identifier)
Path Parameters
The product identifier
Minimum string length:
1Body
application/json
Response
Default Response
Minimum string length:
1Minimum string length:
1Show child attributes
Show child attributes
Show child attributes
Show child attributes
Product id when not expanded, or the full Product object when the field name is included in the expand query parameter.
Minimum string length:
1Subscription plan group IDs associated with this variant
Minimum string length:
1⌘I