curl --request POST \
--url https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/bundles \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"id": "classic-meal",
"name": "Classic Meal",
"category_id": "meals",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"lines": [
{
"id": "main",
"product_ids": [
"<string>"
],
"name": "<string>",
"min_selections": 1,
"max_selections": 1
}
],
"description": "<string>",
"image_url": "<string>",
"disabled": false,
"out_of_stock": false,
"restrictions": [],
"price_overrides": []
}
'import requests
url = "https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/bundles"
payload = {
"id": "classic-meal",
"name": "Classic Meal",
"category_id": "meals",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"lines": [
{
"id": "main",
"product_ids": ["<string>"],
"name": "<string>",
"min_selections": 1,
"max_selections": 1
}
],
"description": "<string>",
"image_url": "<string>",
"disabled": False,
"out_of_stock": False,
"restrictions": [],
"price_overrides": []
}
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: 'classic-meal',
name: 'Classic Meal',
category_id: 'meals',
price: {amount: 12.9, currency: 'EUR'},
lines: [
{
id: 'main',
product_ids: ['<string>'],
name: '<string>',
min_selections: 1,
max_selections: 1
}
],
description: '<string>',
image_url: '<string>',
disabled: false,
out_of_stock: false,
restrictions: [],
price_overrides: []
})
};
fetch('https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/bundles', 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}/bundles",
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' => 'classic-meal',
'name' => 'Classic Meal',
'category_id' => 'meals',
'price' => [
'amount' => 12.9,
'currency' => 'EUR'
],
'lines' => [
[
'id' => 'main',
'product_ids' => [
'<string>'
],
'name' => '<string>',
'min_selections' => 1,
'max_selections' => 1
]
],
'description' => '<string>',
'image_url' => '<string>',
'disabled' => false,
'out_of_stock' => false,
'restrictions' => [
],
'price_overrides' => [
]
]),
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}/bundles"
payload := strings.NewReader("{\n \"id\": \"classic-meal\",\n \"name\": \"Classic Meal\",\n \"category_id\": \"meals\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"lines\": [\n {\n \"id\": \"main\",\n \"product_ids\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"min_selections\": 1,\n \"max_selections\": 1\n }\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": []\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}/bundles")
.header("Idempotency-Key", "<idempotency-key>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"classic-meal\",\n \"name\": \"Classic Meal\",\n \"category_id\": \"meals\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"lines\": [\n {\n \"id\": \"main\",\n \"product_ids\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"min_selections\": 1,\n \"max_selections\": 1\n }\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/bundles")
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\": \"classic-meal\",\n \"name\": \"Classic Meal\",\n \"category_id\": \"meals\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"lines\": [\n {\n \"id\": \"main\",\n \"product_ids\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"min_selections\": 1,\n \"max_selections\": 1\n }\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": []\n}"
response = http.request(request)
puts response.read_body{
"id": "classic-meal",
"name": "Classic Meal",
"category_id": "meals",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"disabled": false,
"out_of_stock": false,
"restrictions": [],
"price_overrides": [],
"lines": [
{
"id": "main",
"product_ids": [
"<string>"
],
"name": "<string>",
"min_selections": 1,
"max_selections": 1
}
],
"object": "bundle",
"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 bundle
curl --request POST \
--url https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/bundles \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"id": "classic-meal",
"name": "Classic Meal",
"category_id": "meals",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"lines": [
{
"id": "main",
"product_ids": [
"<string>"
],
"name": "<string>",
"min_selections": 1,
"max_selections": 1
}
],
"description": "<string>",
"image_url": "<string>",
"disabled": false,
"out_of_stock": false,
"restrictions": [],
"price_overrides": []
}
'import requests
url = "https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/bundles"
payload = {
"id": "classic-meal",
"name": "Classic Meal",
"category_id": "meals",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"lines": [
{
"id": "main",
"product_ids": ["<string>"],
"name": "<string>",
"min_selections": 1,
"max_selections": 1
}
],
"description": "<string>",
"image_url": "<string>",
"disabled": False,
"out_of_stock": False,
"restrictions": [],
"price_overrides": []
}
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: 'classic-meal',
name: 'Classic Meal',
category_id: 'meals',
price: {amount: 12.9, currency: 'EUR'},
lines: [
{
id: 'main',
product_ids: ['<string>'],
name: '<string>',
min_selections: 1,
max_selections: 1
}
],
description: '<string>',
image_url: '<string>',
disabled: false,
out_of_stock: false,
restrictions: [],
price_overrides: []
})
};
fetch('https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/bundles', 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}/bundles",
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' => 'classic-meal',
'name' => 'Classic Meal',
'category_id' => 'meals',
'price' => [
'amount' => 12.9,
'currency' => 'EUR'
],
'lines' => [
[
'id' => 'main',
'product_ids' => [
'<string>'
],
'name' => '<string>',
'min_selections' => 1,
'max_selections' => 1
]
],
'description' => '<string>',
'image_url' => '<string>',
'disabled' => false,
'out_of_stock' => false,
'restrictions' => [
],
'price_overrides' => [
]
]),
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}/bundles"
payload := strings.NewReader("{\n \"id\": \"classic-meal\",\n \"name\": \"Classic Meal\",\n \"category_id\": \"meals\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"lines\": [\n {\n \"id\": \"main\",\n \"product_ids\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"min_selections\": 1,\n \"max_selections\": 1\n }\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": []\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}/bundles")
.header("Idempotency-Key", "<idempotency-key>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"classic-meal\",\n \"name\": \"Classic Meal\",\n \"category_id\": \"meals\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"lines\": [\n {\n \"id\": \"main\",\n \"product_ids\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"min_selections\": 1,\n \"max_selections\": 1\n }\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.chataigne.ai/v1/locations/{location_id}/catalogs/{catalog_id}/bundles")
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\": \"classic-meal\",\n \"name\": \"Classic Meal\",\n \"category_id\": \"meals\",\n \"price\": {\n \"amount\": 12.9,\n \"currency\": \"EUR\"\n },\n \"lines\": [\n {\n \"id\": \"main\",\n \"product_ids\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"min_selections\": 1,\n \"max_selections\": 1\n }\n ],\n \"description\": \"<string>\",\n \"image_url\": \"<string>\",\n \"disabled\": false,\n \"out_of_stock\": false,\n \"restrictions\": [],\n \"price_overrides\": []\n}"
response = http.request(request)
puts response.read_body{
"id": "classic-meal",
"name": "Classic Meal",
"category_id": "meals",
"price": {
"amount": 12.9,
"currency": "EUR"
},
"disabled": false,
"out_of_stock": false,
"restrictions": [],
"price_overrides": [],
"lines": [
{
"id": "main",
"product_ids": [
"<string>"
],
"name": "<string>",
"min_selections": 1,
"max_selections": 1
}
],
"object": "bundle",
"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
"classic-meal"
"Classic Meal"
"meals"
Show child attributes
Show child attributes
1Show 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
Response
The created bundle.
"classic-meal"
"Classic Meal"
"meals"
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
1Show child attributes
Show child attributes
bundle