Contents
Channel texts
Each sales channel can have its own title, description, handle and translatable attribute values, in
every locale: the German text of your online store can differ from the German text of a marketplace.
A field the channel does not set uses the product's own text in that locale. Read titles,
descriptions and attributes in bulk with GET /products?channel=…; the handle in other locales only
through these endpoints. The names of attribute options (a color, a material) a channel shows are in
channel_labels of GET /attributes.
Base URL, authentication and conventions of this API are on the Catalog API page.
/products/{product}/channels/{channel}/texts/{locale}Get a channel's texts in one locale
The title, description, handle, translatable attribute values and SEO this channel shows in this
locale. from_channel lists the fields the channel sets (an attribute as attributes.<code>, an SEO
field as seo.<field>); the others are the product's own text in that locale (null, or no
attribute, if there is none). In the default locale attributes is empty: there the values are the
product's attributes. seo is there in every locale, the default one included.
Path parameters
productstringrequiredProduct id or SKU.
Example:TEE-001channelstringrequiredA sales channel code (
GET /channels).Example:online-storelocalestringrequiredA locale code of the catalog (
GET /locales), the default one included.Example:de
Responses
200The channel's texts in that locale.application/json
dataChannelTextsrequiredChild attributes
channelstringlocalestringtitlestring | nulldescriptionstring | nullhandlestring | nullattributesobjectTranslatable attribute values with a value in this locale; a list as an array.
seoobjectMeta title, meta description and SEO handle this channel shows in this locale.
Child attributes
meta_titlestring | nullmeta_descriptionstring | nullhandlestring | null
from_channelarray of stringThe fields this channel sets (
title,description,handle,attributes.<code>,seo.<field>); the others are the product's text.
404
product_not_found,variant_not_found,image_not_found,import_not_found,webhook_not_found,channel_not_found,locale_not_found, ornot_foundfor a path that does not exist.application/jsonerrorobjectrequiredChild attributes
codestringrequiredStable machine-readable code. Branch on it, not on the message.
messagestringrequiredrequest_idstringrequiredSame as the
X-Request-Idheader. Quote it to support.detailsobject
curl -X GET https://api-catalog.nucleoplatform.com/api/catalog/v1/products/TEE-001/channels/online-store/texts/de \
-H "Authorization: Bearer $NUCLEO_ACCESS_TOKEN" \
-H 'Accept: application/json'const res = await fetch("https://api-catalog.nucleoplatform.com/api/catalog/v1/products/TEE-001/channels/online-store/texts/de", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.NUCLEO_ACCESS_TOKEN}`,
Accept: "application/json",
},
});
const data = await res.json();
console.log(res.status, data);<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api-catalog.nucleoplatform.com/api/catalog/v1/products/TEE-001/channels/online-store/texts/de', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('NUCLEO_ACCESS_TOKEN'),
'Accept' => 'application/json',
],
'http_errors' => false,
]);
echo $response->getStatusCode(), PHP_EOL;
echo $response->getBody();{
"data": {
"channel": "online-store",
"locale": "de",
"title": "Basic T-Shirt",
"description": "<p>Bio-Baumwolle.</p>",
"handle": null,
"attributes": {
"care": "Handwäsche"
},
"seo": {
"meta_title": "Basic T-Shirt kaufen",
"meta_description": null,
"handle": null
},
"from_channel": [
"title",
"attributes.care",
"seo.meta_title"
]
}
}{
"error": {
"code": "string",
"message": "string",
"request_id": "string",
"details": {}
}
}/products/{product}/channels/{channel}/texts/{locale}Set a channel's texts in one locale
Writes only the fields you send, for this channel and this locale: the product's own text and the
other channels do not change. null (or an empty value for an attribute) removes the channel's
text, so the field goes back to the product's text; a text of only spaces, or a description with
no text left once cleaned, counts as empty. Recorded in the product's Activity with the channel and
the locale.
A handle already used by another product (on the product or on this channel, in that locale) is a
400.
attributes takes translatable attributes only (text, rich text, link; a list as an array of
strings), and only in a locale other than the default one: anything else is a 400 that names
the attribute.
seo sets the channel's meta title, meta description and SEO handle in this locale, the default
one included; null goes back to the product's SEO in that locale. A seo object without any of
these three fields is a 400.
Writing does not publish anything to the channel.
Path parameters
productstringrequiredProduct id or SKU.
Example:TEE-001channelstringrequiredA sales channel code (
GET /channels).Example:online-storelocalestringrequiredA locale code of the catalog (
GET /locales), the default one included.Example:de
Headers
Idempotency-KeystringAny string of 1–255 printable ASCII characters, unique per change you mean (a UUID is fine). Sending the same request again with the same key within 48 hours returns the first answer without doing the work again (header
Idempotent-Replayed: true). The same key with a different request is a409 idempotency_key_reused; while the first request is still running,409 idempotency_key_in_progresswithRetry-After: 1. Answers429and5xxare not stored: retry them with the same key.max length 255Example:2b5c0d2e-7d2a-4f6e-9a51-0c8a1e7f3b44
Request bodyapplication/json
titlestring | nullmax length 255descriptionstring | nullHTML.
handlestring | nullmax length 255attributesobjectTranslated values by attribute code;
nullor empty goes back to the product's translation.seoobjectThe channel's SEO in this locale;
nullgoes back to the product's SEO.Child attributes
meta_titlestring | nullmax length 255meta_descriptionstring | nullmax length 5000handlestring | nullmax length 255
Responses
200The channel's texts in that locale.application/json
dataChannelTextsrequiredChild attributes
channelstringlocalestringtitlestring | nulldescriptionstring | nullhandlestring | nullattributesobjectTranslatable attribute values with a value in this locale; a list as an array.
seoobjectMeta title, meta description and SEO handle this channel shows in this locale.
Child attributes
meta_titlestring | nullmeta_descriptionstring | nullhandlestring | null
from_channelarray of stringThe fields this channel sets (
title,description,handle,attributes.<code>,seo.<field>); the others are the product's text.
400The request must change:
validation_failed(seedetails, one list of messages per field),invalid_json,invalid_cursor,product_not_written,variant_not_written,not_written,image_not_downloadable. application/jsonerrorobjectrequiredChild attributes
codestringrequiredStable machine-readable code. Branch on it, not on the message.
messagestringrequiredrequest_idstringrequiredSame as the
X-Request-Idheader. Quote it to support.detailsobject
403
read_only_key: this key cannot write.application/jsonerrorobjectrequiredChild attributes
codestringrequiredStable machine-readable code. Branch on it, not on the message.
messagestringrequiredrequest_idstringrequiredSame as the
X-Request-Idheader. Quote it to support.detailsobject
404
product_not_found,variant_not_found,image_not_found,import_not_found,webhook_not_found,channel_not_found,locale_not_found, ornot_foundfor a path that does not exist.application/jsonerrorobjectrequiredChild attributes
codestringrequiredStable machine-readable code. Branch on it, not on the message.
messagestringrequiredrequest_idstringrequiredSame as the
X-Request-Idheader. Quote it to support.detailsobject
409
idempotency_key_reused,idempotency_key_in_progress,webhook_limit. application/jsonerrorobjectrequiredChild attributes
codestringrequiredStable machine-readable code. Branch on it, not on the message.
messagestringrequiredrequest_idstringrequiredSame as the
X-Request-Idheader. Quote it to support.detailsobject
curl -X PUT https://api-catalog.nucleoplatform.com/api/catalog/v1/products/TEE-001/channels/online-store/texts/de \
-H "Authorization: Bearer $NUCLEO_ACCESS_TOKEN" \
-H 'Idempotency-Key: 2b5c0d2e-7d2a-4f6e-9a51-0c8a1e7f3b44' \
-H 'Content-Type: application/json' \
-d '{
"title": "Basic T-Shirt",
"description": "<p>Bio-Baumwolle.</p>",
"attributes": {
"care": "Handwäsche"
},
"seo": {
"meta_title": "Basic T-Shirt kaufen"
}
}'const res = await fetch("https://api-catalog.nucleoplatform.com/api/catalog/v1/products/TEE-001/channels/online-store/texts/de", {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.NUCLEO_ACCESS_TOKEN}`,
"Idempotency-Key": "2b5c0d2e-7d2a-4f6e-9a51-0c8a1e7f3b44",
"Content-Type": "application/json",
},
body: JSON.stringify({
"title": "Basic T-Shirt",
"description": "<p>Bio-Baumwolle.</p>",
"attributes": {
"care": "Handwäsche"
},
"seo": {
"meta_title": "Basic T-Shirt kaufen"
}
}),
});
const data = await res.json();
console.log(res.status, data);<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('PUT', 'https://api-catalog.nucleoplatform.com/api/catalog/v1/products/TEE-001/channels/online-store/texts/de', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('NUCLEO_ACCESS_TOKEN'),
'Idempotency-Key' => '2b5c0d2e-7d2a-4f6e-9a51-0c8a1e7f3b44',
],
'json' => [
'title' => 'Basic T-Shirt',
'description' => '<p>Bio-Baumwolle.</p>',
'attributes' => [
'care' => 'Handwäsche',
],
'seo' => [
'meta_title' => 'Basic T-Shirt kaufen',
],
],
'http_errors' => false,
]);
echo $response->getStatusCode(), PHP_EOL;
echo $response->getBody();{
"data": {
"channel": "online-store",
"locale": "de",
"title": "Basic T-Shirt",
"description": "<p>Bio-Baumwolle.</p>",
"handle": null,
"attributes": {
"care": "Handwäsche"
},
"seo": {
"meta_title": "Basic T-Shirt kaufen",
"meta_description": null,
"handle": null
},
"from_channel": [
"title",
"attributes.care",
"seo.meta_title"
]
}
}{
"error": {
"code": "validation_failed",
"message": "The request is not valid: see details.",
"request_id": "7c0f8a1e-3b2d-4e5f-9a6b-1c2d3e4f5a6b",
"details": {
"variants.0.prices.0.price_list": [
"Unknown price list \"usa\". GET /price-lists lists them."
]
}
}
}{
"error": {
"code": "string",
"message": "string",
"request_id": "string",
"details": {}
}
}{
"error": {
"code": "string",
"message": "string",
"request_id": "string",
"details": {}
}
}{
"error": {
"code": "string",
"message": "string",
"request_id": "string",
"details": {}
}
}