curl --request POST \
--url https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"id": "burger-classic",
"name": "Classic Burger",
"category_id": "burgers",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"modifier_group_ids": [
"<string>"
],
"description": "<string>",
"image_url": "<string>",
"disabled": false,
"out_of_stock": false,
"restrictions": [],
"price_overrides": [],
"bundle_only": false,
"order": 1
}
'import requests
url = "https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products"
payload = {
"id": "burger-classic",
"name": "Classic Burger",
"category_id": "burgers",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"modifier_group_ids": ["<string>"],
"description": "<string>",
"image_url": "<string>",
"disabled": False,
"out_of_stock": False,
"restrictions": [],
"price_overrides": [],
"bundle_only": False,
"order": 1
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
id: 'burger-classic',
name: 'Classic Burger',
category_id: 'burgers',
price: {amount: 12.9, currency: 'EUR'},
modifier_group_ids: ['<string>'],
description: '<string>',
image_url: '<string>',
disabled: false,
out_of_stock: false,
restrictions: [],
price_overrides: [],
bundle_only: false,
order: 1
})
};
fetch('https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products', 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://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products",
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([
'id' => 'burger-classic',
'name' => 'Classic Burger',
'category_id' => 'burgers',
'price' => [
'amount' => 12.9,
'currency' => 'EUR'
],
'modifier_group_ids' => [
'<string>'
],
'description' => '<string>',
'image_url' => '<string>',
'disabled' => false,
'out_of_stock' => false,
'restrictions' => [
],
'price_overrides' => [
],
'bundle_only' => false,
'order' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"x-api-key: <api-key>"
],
]);
$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://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products"
payload := strings.NewReader("{\n \"id\": \"burger-classic\",\n \"name\": \"Classic Burger\",\n \"category_id\": \"burgers\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"modifier_group_ids\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": [],\n \"bundle_only\": false,\n \"order\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("x-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://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products")
.header("Idempotency-Key", "<idempotency-key>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"burger-classic\",\n \"name\": \"Classic Burger\",\n \"category_id\": \"burgers\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"modifier_group_ids\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": [],\n \"bundle_only\": false,\n \"order\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"burger-classic\",\n \"name\": \"Classic Burger\",\n \"category_id\": \"burgers\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"modifier_group_ids\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": [],\n \"bundle_only\": false,\n \"order\": 1\n}"
response = http.request(request)
puts response.read_body{
"id": "burger-classic",
"name": "Classic Burger",
"category_id": "burgers",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"modifier_group_ids": [
"<string>"
],
"disabled": false,
"out_of_stock": false,
"restrictions": [],
"price_overrides": [],
"bundle_only": false,
"order": 1,
"object": "product",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"image_url": "<string>"
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}Create a product
curl --request POST \
--url https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"id": "burger-classic",
"name": "Classic Burger",
"category_id": "burgers",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"modifier_group_ids": [
"<string>"
],
"description": "<string>",
"image_url": "<string>",
"disabled": false,
"out_of_stock": false,
"restrictions": [],
"price_overrides": [],
"bundle_only": false,
"order": 1
}
'import requests
url = "https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products"
payload = {
"id": "burger-classic",
"name": "Classic Burger",
"category_id": "burgers",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"modifier_group_ids": ["<string>"],
"description": "<string>",
"image_url": "<string>",
"disabled": False,
"out_of_stock": False,
"restrictions": [],
"price_overrides": [],
"bundle_only": False,
"order": 1
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
id: 'burger-classic',
name: 'Classic Burger',
category_id: 'burgers',
price: {amount: 12.9, currency: 'EUR'},
modifier_group_ids: ['<string>'],
description: '<string>',
image_url: '<string>',
disabled: false,
out_of_stock: false,
restrictions: [],
price_overrides: [],
bundle_only: false,
order: 1
})
};
fetch('https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products', 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://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products",
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([
'id' => 'burger-classic',
'name' => 'Classic Burger',
'category_id' => 'burgers',
'price' => [
'amount' => 12.9,
'currency' => 'EUR'
],
'modifier_group_ids' => [
'<string>'
],
'description' => '<string>',
'image_url' => '<string>',
'disabled' => false,
'out_of_stock' => false,
'restrictions' => [
],
'price_overrides' => [
],
'bundle_only' => false,
'order' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"x-api-key: <api-key>"
],
]);
$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://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products"
payload := strings.NewReader("{\n \"id\": \"burger-classic\",\n \"name\": \"Classic Burger\",\n \"category_id\": \"burgers\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"modifier_group_ids\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": [],\n \"bundle_only\": false,\n \"order\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("x-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://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products")
.header("Idempotency-Key", "<idempotency-key>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"burger-classic\",\n \"name\": \"Classic Burger\",\n \"category_id\": \"burgers\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"modifier_group_ids\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": [],\n \"bundle_only\": false,\n \"order\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"burger-classic\",\n \"name\": \"Classic Burger\",\n \"category_id\": \"burgers\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"modifier_group_ids\": [\n \"<string>\"\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": [],\n \"bundle_only\": false,\n \"order\": 1\n}"
response = http.request(request)
puts response.read_body{
"id": "burger-classic",
"name": "Classic Burger",
"category_id": "burgers",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"modifier_group_ids": [
"<string>"
],
"disabled": false,
"out_of_stock": false,
"restrictions": [],
"price_overrides": [],
"bundle_only": false,
"order": 1,
"object": "product",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"image_url": "<string>"
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "invalid_request_error",
"code": "resource_missing",
"message": "<string>",
"request_id": "req_8f2c…",
"param": "<string>",
"details": {}
}
}Authorizations
Location/organization API key.
Headers
Unique key that makes this create safe to retry; replays return the original response.
Body
^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"burger-classic"
"Classic Burger"
"burgers"
Show child attributes
Show child attributes
Whether the resource is hidden and cannot be ordered.
Whether the resource is temporarily unavailable while remaining visible.
Availability windows. The resource is available when any restriction matches.
100Show child attributes
Show child attributes
Conditional prices. The matching override with the most specific conditions wins.
100Show child attributes
Show child attributes
Whether the product can only be selected inside a bundle.
Optional sort order. Omitted products are placed after explicitly ordered products in their category.
x >= 0Response
The created product.
A sellable product. Internal SKU details are never exposed.
^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"burger-classic"
"Classic Burger"
"burgers"
Show child attributes
Show child attributes
Whether the resource is hidden and cannot be ordered.
Whether the resource is temporarily unavailable while remaining visible.
Availability windows. The resource is available when any restriction matches.
100Show child attributes
Show child attributes
Conditional prices. The matching override with the most specific conditions wins.
100Show child attributes
Show child attributes
Whether the product can only be selected inside a bundle.
Optional sort order. Omitted products are placed after explicitly ordered products in their category.
x >= 0product