Product Titles v4
Sub-resource of products holding the additional titles of a product. A product's main
title and subtitle live on the product resource itself (title, subtitle); this
sub-resource covers everything beyond them — the abbreviated title, the title in the
original language of a translation, a former title, a title one distribution channel
needs in a different form.
Each record is one element of one title variant. type names the variant and is
mapped onto ONIX Codelist 15 in the read-only
type_onix; element_type names the part of that variant the record holds — title,
subtitle, sorting prefix — mirroring the children of the ONIX 3 <TitleElement>
composite. A variant that has a subtitle is therefore held as two records sharing the
same type.
Endpoints
GET /resource/v4/products/{product_id}/titles
Retrieve titles for a product
Description
Returns all title records for the given product, paginated. Every product has at
least the platform-maintained storefront-product-title record.
type is the only field this endpoint can filter on; any other query field is
rejected with 400 Bad Request. It combines with the operators described in
Resource Queries — for example ?type=abbreviated-title, or
?type__ne=storefront-product-title to omit the platform-managed record.
Input parameters
Path parameters
| Parameter | Type | Default | Nullable | Description |
|---|---|---|---|---|
product_id |
string | No | UUID of the product. |
Query parameters
| Parameter | Type | Default | Nullable | Description |
|---|---|---|---|---|
type |
string | No | Filter by title variant, e.g. `abbreviated-title`, `title-in-other-language`, `storefront-product-title`. The only filterable field on this sub-resource. |
Responses
{
"_links": {},
"_pagination": {},
"items": [
{
"_id": "0befd1b9-cdea-447e-8306-3df8af0419f2",
"_version": "4.0",
"_legacy_id": 13442,
"_links": {},
"title": "Handelsnetze und Zunftordnungen in den Hansestädten des ...",
"channels": [],
"element_type": "title",
"language": "ger",
"type": "storefront-product-title",
"type_onix": null
}
]
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"properties": {
"_links": {
"type": "object"
},
"_pagination": {
"type": "object"
},
"items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"description": "One title element of one additional title variant of a product.",
"properties": {
"_id": {
"type": "string",
"description": "UUID of this title record. Used in the sub-resource path to read, update or delete the record.",
"example": "0befd1b9-cdea-447e-8306-3df8af0419f2"
},
"_version": {
"type": "string",
"description": "API version that produced this representation.",
"example": "4.0"
},
"_legacy_id": {
"type": "integer",
"description": "Legacy integer identifier of this resource — the `_id` the v3 API returns for the same record. Kept so existing integrations can correlate their own records.",
"example": 13442
},
"_links": {
"type": "object",
"description": "Contains `self`, the canonical URL of this title record."
},
"title": {
"type": "string",
"description": "The text of this title element. What it contains depends on `element_type`: the whole\ntitle, just the subtitle, just the leading article, or the title with the leading\narticle removed.\n\nNot validated on write — an empty string is accepted, and no length limit is enforced.\nA string is required: an explicit `null` is rejected with `400 Bad Request`.\n",
"example": "Handelsnetze und Zunftordnungen in den Hansestädten des ..."
},
"channels": {
"type": "array",
"description": "Distribution channels this title is meant for, as channel identifiers. An empty list —\nthe normal case — means the title is not channel-specific. A populated list scopes the\nrecord to the channels named, which is what one retailer needing the title in a\ndifferent form from everybody else requires.\n\nValues are the platform's distribution-channel slugs, for example:\n\n- `google`\n- `amazon`\n- `libri`\n- `kobo`\n- `spotify`\n- `divibib`\n- `overdrive`\n\nThey are not validated against that list — any string of lowercase letters and hyphens\nis accepted, so a typo is taken silently. Each entry must consist of lowercase letters\nand hyphens only; anything else is rejected with `400 Bad Request`. That is stricter\nthan the platform's own channel list, so slugs containing digits or underscores\n(`24symbols`, `manual_sale`, `zeitfracht_sa02e`) cannot be used here.\n\nThe list is lower-cased, de-duplicated and sorted alphabetically on write, so the order\nin a response need not match the order sent. On update it is replaced wholesale, never\nmerged.\n",
"items": {
"type": "string"
},
"example": []
},
"element_type": {
"type": "string",
"description": "Which part of the title variant this record holds. Anything other than these four\nvalues is rejected with `400 Bad Request`; they correspond one-to-one to the children\nof the ONIX 3 `<TitleElement>` composite:\n\n- `title` — the title text itself (ONIX `<TitleText>`, b203). The default.\n- `subtitle` — the subtitle belonging to the same title variant (ONIX `<Subtitle>`,\n b029), held as a second record with the same `type`.\n- `title-prefix` — the leading article or other prefix that should be ignored when\n sorting (ONIX `<TitlePrefix>`, b030).\n- `title-without-prefix` — the title with that sorting prefix removed (ONIX\n `<TitleWithoutPrefix>`, b031).\n\nA title variant with a subtitle is therefore two records sharing one `type`, differing\nonly in this field:\n\n- `type: \"abbreviated-title\"`, `element_type: \"title\"`, `title: \"Quantum Mosaic\"`\n- `type: \"abbreviated-title\"`, `element_type: \"subtitle\"`,\n `title: \"Unraveling the Universe's Smallest Mysteries\"`\n\n`title-prefix` and `title-without-prefix` exist so that a title files and sorts\ncorrectly: *\"The Frankfurt Manuscript\"* files under **F**, not **T**. A variant either\ncarries the whole title in a single `title` record, or the split pair. The two parts are\nmeant to be joined without a separator, so by convention the prefix carries its own\ntrailing space (`\"The \"`, not `\"The\"`); this is a convention, not something the API\nenforces.\n\nThe value is lower-cased before validation, so `\"Title\"` is accepted and comes back as\n`title`. ONIX's title element level\n([Codelist 149](https://ns.editeur.org/onix/en/149)) has no counterpart in this\nsub-resource: these records are always product-level, Codelist 149 code `01`.\n",
"example": "title",
"x-enum-descriptions": {
"title": "The title text itself (ONIX `<TitleText>`, b203). The default.",
"subtitle": "The subtitle belonging to the same title variant (ONIX `<Subtitle>`, b029). Held as a second record with the same `type`.",
"title-prefix": "The leading article or other prefix that should be ignored when sorting (ONIX `<TitlePrefix>`, b030), e.g. `\"The \"`, including the trailing space.",
"title-without-prefix": "The title with the sorting prefix removed (ONIX `<TitleWithoutPrefix>`, b031), e.g. `\"Frankfurt Manuscript\"`."
}
},
"language": {
"type": "string",
"description": "Language of this title text, as a three-letter ISO 639-2/B (bibliographic) code. Common\nvalues:\n\n- `ger` — German\n- `eng` — English\n- `fre` — French\n- `ita` — Italian\n- `dut` — Dutch\n\nNote the bibliographic forms: German is `ger`, not `deu`, and French is `fre`, not\n`fra`. Two-letter ISO 639-1 codes (`de`, `en`) are also accepted. The value is\nlower-cased before validation, so `\"GER\"` is accepted and comes back as `ger`; an\nunrecognised code is rejected with `400 Bad Request`, as is an explicit `null` in a\nrequest body.\n\n`null` in a response means the title is in the product's own language and needs no\nseparate declaration. It is set where the title genuinely differs — a\n`title-in-other-language` record, or the original-language title of a translated work.\n",
"nullable": true,
"example": "ger"
},
"type": {
"type": "string",
"description": "The title variant this record belongs to — which of the product's several possible\ntitles this is. Not a closed enumeration: any string of lowercase letters and hyphens\nis accepted, and anything else (digits, underscores, spaces, uppercase) is rejected\nwith `400 Bad Request`. Unlike `element_type` and `language`, this field is *not*\nlower-cased first. Defaults to `distinctive-title`.\n\nIts effect is that the value is mapped onto ONIX\n[Codelist 15](https://ns.editeur.org/onix/en/15) and the result returned in `type_onix`.\nA value outside the mapping is kept as given but leaves `type_onix` empty. Thirteen\nvalues are recognised:\n\n- `undefined` → `00`, Undefined.\n- `distinctive-ttile` → `01`, Distinctive title: the full title of the item, without\n abbreviation or abridgement.\n- `titel-in-original-language` → `03`, Title in original language, where the record\n describes a translated item.\n- `abbreviated-title` → `05`, an abbreviated form of the distinctive title.\n- `title-in-other-language` → `06`, a translation of the distinctive or original title,\n sometimes termed a *parallel title*.\n- `former-title` → `08`, a title the item was previously published under.\n- `distributors-title` → `10`, the title as carried in a book distributor's title file;\n frequently incomplete.\n- `alternative-title-on-civer` → `11`, an alternative title that appears on the cover.\n- `alternative-title-on-back` → `12`, an alternative title that appears on the back.\n- `expanded-title` → `13`, an expanded form of the title, e.g. a school text book title\n with grade and subject added.\n- `alternative-title` → `14`, an alternative title the book is widely known by, whether\n it appears on the book or not.\n- `alternative-title-on-spine` → `15`, an alternative title that appears on the spine.\n- `translated-from-title` → `16`, the title in the intermediate language a work was\n translated via; distinct from code `03`.\n\nThree of these keys — `distinctive-ttile`, `titel-in-original-language`,\n`alternative-title-on-civer` — are misspelled, and are given here exactly as they must\nbe sent to obtain the corresponding code; the correctly spelled variants are accepted\nas `type` values but produce no `type_onix`. Note in particular that the default,\n`distinctive-title`, is *not* the key that maps to `01`.\nCodelist 15 codes `02`, `04` and `07` are serial-specific and have no mapping at all.\n\n`storefront-product-title` is reserved. Every product carries one such record whether\nor not anybody created it: saving a product creates or updates a record with\n`type: \"storefront-product-title\"` and `element_type: \"title\"`, holding the product\ntitle truncated at a word boundary to at most 59 characters including a trailing `...`.\nIt is maintained by the platform, so writing to it has no lasting effect and deleting\nit only lasts until the next product save. It has no Codelist 15 equivalent, so its\n`type_onix` is `null`.\n\nThe only filterable field of this sub-resource; any other query parameter is rejected\nwith `400 Bad Request`, and `product_id` is part of the path rather than a filter. See\n[Resource Queries](/resource_queries/) for the operator syntax.\n",
"example": "storefront-product-title",
"x-enum-descriptions": {
"undefined": "Maps to Codelist 15 code 00 — Undefined.",
"distinctive-ttile": "Maps to Codelist 15 code 01 — Distinctive title: the full title of the item, without abbreviation or abridgement. (Note the spelling: this key must be sent exactly as shown.)",
"titel-in-original-language": "Maps to Codelist 15 code 03 — Title in original language, where the record describes a translated item. (Note the spelling: this key must be sent exactly as shown.)",
"abbreviated-title": "Maps to Codelist 15 code 05 — An abbreviated form of the distinctive title.",
"title-in-other-language": "Maps to Codelist 15 code 06 — A translation of the distinctive or original title, sometimes termed a 'parallel title'.",
"former-title": "Maps to Codelist 15 code 08 — A title the item was previously published under.",
"distributors-title": "Maps to Codelist 15 code 10 — The title as carried in a book distributor's title file; frequently incomplete.",
"alternative-title-on-civer": "Maps to Codelist 15 code 11 — An alternative title that appears on the cover. (Note the spelling: this key must be sent exactly as shown.)",
"alternative-title-on-back": "Maps to Codelist 15 code 12 — An alternative title that appears on the back.",
"expanded-title": "Maps to Codelist 15 code 13 — An expanded form of the title, e.g. a school text book title with grade and subject added.",
"alternative-title": "Maps to Codelist 15 code 14 — An alternative title the book is widely known by, whether it appears on the book or not.",
"alternative-title-on-spine": "Maps to Codelist 15 code 15 — An alternative title that appears on the spine.",
"translated-from-title": "Maps to Codelist 15 code 16 — The title of the intermediate language a work was translated via; distinct from code 03.",
"storefront-product-title": "Platform-managed. Holds the product title truncated to at most 59 characters; regenerated on every product save. Has no Codelist 15 equivalent, so type_onix stays null."
}
},
"type_onix": {
"type": "string",
"description": "The [ONIX Codelist 15](https://ns.editeur.org/onix/en/15) title type code corresponding\nto `type`.\n\n**Read-only in practice.** The field is accepted in a request body, but it is\nrecomputed from `type` on every write, so a submitted value is always discarded. `null`\nmeans `type` has no entry in the mapping — which is the case for the platform-managed\n`storefront-product-title` records, and for any custom type an integration invents.\n\nOnly the thirteen codes listed under `type` can occur. Codelist 15 also defines `02`,\n`04` and `07`, but no `type` value maps to them.\n",
"nullable": true,
"example": null
}
},
"required": []
}
}
},
"required": [
"_links",
"_pagination",
"items"
]
}
POST /resource/v4/products/{product_id}/titles
Create a new product title
Description
Creates one title element. A title variant that has a subtitle needs two requests
with the same type, one with element_type of title and one of subtitle.
Omitted fields take their defaults: type becomes distinctive-title,
element_type becomes title, language stays null and channels stays empty.
type_onix is ignored if sent — it is always recomputed from type.
Input parameters
Path parameters
| Parameter | Type | Default | Nullable | Description |
|---|---|---|---|---|
product_id |
string | No | UUID of the product. |
Request body
{
"type": "abbreviated-title",
"element_type": "title",
"title": "Quantum Mosaic",
"language": "eng",
"channels": []
}
Schema of the request body
{
"type": "object",
"additionalProperties": false,
"description": "One title element of one additional title variant of a product.",
"properties": {
"_id": {
"type": "string",
"description": "UUID of this title record. Used in the sub-resource path to read, update or delete the record.",
"example": "0befd1b9-cdea-447e-8306-3df8af0419f2"
},
"_version": {
"type": "string",
"description": "API version that produced this representation.",
"example": "4.0"
},
"_legacy_id": {
"type": "integer",
"description": "Legacy integer identifier of this resource — the `_id` the v3 API returns for the same record. Kept so existing integrations can correlate their own records.",
"example": 13442
},
"_links": {
"type": "object",
"description": "Contains `self`, the canonical URL of this title record."
},
"title": {
"type": "string",
"description": "The text of this title element. What it contains depends on `element_type`: the whole\ntitle, just the subtitle, just the leading article, or the title with the leading\narticle removed.\n\nNot validated on write — an empty string is accepted, and no length limit is enforced.\nA string is required: an explicit `null` is rejected with `400 Bad Request`.\n",
"example": "Handelsnetze und Zunftordnungen in den Hansestädten des ..."
},
"channels": {
"type": "array",
"description": "Distribution channels this title is meant for, as channel identifiers. An empty list —\nthe normal case — means the title is not channel-specific. A populated list scopes the\nrecord to the channels named, which is what one retailer needing the title in a\ndifferent form from everybody else requires.\n\nValues are the platform's distribution-channel slugs, for example:\n\n- `google`\n- `amazon`\n- `libri`\n- `kobo`\n- `spotify`\n- `divibib`\n- `overdrive`\n\nThey are not validated against that list — any string of lowercase letters and hyphens\nis accepted, so a typo is taken silently. Each entry must consist of lowercase letters\nand hyphens only; anything else is rejected with `400 Bad Request`. That is stricter\nthan the platform's own channel list, so slugs containing digits or underscores\n(`24symbols`, `manual_sale`, `zeitfracht_sa02e`) cannot be used here.\n\nThe list is lower-cased, de-duplicated and sorted alphabetically on write, so the order\nin a response need not match the order sent. On update it is replaced wholesale, never\nmerged.\n",
"items": {
"type": "string"
},
"example": []
},
"element_type": {
"type": "string",
"description": "Which part of the title variant this record holds. Anything other than these four\nvalues is rejected with `400 Bad Request`; they correspond one-to-one to the children\nof the ONIX 3 `<TitleElement>` composite:\n\n- `title` — the title text itself (ONIX `<TitleText>`, b203). The default.\n- `subtitle` — the subtitle belonging to the same title variant (ONIX `<Subtitle>`,\n b029), held as a second record with the same `type`.\n- `title-prefix` — the leading article or other prefix that should be ignored when\n sorting (ONIX `<TitlePrefix>`, b030).\n- `title-without-prefix` — the title with that sorting prefix removed (ONIX\n `<TitleWithoutPrefix>`, b031).\n\nA title variant with a subtitle is therefore two records sharing one `type`, differing\nonly in this field:\n\n- `type: \"abbreviated-title\"`, `element_type: \"title\"`, `title: \"Quantum Mosaic\"`\n- `type: \"abbreviated-title\"`, `element_type: \"subtitle\"`,\n `title: \"Unraveling the Universe's Smallest Mysteries\"`\n\n`title-prefix` and `title-without-prefix` exist so that a title files and sorts\ncorrectly: *\"The Frankfurt Manuscript\"* files under **F**, not **T**. A variant either\ncarries the whole title in a single `title` record, or the split pair. The two parts are\nmeant to be joined without a separator, so by convention the prefix carries its own\ntrailing space (`\"The \"`, not `\"The\"`); this is a convention, not something the API\nenforces.\n\nThe value is lower-cased before validation, so `\"Title\"` is accepted and comes back as\n`title`. ONIX's title element level\n([Codelist 149](https://ns.editeur.org/onix/en/149)) has no counterpart in this\nsub-resource: these records are always product-level, Codelist 149 code `01`.\n",
"example": "title",
"x-enum-descriptions": {
"title": "The title text itself (ONIX `<TitleText>`, b203). The default.",
"subtitle": "The subtitle belonging to the same title variant (ONIX `<Subtitle>`, b029). Held as a second record with the same `type`.",
"title-prefix": "The leading article or other prefix that should be ignored when sorting (ONIX `<TitlePrefix>`, b030), e.g. `\"The \"`, including the trailing space.",
"title-without-prefix": "The title with the sorting prefix removed (ONIX `<TitleWithoutPrefix>`, b031), e.g. `\"Frankfurt Manuscript\"`."
}
},
"language": {
"type": "string",
"description": "Language of this title text, as a three-letter ISO 639-2/B (bibliographic) code. Common\nvalues:\n\n- `ger` — German\n- `eng` — English\n- `fre` — French\n- `ita` — Italian\n- `dut` — Dutch\n\nNote the bibliographic forms: German is `ger`, not `deu`, and French is `fre`, not\n`fra`. Two-letter ISO 639-1 codes (`de`, `en`) are also accepted. The value is\nlower-cased before validation, so `\"GER\"` is accepted and comes back as `ger`; an\nunrecognised code is rejected with `400 Bad Request`, as is an explicit `null` in a\nrequest body.\n\n`null` in a response means the title is in the product's own language and needs no\nseparate declaration. It is set where the title genuinely differs — a\n`title-in-other-language` record, or the original-language title of a translated work.\n",
"nullable": true,
"example": "ger"
},
"type": {
"type": "string",
"description": "The title variant this record belongs to — which of the product's several possible\ntitles this is. Not a closed enumeration: any string of lowercase letters and hyphens\nis accepted, and anything else (digits, underscores, spaces, uppercase) is rejected\nwith `400 Bad Request`. Unlike `element_type` and `language`, this field is *not*\nlower-cased first. Defaults to `distinctive-title`.\n\nIts effect is that the value is mapped onto ONIX\n[Codelist 15](https://ns.editeur.org/onix/en/15) and the result returned in `type_onix`.\nA value outside the mapping is kept as given but leaves `type_onix` empty. Thirteen\nvalues are recognised:\n\n- `undefined` → `00`, Undefined.\n- `distinctive-ttile` → `01`, Distinctive title: the full title of the item, without\n abbreviation or abridgement.\n- `titel-in-original-language` → `03`, Title in original language, where the record\n describes a translated item.\n- `abbreviated-title` → `05`, an abbreviated form of the distinctive title.\n- `title-in-other-language` → `06`, a translation of the distinctive or original title,\n sometimes termed a *parallel title*.\n- `former-title` → `08`, a title the item was previously published under.\n- `distributors-title` → `10`, the title as carried in a book distributor's title file;\n frequently incomplete.\n- `alternative-title-on-civer` → `11`, an alternative title that appears on the cover.\n- `alternative-title-on-back` → `12`, an alternative title that appears on the back.\n- `expanded-title` → `13`, an expanded form of the title, e.g. a school text book title\n with grade and subject added.\n- `alternative-title` → `14`, an alternative title the book is widely known by, whether\n it appears on the book or not.\n- `alternative-title-on-spine` → `15`, an alternative title that appears on the spine.\n- `translated-from-title` → `16`, the title in the intermediate language a work was\n translated via; distinct from code `03`.\n\nThree of these keys — `distinctive-ttile`, `titel-in-original-language`,\n`alternative-title-on-civer` — are misspelled, and are given here exactly as they must\nbe sent to obtain the corresponding code; the correctly spelled variants are accepted\nas `type` values but produce no `type_onix`. Note in particular that the default,\n`distinctive-title`, is *not* the key that maps to `01`.\nCodelist 15 codes `02`, `04` and `07` are serial-specific and have no mapping at all.\n\n`storefront-product-title` is reserved. Every product carries one such record whether\nor not anybody created it: saving a product creates or updates a record with\n`type: \"storefront-product-title\"` and `element_type: \"title\"`, holding the product\ntitle truncated at a word boundary to at most 59 characters including a trailing `...`.\nIt is maintained by the platform, so writing to it has no lasting effect and deleting\nit only lasts until the next product save. It has no Codelist 15 equivalent, so its\n`type_onix` is `null`.\n\nThe only filterable field of this sub-resource; any other query parameter is rejected\nwith `400 Bad Request`, and `product_id` is part of the path rather than a filter. See\n[Resource Queries](/resource_queries/) for the operator syntax.\n",
"example": "storefront-product-title",
"x-enum-descriptions": {
"undefined": "Maps to Codelist 15 code 00 — Undefined.",
"distinctive-ttile": "Maps to Codelist 15 code 01 — Distinctive title: the full title of the item, without abbreviation or abridgement. (Note the spelling: this key must be sent exactly as shown.)",
"titel-in-original-language": "Maps to Codelist 15 code 03 — Title in original language, where the record describes a translated item. (Note the spelling: this key must be sent exactly as shown.)",
"abbreviated-title": "Maps to Codelist 15 code 05 — An abbreviated form of the distinctive title.",
"title-in-other-language": "Maps to Codelist 15 code 06 — A translation of the distinctive or original title, sometimes termed a 'parallel title'.",
"former-title": "Maps to Codelist 15 code 08 — A title the item was previously published under.",
"distributors-title": "Maps to Codelist 15 code 10 — The title as carried in a book distributor's title file; frequently incomplete.",
"alternative-title-on-civer": "Maps to Codelist 15 code 11 — An alternative title that appears on the cover. (Note the spelling: this key must be sent exactly as shown.)",
"alternative-title-on-back": "Maps to Codelist 15 code 12 — An alternative title that appears on the back.",
"expanded-title": "Maps to Codelist 15 code 13 — An expanded form of the title, e.g. a school text book title with grade and subject added.",
"alternative-title": "Maps to Codelist 15 code 14 — An alternative title the book is widely known by, whether it appears on the book or not.",
"alternative-title-on-spine": "Maps to Codelist 15 code 15 — An alternative title that appears on the spine.",
"translated-from-title": "Maps to Codelist 15 code 16 — The title of the intermediate language a work was translated via; distinct from code 03.",
"storefront-product-title": "Platform-managed. Holds the product title truncated to at most 59 characters; regenerated on every product save. Has no Codelist 15 equivalent, so type_onix stays null."
}
},
"type_onix": {
"type": "string",
"description": "The [ONIX Codelist 15](https://ns.editeur.org/onix/en/15) title type code corresponding\nto `type`.\n\n**Read-only in practice.** The field is accepted in a request body, but it is\nrecomputed from `type` on every write, so a submitted value is always discarded. `null`\nmeans `type` has no entry in the mapping — which is the case for the platform-managed\n`storefront-product-title` records, and for any custom type an integration invents.\n\nOnly the thirteen codes listed under `type` can occur. Codelist 15 also defines `02`,\n`04` and `07`, but no `type` value maps to them.\n",
"nullable": true,
"example": null
}
},
"required": []
}
Responses
{
"_id": "4c17e0d6-1f5a-4a83-9e42-b7c0d51a8e39",
"_legacy_id": 13443,
"_version": "4.0",
"_links": {
"self": "https://api.openpublishing.com/resource/v4/products/3f8c1a52-9b7d-4e16-8a0c-2d5f7e91b4c3/titles/4c17e0d6-1f5a-4a83-9e42-b7c0d51a8e39"
},
"type": "abbreviated-title",
"type_onix": "05",
"element_type": "title",
"title": "Quantum Mosaic",
"language": "eng",
"channels": []
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"description": "One title element of one additional title variant of a product.",
"properties": {
"_id": {
"type": "string",
"description": "UUID of this title record. Used in the sub-resource path to read, update or delete the record.",
"example": "0befd1b9-cdea-447e-8306-3df8af0419f2"
},
"_version": {
"type": "string",
"description": "API version that produced this representation.",
"example": "4.0"
},
"_legacy_id": {
"type": "integer",
"description": "Legacy integer identifier of this resource — the `_id` the v3 API returns for the same record. Kept so existing integrations can correlate their own records.",
"example": 13442
},
"_links": {
"type": "object",
"description": "Contains `self`, the canonical URL of this title record."
},
"title": {
"type": "string",
"description": "The text of this title element. What it contains depends on `element_type`: the whole\ntitle, just the subtitle, just the leading article, or the title with the leading\narticle removed.\n\nNot validated on write — an empty string is accepted, and no length limit is enforced.\nA string is required: an explicit `null` is rejected with `400 Bad Request`.\n",
"example": "Handelsnetze und Zunftordnungen in den Hansestädten des ..."
},
"channels": {
"type": "array",
"description": "Distribution channels this title is meant for, as channel identifiers. An empty list —\nthe normal case — means the title is not channel-specific. A populated list scopes the\nrecord to the channels named, which is what one retailer needing the title in a\ndifferent form from everybody else requires.\n\nValues are the platform's distribution-channel slugs, for example:\n\n- `google`\n- `amazon`\n- `libri`\n- `kobo`\n- `spotify`\n- `divibib`\n- `overdrive`\n\nThey are not validated against that list — any string of lowercase letters and hyphens\nis accepted, so a typo is taken silently. Each entry must consist of lowercase letters\nand hyphens only; anything else is rejected with `400 Bad Request`. That is stricter\nthan the platform's own channel list, so slugs containing digits or underscores\n(`24symbols`, `manual_sale`, `zeitfracht_sa02e`) cannot be used here.\n\nThe list is lower-cased, de-duplicated and sorted alphabetically on write, so the order\nin a response need not match the order sent. On update it is replaced wholesale, never\nmerged.\n",
"items": {
"type": "string"
},
"example": []
},
"element_type": {
"type": "string",
"description": "Which part of the title variant this record holds. Anything other than these four\nvalues is rejected with `400 Bad Request`; they correspond one-to-one to the children\nof the ONIX 3 `<TitleElement>` composite:\n\n- `title` — the title text itself (ONIX `<TitleText>`, b203). The default.\n- `subtitle` — the subtitle belonging to the same title variant (ONIX `<Subtitle>`,\n b029), held as a second record with the same `type`.\n- `title-prefix` — the leading article or other prefix that should be ignored when\n sorting (ONIX `<TitlePrefix>`, b030).\n- `title-without-prefix` — the title with that sorting prefix removed (ONIX\n `<TitleWithoutPrefix>`, b031).\n\nA title variant with a subtitle is therefore two records sharing one `type`, differing\nonly in this field:\n\n- `type: \"abbreviated-title\"`, `element_type: \"title\"`, `title: \"Quantum Mosaic\"`\n- `type: \"abbreviated-title\"`, `element_type: \"subtitle\"`,\n `title: \"Unraveling the Universe's Smallest Mysteries\"`\n\n`title-prefix` and `title-without-prefix` exist so that a title files and sorts\ncorrectly: *\"The Frankfurt Manuscript\"* files under **F**, not **T**. A variant either\ncarries the whole title in a single `title` record, or the split pair. The two parts are\nmeant to be joined without a separator, so by convention the prefix carries its own\ntrailing space (`\"The \"`, not `\"The\"`); this is a convention, not something the API\nenforces.\n\nThe value is lower-cased before validation, so `\"Title\"` is accepted and comes back as\n`title`. ONIX's title element level\n([Codelist 149](https://ns.editeur.org/onix/en/149)) has no counterpart in this\nsub-resource: these records are always product-level, Codelist 149 code `01`.\n",
"example": "title",
"x-enum-descriptions": {
"title": "The title text itself (ONIX `<TitleText>`, b203). The default.",
"subtitle": "The subtitle belonging to the same title variant (ONIX `<Subtitle>`, b029). Held as a second record with the same `type`.",
"title-prefix": "The leading article or other prefix that should be ignored when sorting (ONIX `<TitlePrefix>`, b030), e.g. `\"The \"`, including the trailing space.",
"title-without-prefix": "The title with the sorting prefix removed (ONIX `<TitleWithoutPrefix>`, b031), e.g. `\"Frankfurt Manuscript\"`."
}
},
"language": {
"type": "string",
"description": "Language of this title text, as a three-letter ISO 639-2/B (bibliographic) code. Common\nvalues:\n\n- `ger` — German\n- `eng` — English\n- `fre` — French\n- `ita` — Italian\n- `dut` — Dutch\n\nNote the bibliographic forms: German is `ger`, not `deu`, and French is `fre`, not\n`fra`. Two-letter ISO 639-1 codes (`de`, `en`) are also accepted. The value is\nlower-cased before validation, so `\"GER\"` is accepted and comes back as `ger`; an\nunrecognised code is rejected with `400 Bad Request`, as is an explicit `null` in a\nrequest body.\n\n`null` in a response means the title is in the product's own language and needs no\nseparate declaration. It is set where the title genuinely differs — a\n`title-in-other-language` record, or the original-language title of a translated work.\n",
"nullable": true,
"example": "ger"
},
"type": {
"type": "string",
"description": "The title variant this record belongs to — which of the product's several possible\ntitles this is. Not a closed enumeration: any string of lowercase letters and hyphens\nis accepted, and anything else (digits, underscores, spaces, uppercase) is rejected\nwith `400 Bad Request`. Unlike `element_type` and `language`, this field is *not*\nlower-cased first. Defaults to `distinctive-title`.\n\nIts effect is that the value is mapped onto ONIX\n[Codelist 15](https://ns.editeur.org/onix/en/15) and the result returned in `type_onix`.\nA value outside the mapping is kept as given but leaves `type_onix` empty. Thirteen\nvalues are recognised:\n\n- `undefined` → `00`, Undefined.\n- `distinctive-ttile` → `01`, Distinctive title: the full title of the item, without\n abbreviation or abridgement.\n- `titel-in-original-language` → `03`, Title in original language, where the record\n describes a translated item.\n- `abbreviated-title` → `05`, an abbreviated form of the distinctive title.\n- `title-in-other-language` → `06`, a translation of the distinctive or original title,\n sometimes termed a *parallel title*.\n- `former-title` → `08`, a title the item was previously published under.\n- `distributors-title` → `10`, the title as carried in a book distributor's title file;\n frequently incomplete.\n- `alternative-title-on-civer` → `11`, an alternative title that appears on the cover.\n- `alternative-title-on-back` → `12`, an alternative title that appears on the back.\n- `expanded-title` → `13`, an expanded form of the title, e.g. a school text book title\n with grade and subject added.\n- `alternative-title` → `14`, an alternative title the book is widely known by, whether\n it appears on the book or not.\n- `alternative-title-on-spine` → `15`, an alternative title that appears on the spine.\n- `translated-from-title` → `16`, the title in the intermediate language a work was\n translated via; distinct from code `03`.\n\nThree of these keys — `distinctive-ttile`, `titel-in-original-language`,\n`alternative-title-on-civer` — are misspelled, and are given here exactly as they must\nbe sent to obtain the corresponding code; the correctly spelled variants are accepted\nas `type` values but produce no `type_onix`. Note in particular that the default,\n`distinctive-title`, is *not* the key that maps to `01`.\nCodelist 15 codes `02`, `04` and `07` are serial-specific and have no mapping at all.\n\n`storefront-product-title` is reserved. Every product carries one such record whether\nor not anybody created it: saving a product creates or updates a record with\n`type: \"storefront-product-title\"` and `element_type: \"title\"`, holding the product\ntitle truncated at a word boundary to at most 59 characters including a trailing `...`.\nIt is maintained by the platform, so writing to it has no lasting effect and deleting\nit only lasts until the next product save. It has no Codelist 15 equivalent, so its\n`type_onix` is `null`.\n\nThe only filterable field of this sub-resource; any other query parameter is rejected\nwith `400 Bad Request`, and `product_id` is part of the path rather than a filter. See\n[Resource Queries](/resource_queries/) for the operator syntax.\n",
"example": "storefront-product-title",
"x-enum-descriptions": {
"undefined": "Maps to Codelist 15 code 00 — Undefined.",
"distinctive-ttile": "Maps to Codelist 15 code 01 — Distinctive title: the full title of the item, without abbreviation or abridgement. (Note the spelling: this key must be sent exactly as shown.)",
"titel-in-original-language": "Maps to Codelist 15 code 03 — Title in original language, where the record describes a translated item. (Note the spelling: this key must be sent exactly as shown.)",
"abbreviated-title": "Maps to Codelist 15 code 05 — An abbreviated form of the distinctive title.",
"title-in-other-language": "Maps to Codelist 15 code 06 — A translation of the distinctive or original title, sometimes termed a 'parallel title'.",
"former-title": "Maps to Codelist 15 code 08 — A title the item was previously published under.",
"distributors-title": "Maps to Codelist 15 code 10 — The title as carried in a book distributor's title file; frequently incomplete.",
"alternative-title-on-civer": "Maps to Codelist 15 code 11 — An alternative title that appears on the cover. (Note the spelling: this key must be sent exactly as shown.)",
"alternative-title-on-back": "Maps to Codelist 15 code 12 — An alternative title that appears on the back.",
"expanded-title": "Maps to Codelist 15 code 13 — An expanded form of the title, e.g. a school text book title with grade and subject added.",
"alternative-title": "Maps to Codelist 15 code 14 — An alternative title the book is widely known by, whether it appears on the book or not.",
"alternative-title-on-spine": "Maps to Codelist 15 code 15 — An alternative title that appears on the spine.",
"translated-from-title": "Maps to Codelist 15 code 16 — The title of the intermediate language a work was translated via; distinct from code 03.",
"storefront-product-title": "Platform-managed. Holds the product title truncated to at most 59 characters; regenerated on every product save. Has no Codelist 15 equivalent, so type_onix stays null."
}
},
"type_onix": {
"type": "string",
"description": "The [ONIX Codelist 15](https://ns.editeur.org/onix/en/15) title type code corresponding\nto `type`.\n\n**Read-only in practice.** The field is accepted in a request body, but it is\nrecomputed from `type` on every write, so a submitted value is always discarded. `null`\nmeans `type` has no entry in the mapping — which is the case for the platform-managed\n`storefront-product-title` records, and for any custom type an integration invents.\n\nOnly the thirteen codes listed under `type` can occur. Codelist 15 also defines `02`,\n`04` and `07`, but no `type` value maps to them.\n",
"nullable": true,
"example": null
}
},
"required": []
}
{
"errors": [
{
"_id": "string",
"stack_trace": [
"string"
],
"message": "string",
"vars": {}
}
]
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"required": [
"errors"
],
"properties": {
"errors": {
"type": "array",
"description": "List of errors occurred",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"_id",
"message",
"stack_trace",
"vars"
],
"properties": {
"_id": {
"type": "string",
"description": "The identifier of the error"
},
"stack_trace": {
"type": "array",
"description": "A stacktrace of the error occurred. Only for testing systems.",
"items": {
"type": "string"
}
},
"message": {
"type": "string",
"description": "A translated message of the error"
},
"vars": {
"type": "object",
"description": "A dict containing additional values of the context of the error."
}
}
}
}
}
}
GET /resource/v4/products/{product_id}/titles/{id}
Retrieve a single product title
Description
Returns one title record by id. The example is the platform-maintained
storefront-product-title record that every product carries: the product title
truncated at a word boundary to at most 59 characters including a trailing ....
type_onix is null because storefront-product-title has no
Codelist 15 equivalent.
Input parameters
Path parameters
| Parameter | Type | Default | Nullable | Description |
|---|---|---|---|---|
id |
string | No | UUID of the title record, as returned in `_id`. | |
product_id |
string | No | UUID of the product. |
Responses
{
"_id": "0befd1b9-cdea-447e-8306-3df8af0419f2",
"_legacy_id": 13442,
"_version": "4.0",
"_links": {
"self": "https://api.openpublishing.com/resource/v4/products/3f8c1a52-9b7d-4e16-8a0c-2d5f7e91b4c3/titles/0befd1b9-cdea-447e-8306-3df8af0419f2"
},
"title": "Handelsnetze und Zunftordnungen in den Hansestädten des ...",
"type": "storefront-product-title",
"type_onix": null,
"element_type": "title",
"language": null,
"channels": []
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"description": "One title element of one additional title variant of a product.",
"properties": {
"_id": {
"type": "string",
"description": "UUID of this title record. Used in the sub-resource path to read, update or delete the record.",
"example": "0befd1b9-cdea-447e-8306-3df8af0419f2"
},
"_version": {
"type": "string",
"description": "API version that produced this representation.",
"example": "4.0"
},
"_legacy_id": {
"type": "integer",
"description": "Legacy integer identifier of this resource — the `_id` the v3 API returns for the same record. Kept so existing integrations can correlate their own records.",
"example": 13442
},
"_links": {
"type": "object",
"description": "Contains `self`, the canonical URL of this title record."
},
"title": {
"type": "string",
"description": "The text of this title element. What it contains depends on `element_type`: the whole\ntitle, just the subtitle, just the leading article, or the title with the leading\narticle removed.\n\nNot validated on write — an empty string is accepted, and no length limit is enforced.\nA string is required: an explicit `null` is rejected with `400 Bad Request`.\n",
"example": "Handelsnetze und Zunftordnungen in den Hansestädten des ..."
},
"channels": {
"type": "array",
"description": "Distribution channels this title is meant for, as channel identifiers. An empty list —\nthe normal case — means the title is not channel-specific. A populated list scopes the\nrecord to the channels named, which is what one retailer needing the title in a\ndifferent form from everybody else requires.\n\nValues are the platform's distribution-channel slugs, for example:\n\n- `google`\n- `amazon`\n- `libri`\n- `kobo`\n- `spotify`\n- `divibib`\n- `overdrive`\n\nThey are not validated against that list — any string of lowercase letters and hyphens\nis accepted, so a typo is taken silently. Each entry must consist of lowercase letters\nand hyphens only; anything else is rejected with `400 Bad Request`. That is stricter\nthan the platform's own channel list, so slugs containing digits or underscores\n(`24symbols`, `manual_sale`, `zeitfracht_sa02e`) cannot be used here.\n\nThe list is lower-cased, de-duplicated and sorted alphabetically on write, so the order\nin a response need not match the order sent. On update it is replaced wholesale, never\nmerged.\n",
"items": {
"type": "string"
},
"example": []
},
"element_type": {
"type": "string",
"description": "Which part of the title variant this record holds. Anything other than these four\nvalues is rejected with `400 Bad Request`; they correspond one-to-one to the children\nof the ONIX 3 `<TitleElement>` composite:\n\n- `title` — the title text itself (ONIX `<TitleText>`, b203). The default.\n- `subtitle` — the subtitle belonging to the same title variant (ONIX `<Subtitle>`,\n b029), held as a second record with the same `type`.\n- `title-prefix` — the leading article or other prefix that should be ignored when\n sorting (ONIX `<TitlePrefix>`, b030).\n- `title-without-prefix` — the title with that sorting prefix removed (ONIX\n `<TitleWithoutPrefix>`, b031).\n\nA title variant with a subtitle is therefore two records sharing one `type`, differing\nonly in this field:\n\n- `type: \"abbreviated-title\"`, `element_type: \"title\"`, `title: \"Quantum Mosaic\"`\n- `type: \"abbreviated-title\"`, `element_type: \"subtitle\"`,\n `title: \"Unraveling the Universe's Smallest Mysteries\"`\n\n`title-prefix` and `title-without-prefix` exist so that a title files and sorts\ncorrectly: *\"The Frankfurt Manuscript\"* files under **F**, not **T**. A variant either\ncarries the whole title in a single `title` record, or the split pair. The two parts are\nmeant to be joined without a separator, so by convention the prefix carries its own\ntrailing space (`\"The \"`, not `\"The\"`); this is a convention, not something the API\nenforces.\n\nThe value is lower-cased before validation, so `\"Title\"` is accepted and comes back as\n`title`. ONIX's title element level\n([Codelist 149](https://ns.editeur.org/onix/en/149)) has no counterpart in this\nsub-resource: these records are always product-level, Codelist 149 code `01`.\n",
"example": "title",
"x-enum-descriptions": {
"title": "The title text itself (ONIX `<TitleText>`, b203). The default.",
"subtitle": "The subtitle belonging to the same title variant (ONIX `<Subtitle>`, b029). Held as a second record with the same `type`.",
"title-prefix": "The leading article or other prefix that should be ignored when sorting (ONIX `<TitlePrefix>`, b030), e.g. `\"The \"`, including the trailing space.",
"title-without-prefix": "The title with the sorting prefix removed (ONIX `<TitleWithoutPrefix>`, b031), e.g. `\"Frankfurt Manuscript\"`."
}
},
"language": {
"type": "string",
"description": "Language of this title text, as a three-letter ISO 639-2/B (bibliographic) code. Common\nvalues:\n\n- `ger` — German\n- `eng` — English\n- `fre` — French\n- `ita` — Italian\n- `dut` — Dutch\n\nNote the bibliographic forms: German is `ger`, not `deu`, and French is `fre`, not\n`fra`. Two-letter ISO 639-1 codes (`de`, `en`) are also accepted. The value is\nlower-cased before validation, so `\"GER\"` is accepted and comes back as `ger`; an\nunrecognised code is rejected with `400 Bad Request`, as is an explicit `null` in a\nrequest body.\n\n`null` in a response means the title is in the product's own language and needs no\nseparate declaration. It is set where the title genuinely differs — a\n`title-in-other-language` record, or the original-language title of a translated work.\n",
"nullable": true,
"example": "ger"
},
"type": {
"type": "string",
"description": "The title variant this record belongs to — which of the product's several possible\ntitles this is. Not a closed enumeration: any string of lowercase letters and hyphens\nis accepted, and anything else (digits, underscores, spaces, uppercase) is rejected\nwith `400 Bad Request`. Unlike `element_type` and `language`, this field is *not*\nlower-cased first. Defaults to `distinctive-title`.\n\nIts effect is that the value is mapped onto ONIX\n[Codelist 15](https://ns.editeur.org/onix/en/15) and the result returned in `type_onix`.\nA value outside the mapping is kept as given but leaves `type_onix` empty. Thirteen\nvalues are recognised:\n\n- `undefined` → `00`, Undefined.\n- `distinctive-ttile` → `01`, Distinctive title: the full title of the item, without\n abbreviation or abridgement.\n- `titel-in-original-language` → `03`, Title in original language, where the record\n describes a translated item.\n- `abbreviated-title` → `05`, an abbreviated form of the distinctive title.\n- `title-in-other-language` → `06`, a translation of the distinctive or original title,\n sometimes termed a *parallel title*.\n- `former-title` → `08`, a title the item was previously published under.\n- `distributors-title` → `10`, the title as carried in a book distributor's title file;\n frequently incomplete.\n- `alternative-title-on-civer` → `11`, an alternative title that appears on the cover.\n- `alternative-title-on-back` → `12`, an alternative title that appears on the back.\n- `expanded-title` → `13`, an expanded form of the title, e.g. a school text book title\n with grade and subject added.\n- `alternative-title` → `14`, an alternative title the book is widely known by, whether\n it appears on the book or not.\n- `alternative-title-on-spine` → `15`, an alternative title that appears on the spine.\n- `translated-from-title` → `16`, the title in the intermediate language a work was\n translated via; distinct from code `03`.\n\nThree of these keys — `distinctive-ttile`, `titel-in-original-language`,\n`alternative-title-on-civer` — are misspelled, and are given here exactly as they must\nbe sent to obtain the corresponding code; the correctly spelled variants are accepted\nas `type` values but produce no `type_onix`. Note in particular that the default,\n`distinctive-title`, is *not* the key that maps to `01`.\nCodelist 15 codes `02`, `04` and `07` are serial-specific and have no mapping at all.\n\n`storefront-product-title` is reserved. Every product carries one such record whether\nor not anybody created it: saving a product creates or updates a record with\n`type: \"storefront-product-title\"` and `element_type: \"title\"`, holding the product\ntitle truncated at a word boundary to at most 59 characters including a trailing `...`.\nIt is maintained by the platform, so writing to it has no lasting effect and deleting\nit only lasts until the next product save. It has no Codelist 15 equivalent, so its\n`type_onix` is `null`.\n\nThe only filterable field of this sub-resource; any other query parameter is rejected\nwith `400 Bad Request`, and `product_id` is part of the path rather than a filter. See\n[Resource Queries](/resource_queries/) for the operator syntax.\n",
"example": "storefront-product-title",
"x-enum-descriptions": {
"undefined": "Maps to Codelist 15 code 00 — Undefined.",
"distinctive-ttile": "Maps to Codelist 15 code 01 — Distinctive title: the full title of the item, without abbreviation or abridgement. (Note the spelling: this key must be sent exactly as shown.)",
"titel-in-original-language": "Maps to Codelist 15 code 03 — Title in original language, where the record describes a translated item. (Note the spelling: this key must be sent exactly as shown.)",
"abbreviated-title": "Maps to Codelist 15 code 05 — An abbreviated form of the distinctive title.",
"title-in-other-language": "Maps to Codelist 15 code 06 — A translation of the distinctive or original title, sometimes termed a 'parallel title'.",
"former-title": "Maps to Codelist 15 code 08 — A title the item was previously published under.",
"distributors-title": "Maps to Codelist 15 code 10 — The title as carried in a book distributor's title file; frequently incomplete.",
"alternative-title-on-civer": "Maps to Codelist 15 code 11 — An alternative title that appears on the cover. (Note the spelling: this key must be sent exactly as shown.)",
"alternative-title-on-back": "Maps to Codelist 15 code 12 — An alternative title that appears on the back.",
"expanded-title": "Maps to Codelist 15 code 13 — An expanded form of the title, e.g. a school text book title with grade and subject added.",
"alternative-title": "Maps to Codelist 15 code 14 — An alternative title the book is widely known by, whether it appears on the book or not.",
"alternative-title-on-spine": "Maps to Codelist 15 code 15 — An alternative title that appears on the spine.",
"translated-from-title": "Maps to Codelist 15 code 16 — The title of the intermediate language a work was translated via; distinct from code 03.",
"storefront-product-title": "Platform-managed. Holds the product title truncated to at most 59 characters; regenerated on every product save. Has no Codelist 15 equivalent, so type_onix stays null."
}
},
"type_onix": {
"type": "string",
"description": "The [ONIX Codelist 15](https://ns.editeur.org/onix/en/15) title type code corresponding\nto `type`.\n\n**Read-only in practice.** The field is accepted in a request body, but it is\nrecomputed from `type` on every write, so a submitted value is always discarded. `null`\nmeans `type` has no entry in the mapping — which is the case for the platform-managed\n`storefront-product-title` records, and for any custom type an integration invents.\n\nOnly the thirteen codes listed under `type` can occur. Codelist 15 also defines `02`,\n`04` and `07`, but no `type` value maps to them.\n",
"nullable": true,
"example": null
}
},
"required": []
}
{
"errors": [
{
"_id": "string",
"stack_trace": [
"string"
],
"message": "string",
"vars": {}
}
]
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"required": [
"errors"
],
"properties": {
"errors": {
"type": "array",
"description": "List of errors occurred",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"_id",
"message",
"stack_trace",
"vars"
],
"properties": {
"_id": {
"type": "string",
"description": "The identifier of the error"
},
"stack_trace": {
"type": "array",
"description": "A stacktrace of the error occurred. Only for testing systems.",
"items": {
"type": "string"
}
},
"message": {
"type": "string",
"description": "A translated message of the error"
},
"vars": {
"type": "object",
"description": "A dict containing additional values of the context of the error."
}
}
}
}
}
}
PUT /resource/v4/products/{product_id}/titles/{id}
Update product title
Description
Only the fields present in the request body are changed; omitted fields keep their
current values. type_onix cannot be set — it is recomputed from type on every
write, so changing type is what changes the ONIX code.
Updating the platform-maintained storefront-product-title record has no lasting
effect; the next save of the product regenerates it from the product title.
The example corrects the text of the abbreviated title created above, sending
title alone. The response returns the complete merged record.
Input parameters
Path parameters
| Parameter | Type | Default | Nullable | Description |
|---|---|---|---|---|
id |
string | No | UUID of the title record, as returned in `_id`. | |
product_id |
string | No | UUID of the product. |
Request body
{
"title": "Quantum Mosaic (abridged)"
}
Schema of the request body
{
"type": "object",
"additionalProperties": false,
"description": "One title element of one additional title variant of a product.",
"properties": {
"_id": {
"type": "string",
"description": "UUID of this title record. Used in the sub-resource path to read, update or delete the record.",
"example": "0befd1b9-cdea-447e-8306-3df8af0419f2"
},
"_version": {
"type": "string",
"description": "API version that produced this representation.",
"example": "4.0"
},
"_legacy_id": {
"type": "integer",
"description": "Legacy integer identifier of this resource — the `_id` the v3 API returns for the same record. Kept so existing integrations can correlate their own records.",
"example": 13442
},
"_links": {
"type": "object",
"description": "Contains `self`, the canonical URL of this title record."
},
"title": {
"type": "string",
"description": "The text of this title element. What it contains depends on `element_type`: the whole\ntitle, just the subtitle, just the leading article, or the title with the leading\narticle removed.\n\nNot validated on write — an empty string is accepted, and no length limit is enforced.\nA string is required: an explicit `null` is rejected with `400 Bad Request`.\n",
"example": "Handelsnetze und Zunftordnungen in den Hansestädten des ..."
},
"channels": {
"type": "array",
"description": "Distribution channels this title is meant for, as channel identifiers. An empty list —\nthe normal case — means the title is not channel-specific. A populated list scopes the\nrecord to the channels named, which is what one retailer needing the title in a\ndifferent form from everybody else requires.\n\nValues are the platform's distribution-channel slugs, for example:\n\n- `google`\n- `amazon`\n- `libri`\n- `kobo`\n- `spotify`\n- `divibib`\n- `overdrive`\n\nThey are not validated against that list — any string of lowercase letters and hyphens\nis accepted, so a typo is taken silently. Each entry must consist of lowercase letters\nand hyphens only; anything else is rejected with `400 Bad Request`. That is stricter\nthan the platform's own channel list, so slugs containing digits or underscores\n(`24symbols`, `manual_sale`, `zeitfracht_sa02e`) cannot be used here.\n\nThe list is lower-cased, de-duplicated and sorted alphabetically on write, so the order\nin a response need not match the order sent. On update it is replaced wholesale, never\nmerged.\n",
"items": {
"type": "string"
},
"example": []
},
"element_type": {
"type": "string",
"description": "Which part of the title variant this record holds. Anything other than these four\nvalues is rejected with `400 Bad Request`; they correspond one-to-one to the children\nof the ONIX 3 `<TitleElement>` composite:\n\n- `title` — the title text itself (ONIX `<TitleText>`, b203). The default.\n- `subtitle` — the subtitle belonging to the same title variant (ONIX `<Subtitle>`,\n b029), held as a second record with the same `type`.\n- `title-prefix` — the leading article or other prefix that should be ignored when\n sorting (ONIX `<TitlePrefix>`, b030).\n- `title-without-prefix` — the title with that sorting prefix removed (ONIX\n `<TitleWithoutPrefix>`, b031).\n\nA title variant with a subtitle is therefore two records sharing one `type`, differing\nonly in this field:\n\n- `type: \"abbreviated-title\"`, `element_type: \"title\"`, `title: \"Quantum Mosaic\"`\n- `type: \"abbreviated-title\"`, `element_type: \"subtitle\"`,\n `title: \"Unraveling the Universe's Smallest Mysteries\"`\n\n`title-prefix` and `title-without-prefix` exist so that a title files and sorts\ncorrectly: *\"The Frankfurt Manuscript\"* files under **F**, not **T**. A variant either\ncarries the whole title in a single `title` record, or the split pair. The two parts are\nmeant to be joined without a separator, so by convention the prefix carries its own\ntrailing space (`\"The \"`, not `\"The\"`); this is a convention, not something the API\nenforces.\n\nThe value is lower-cased before validation, so `\"Title\"` is accepted and comes back as\n`title`. ONIX's title element level\n([Codelist 149](https://ns.editeur.org/onix/en/149)) has no counterpart in this\nsub-resource: these records are always product-level, Codelist 149 code `01`.\n",
"example": "title",
"x-enum-descriptions": {
"title": "The title text itself (ONIX `<TitleText>`, b203). The default.",
"subtitle": "The subtitle belonging to the same title variant (ONIX `<Subtitle>`, b029). Held as a second record with the same `type`.",
"title-prefix": "The leading article or other prefix that should be ignored when sorting (ONIX `<TitlePrefix>`, b030), e.g. `\"The \"`, including the trailing space.",
"title-without-prefix": "The title with the sorting prefix removed (ONIX `<TitleWithoutPrefix>`, b031), e.g. `\"Frankfurt Manuscript\"`."
}
},
"language": {
"type": "string",
"description": "Language of this title text, as a three-letter ISO 639-2/B (bibliographic) code. Common\nvalues:\n\n- `ger` — German\n- `eng` — English\n- `fre` — French\n- `ita` — Italian\n- `dut` — Dutch\n\nNote the bibliographic forms: German is `ger`, not `deu`, and French is `fre`, not\n`fra`. Two-letter ISO 639-1 codes (`de`, `en`) are also accepted. The value is\nlower-cased before validation, so `\"GER\"` is accepted and comes back as `ger`; an\nunrecognised code is rejected with `400 Bad Request`, as is an explicit `null` in a\nrequest body.\n\n`null` in a response means the title is in the product's own language and needs no\nseparate declaration. It is set where the title genuinely differs — a\n`title-in-other-language` record, or the original-language title of a translated work.\n",
"nullable": true,
"example": "ger"
},
"type": {
"type": "string",
"description": "The title variant this record belongs to — which of the product's several possible\ntitles this is. Not a closed enumeration: any string of lowercase letters and hyphens\nis accepted, and anything else (digits, underscores, spaces, uppercase) is rejected\nwith `400 Bad Request`. Unlike `element_type` and `language`, this field is *not*\nlower-cased first. Defaults to `distinctive-title`.\n\nIts effect is that the value is mapped onto ONIX\n[Codelist 15](https://ns.editeur.org/onix/en/15) and the result returned in `type_onix`.\nA value outside the mapping is kept as given but leaves `type_onix` empty. Thirteen\nvalues are recognised:\n\n- `undefined` → `00`, Undefined.\n- `distinctive-ttile` → `01`, Distinctive title: the full title of the item, without\n abbreviation or abridgement.\n- `titel-in-original-language` → `03`, Title in original language, where the record\n describes a translated item.\n- `abbreviated-title` → `05`, an abbreviated form of the distinctive title.\n- `title-in-other-language` → `06`, a translation of the distinctive or original title,\n sometimes termed a *parallel title*.\n- `former-title` → `08`, a title the item was previously published under.\n- `distributors-title` → `10`, the title as carried in a book distributor's title file;\n frequently incomplete.\n- `alternative-title-on-civer` → `11`, an alternative title that appears on the cover.\n- `alternative-title-on-back` → `12`, an alternative title that appears on the back.\n- `expanded-title` → `13`, an expanded form of the title, e.g. a school text book title\n with grade and subject added.\n- `alternative-title` → `14`, an alternative title the book is widely known by, whether\n it appears on the book or not.\n- `alternative-title-on-spine` → `15`, an alternative title that appears on the spine.\n- `translated-from-title` → `16`, the title in the intermediate language a work was\n translated via; distinct from code `03`.\n\nThree of these keys — `distinctive-ttile`, `titel-in-original-language`,\n`alternative-title-on-civer` — are misspelled, and are given here exactly as they must\nbe sent to obtain the corresponding code; the correctly spelled variants are accepted\nas `type` values but produce no `type_onix`. Note in particular that the default,\n`distinctive-title`, is *not* the key that maps to `01`.\nCodelist 15 codes `02`, `04` and `07` are serial-specific and have no mapping at all.\n\n`storefront-product-title` is reserved. Every product carries one such record whether\nor not anybody created it: saving a product creates or updates a record with\n`type: \"storefront-product-title\"` and `element_type: \"title\"`, holding the product\ntitle truncated at a word boundary to at most 59 characters including a trailing `...`.\nIt is maintained by the platform, so writing to it has no lasting effect and deleting\nit only lasts until the next product save. It has no Codelist 15 equivalent, so its\n`type_onix` is `null`.\n\nThe only filterable field of this sub-resource; any other query parameter is rejected\nwith `400 Bad Request`, and `product_id` is part of the path rather than a filter. See\n[Resource Queries](/resource_queries/) for the operator syntax.\n",
"example": "storefront-product-title",
"x-enum-descriptions": {
"undefined": "Maps to Codelist 15 code 00 — Undefined.",
"distinctive-ttile": "Maps to Codelist 15 code 01 — Distinctive title: the full title of the item, without abbreviation or abridgement. (Note the spelling: this key must be sent exactly as shown.)",
"titel-in-original-language": "Maps to Codelist 15 code 03 — Title in original language, where the record describes a translated item. (Note the spelling: this key must be sent exactly as shown.)",
"abbreviated-title": "Maps to Codelist 15 code 05 — An abbreviated form of the distinctive title.",
"title-in-other-language": "Maps to Codelist 15 code 06 — A translation of the distinctive or original title, sometimes termed a 'parallel title'.",
"former-title": "Maps to Codelist 15 code 08 — A title the item was previously published under.",
"distributors-title": "Maps to Codelist 15 code 10 — The title as carried in a book distributor's title file; frequently incomplete.",
"alternative-title-on-civer": "Maps to Codelist 15 code 11 — An alternative title that appears on the cover. (Note the spelling: this key must be sent exactly as shown.)",
"alternative-title-on-back": "Maps to Codelist 15 code 12 — An alternative title that appears on the back.",
"expanded-title": "Maps to Codelist 15 code 13 — An expanded form of the title, e.g. a school text book title with grade and subject added.",
"alternative-title": "Maps to Codelist 15 code 14 — An alternative title the book is widely known by, whether it appears on the book or not.",
"alternative-title-on-spine": "Maps to Codelist 15 code 15 — An alternative title that appears on the spine.",
"translated-from-title": "Maps to Codelist 15 code 16 — The title of the intermediate language a work was translated via; distinct from code 03.",
"storefront-product-title": "Platform-managed. Holds the product title truncated to at most 59 characters; regenerated on every product save. Has no Codelist 15 equivalent, so type_onix stays null."
}
},
"type_onix": {
"type": "string",
"description": "The [ONIX Codelist 15](https://ns.editeur.org/onix/en/15) title type code corresponding\nto `type`.\n\n**Read-only in practice.** The field is accepted in a request body, but it is\nrecomputed from `type` on every write, so a submitted value is always discarded. `null`\nmeans `type` has no entry in the mapping — which is the case for the platform-managed\n`storefront-product-title` records, and for any custom type an integration invents.\n\nOnly the thirteen codes listed under `type` can occur. Codelist 15 also defines `02`,\n`04` and `07`, but no `type` value maps to them.\n",
"nullable": true,
"example": null
}
},
"required": []
}
Responses
{
"_id": "4c17e0d6-1f5a-4a83-9e42-b7c0d51a8e39",
"_legacy_id": 13443,
"_version": "4.0",
"_links": {
"self": "https://api.openpublishing.com/resource/v4/products/3f8c1a52-9b7d-4e16-8a0c-2d5f7e91b4c3/titles/4c17e0d6-1f5a-4a83-9e42-b7c0d51a8e39"
},
"type": "abbreviated-title",
"type_onix": "05",
"element_type": "title",
"title": "Quantum Mosaic (abridged)",
"language": "eng",
"channels": []
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"description": "One title element of one additional title variant of a product.",
"properties": {
"_id": {
"type": "string",
"description": "UUID of this title record. Used in the sub-resource path to read, update or delete the record.",
"example": "0befd1b9-cdea-447e-8306-3df8af0419f2"
},
"_version": {
"type": "string",
"description": "API version that produced this representation.",
"example": "4.0"
},
"_legacy_id": {
"type": "integer",
"description": "Legacy integer identifier of this resource — the `_id` the v3 API returns for the same record. Kept so existing integrations can correlate their own records.",
"example": 13442
},
"_links": {
"type": "object",
"description": "Contains `self`, the canonical URL of this title record."
},
"title": {
"type": "string",
"description": "The text of this title element. What it contains depends on `element_type`: the whole\ntitle, just the subtitle, just the leading article, or the title with the leading\narticle removed.\n\nNot validated on write — an empty string is accepted, and no length limit is enforced.\nA string is required: an explicit `null` is rejected with `400 Bad Request`.\n",
"example": "Handelsnetze und Zunftordnungen in den Hansestädten des ..."
},
"channels": {
"type": "array",
"description": "Distribution channels this title is meant for, as channel identifiers. An empty list —\nthe normal case — means the title is not channel-specific. A populated list scopes the\nrecord to the channels named, which is what one retailer needing the title in a\ndifferent form from everybody else requires.\n\nValues are the platform's distribution-channel slugs, for example:\n\n- `google`\n- `amazon`\n- `libri`\n- `kobo`\n- `spotify`\n- `divibib`\n- `overdrive`\n\nThey are not validated against that list — any string of lowercase letters and hyphens\nis accepted, so a typo is taken silently. Each entry must consist of lowercase letters\nand hyphens only; anything else is rejected with `400 Bad Request`. That is stricter\nthan the platform's own channel list, so slugs containing digits or underscores\n(`24symbols`, `manual_sale`, `zeitfracht_sa02e`) cannot be used here.\n\nThe list is lower-cased, de-duplicated and sorted alphabetically on write, so the order\nin a response need not match the order sent. On update it is replaced wholesale, never\nmerged.\n",
"items": {
"type": "string"
},
"example": []
},
"element_type": {
"type": "string",
"description": "Which part of the title variant this record holds. Anything other than these four\nvalues is rejected with `400 Bad Request`; they correspond one-to-one to the children\nof the ONIX 3 `<TitleElement>` composite:\n\n- `title` — the title text itself (ONIX `<TitleText>`, b203). The default.\n- `subtitle` — the subtitle belonging to the same title variant (ONIX `<Subtitle>`,\n b029), held as a second record with the same `type`.\n- `title-prefix` — the leading article or other prefix that should be ignored when\n sorting (ONIX `<TitlePrefix>`, b030).\n- `title-without-prefix` — the title with that sorting prefix removed (ONIX\n `<TitleWithoutPrefix>`, b031).\n\nA title variant with a subtitle is therefore two records sharing one `type`, differing\nonly in this field:\n\n- `type: \"abbreviated-title\"`, `element_type: \"title\"`, `title: \"Quantum Mosaic\"`\n- `type: \"abbreviated-title\"`, `element_type: \"subtitle\"`,\n `title: \"Unraveling the Universe's Smallest Mysteries\"`\n\n`title-prefix` and `title-without-prefix` exist so that a title files and sorts\ncorrectly: *\"The Frankfurt Manuscript\"* files under **F**, not **T**. A variant either\ncarries the whole title in a single `title` record, or the split pair. The two parts are\nmeant to be joined without a separator, so by convention the prefix carries its own\ntrailing space (`\"The \"`, not `\"The\"`); this is a convention, not something the API\nenforces.\n\nThe value is lower-cased before validation, so `\"Title\"` is accepted and comes back as\n`title`. ONIX's title element level\n([Codelist 149](https://ns.editeur.org/onix/en/149)) has no counterpart in this\nsub-resource: these records are always product-level, Codelist 149 code `01`.\n",
"example": "title",
"x-enum-descriptions": {
"title": "The title text itself (ONIX `<TitleText>`, b203). The default.",
"subtitle": "The subtitle belonging to the same title variant (ONIX `<Subtitle>`, b029). Held as a second record with the same `type`.",
"title-prefix": "The leading article or other prefix that should be ignored when sorting (ONIX `<TitlePrefix>`, b030), e.g. `\"The \"`, including the trailing space.",
"title-without-prefix": "The title with the sorting prefix removed (ONIX `<TitleWithoutPrefix>`, b031), e.g. `\"Frankfurt Manuscript\"`."
}
},
"language": {
"type": "string",
"description": "Language of this title text, as a three-letter ISO 639-2/B (bibliographic) code. Common\nvalues:\n\n- `ger` — German\n- `eng` — English\n- `fre` — French\n- `ita` — Italian\n- `dut` — Dutch\n\nNote the bibliographic forms: German is `ger`, not `deu`, and French is `fre`, not\n`fra`. Two-letter ISO 639-1 codes (`de`, `en`) are also accepted. The value is\nlower-cased before validation, so `\"GER\"` is accepted and comes back as `ger`; an\nunrecognised code is rejected with `400 Bad Request`, as is an explicit `null` in a\nrequest body.\n\n`null` in a response means the title is in the product's own language and needs no\nseparate declaration. It is set where the title genuinely differs — a\n`title-in-other-language` record, or the original-language title of a translated work.\n",
"nullable": true,
"example": "ger"
},
"type": {
"type": "string",
"description": "The title variant this record belongs to — which of the product's several possible\ntitles this is. Not a closed enumeration: any string of lowercase letters and hyphens\nis accepted, and anything else (digits, underscores, spaces, uppercase) is rejected\nwith `400 Bad Request`. Unlike `element_type` and `language`, this field is *not*\nlower-cased first. Defaults to `distinctive-title`.\n\nIts effect is that the value is mapped onto ONIX\n[Codelist 15](https://ns.editeur.org/onix/en/15) and the result returned in `type_onix`.\nA value outside the mapping is kept as given but leaves `type_onix` empty. Thirteen\nvalues are recognised:\n\n- `undefined` → `00`, Undefined.\n- `distinctive-ttile` → `01`, Distinctive title: the full title of the item, without\n abbreviation or abridgement.\n- `titel-in-original-language` → `03`, Title in original language, where the record\n describes a translated item.\n- `abbreviated-title` → `05`, an abbreviated form of the distinctive title.\n- `title-in-other-language` → `06`, a translation of the distinctive or original title,\n sometimes termed a *parallel title*.\n- `former-title` → `08`, a title the item was previously published under.\n- `distributors-title` → `10`, the title as carried in a book distributor's title file;\n frequently incomplete.\n- `alternative-title-on-civer` → `11`, an alternative title that appears on the cover.\n- `alternative-title-on-back` → `12`, an alternative title that appears on the back.\n- `expanded-title` → `13`, an expanded form of the title, e.g. a school text book title\n with grade and subject added.\n- `alternative-title` → `14`, an alternative title the book is widely known by, whether\n it appears on the book or not.\n- `alternative-title-on-spine` → `15`, an alternative title that appears on the spine.\n- `translated-from-title` → `16`, the title in the intermediate language a work was\n translated via; distinct from code `03`.\n\nThree of these keys — `distinctive-ttile`, `titel-in-original-language`,\n`alternative-title-on-civer` — are misspelled, and are given here exactly as they must\nbe sent to obtain the corresponding code; the correctly spelled variants are accepted\nas `type` values but produce no `type_onix`. Note in particular that the default,\n`distinctive-title`, is *not* the key that maps to `01`.\nCodelist 15 codes `02`, `04` and `07` are serial-specific and have no mapping at all.\n\n`storefront-product-title` is reserved. Every product carries one such record whether\nor not anybody created it: saving a product creates or updates a record with\n`type: \"storefront-product-title\"` and `element_type: \"title\"`, holding the product\ntitle truncated at a word boundary to at most 59 characters including a trailing `...`.\nIt is maintained by the platform, so writing to it has no lasting effect and deleting\nit only lasts until the next product save. It has no Codelist 15 equivalent, so its\n`type_onix` is `null`.\n\nThe only filterable field of this sub-resource; any other query parameter is rejected\nwith `400 Bad Request`, and `product_id` is part of the path rather than a filter. See\n[Resource Queries](/resource_queries/) for the operator syntax.\n",
"example": "storefront-product-title",
"x-enum-descriptions": {
"undefined": "Maps to Codelist 15 code 00 — Undefined.",
"distinctive-ttile": "Maps to Codelist 15 code 01 — Distinctive title: the full title of the item, without abbreviation or abridgement. (Note the spelling: this key must be sent exactly as shown.)",
"titel-in-original-language": "Maps to Codelist 15 code 03 — Title in original language, where the record describes a translated item. (Note the spelling: this key must be sent exactly as shown.)",
"abbreviated-title": "Maps to Codelist 15 code 05 — An abbreviated form of the distinctive title.",
"title-in-other-language": "Maps to Codelist 15 code 06 — A translation of the distinctive or original title, sometimes termed a 'parallel title'.",
"former-title": "Maps to Codelist 15 code 08 — A title the item was previously published under.",
"distributors-title": "Maps to Codelist 15 code 10 — The title as carried in a book distributor's title file; frequently incomplete.",
"alternative-title-on-civer": "Maps to Codelist 15 code 11 — An alternative title that appears on the cover. (Note the spelling: this key must be sent exactly as shown.)",
"alternative-title-on-back": "Maps to Codelist 15 code 12 — An alternative title that appears on the back.",
"expanded-title": "Maps to Codelist 15 code 13 — An expanded form of the title, e.g. a school text book title with grade and subject added.",
"alternative-title": "Maps to Codelist 15 code 14 — An alternative title the book is widely known by, whether it appears on the book or not.",
"alternative-title-on-spine": "Maps to Codelist 15 code 15 — An alternative title that appears on the spine.",
"translated-from-title": "Maps to Codelist 15 code 16 — The title of the intermediate language a work was translated via; distinct from code 03.",
"storefront-product-title": "Platform-managed. Holds the product title truncated to at most 59 characters; regenerated on every product save. Has no Codelist 15 equivalent, so type_onix stays null."
}
},
"type_onix": {
"type": "string",
"description": "The [ONIX Codelist 15](https://ns.editeur.org/onix/en/15) title type code corresponding\nto `type`.\n\n**Read-only in practice.** The field is accepted in a request body, but it is\nrecomputed from `type` on every write, so a submitted value is always discarded. `null`\nmeans `type` has no entry in the mapping — which is the case for the platform-managed\n`storefront-product-title` records, and for any custom type an integration invents.\n\nOnly the thirteen codes listed under `type` can occur. Codelist 15 also defines `02`,\n`04` and `07`, but no `type` value maps to them.\n",
"nullable": true,
"example": null
}
},
"required": []
}
{
"errors": [
{
"_id": "string",
"stack_trace": [
"string"
],
"message": "string",
"vars": {}
}
]
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"required": [
"errors"
],
"properties": {
"errors": {
"type": "array",
"description": "List of errors occurred",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"_id",
"message",
"stack_trace",
"vars"
],
"properties": {
"_id": {
"type": "string",
"description": "The identifier of the error"
},
"stack_trace": {
"type": "array",
"description": "A stacktrace of the error occurred. Only for testing systems.",
"items": {
"type": "string"
}
},
"message": {
"type": "string",
"description": "A translated message of the error"
},
"vars": {
"type": "object",
"description": "A dict containing additional values of the context of the error."
}
}
}
}
}
}
{
"errors": [
{
"_id": "string",
"stack_trace": [
"string"
],
"message": "string",
"vars": {}
}
]
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"required": [
"errors"
],
"properties": {
"errors": {
"type": "array",
"description": "List of errors occurred",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"_id",
"message",
"stack_trace",
"vars"
],
"properties": {
"_id": {
"type": "string",
"description": "The identifier of the error"
},
"stack_trace": {
"type": "array",
"description": "A stacktrace of the error occurred. Only for testing systems.",
"items": {
"type": "string"
}
},
"message": {
"type": "string",
"description": "A translated message of the error"
},
"vars": {
"type": "object",
"description": "A dict containing additional values of the context of the error."
}
}
}
}
}
}
DELETE /resource/v4/products/{product_id}/titles/{id}
Delete product title
Description
Removes the title record. Deleting the platform-maintained storefront-product-title record succeeds, but the next save of the product recreates it.
Input parameters
Path parameters
| Parameter | Type | Default | Nullable | Description |
|---|---|---|---|---|
id |
string | No | UUID of the title record, as returned in `_id`. | |
product_id |
string | No | UUID of the product. |
Responses
{
"errors": [
{
"_id": "string",
"stack_trace": [
"string"
],
"message": "string",
"vars": {}
}
]
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"required": [
"errors"
],
"properties": {
"errors": {
"type": "array",
"description": "List of errors occurred",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"_id",
"message",
"stack_trace",
"vars"
],
"properties": {
"_id": {
"type": "string",
"description": "The identifier of the error"
},
"stack_trace": {
"type": "array",
"description": "A stacktrace of the error occurred. Only for testing systems.",
"items": {
"type": "string"
}
},
"message": {
"type": "string",
"description": "A translated message of the error"
},
"vars": {
"type": "object",
"description": "A dict containing additional values of the context of the error."
}
}
}
}
}
}
{
"errors": [
{
"_id": "string",
"stack_trace": [
"string"
],
"message": "string",
"vars": {}
}
]
}
Schema of the response body
{
"type": "object",
"additionalProperties": false,
"required": [
"errors"
],
"properties": {
"errors": {
"type": "array",
"description": "List of errors occurred",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"_id",
"message",
"stack_trace",
"vars"
],
"properties": {
"_id": {
"type": "string",
"description": "The identifier of the error"
},
"stack_trace": {
"type": "array",
"description": "A stacktrace of the error occurred. Only for testing systems.",
"items": {
"type": "string"
}
},
"message": {
"type": "string",
"description": "A translated message of the error"
},
"vars": {
"type": "object",
"description": "A dict containing additional values of the context of the error."
}
}
}
}
}
}
Schemas
Product Title
| Name | Type | Description | Example |
|---|---|---|---|
_id |
string |
UUID of this title record. Used in the sub-resource path to read, update or delete the record. |
0befd1b9-cdea-447e-8306-3df8af0419f2 |
_legacy_id |
integer |
Legacy integer identifier of this resource — the |
13442 |
_links |
object |
Contains |
|
_version |
string |
API version that produced this representation. |
4.0 |
channels |
Array<string> |
Distribution channels this title is meant for, as channel identifiers. An empty list — the normal case — means the title is not channel-specific. A populated list scopes the record to the channels named, which is what one retailer needing the title in a different form from everybody else requires. Values are the platform's distribution-channel slugs, for example:
They are not validated against that list — any string of lowercase letters and hyphens
is accepted, so a typo is taken silently. Each entry must consist of lowercase letters
and hyphens only; anything else is rejected with The list is lower-cased, de-duplicated and sorted alphabetically on write, so the order in a response need not match the order sent. On update it is replaced wholesale, never merged. |
[] |
element_type |
string |
Which part of the title variant this record holds. Anything other than these four
values is rejected with
A title variant with a subtitle is therefore two records sharing one
The value is lower-cased before validation, so |
title |
language |
string| null |
Language of this title text, as a three-letter ISO 639-2/B (bibliographic) code. Common values:
Note the bibliographic forms: German is
|
ger |
title |
string |
The text of this title element. What it contains depends on Not validated on write — an empty string is accepted, and no length limit is enforced.
A string is required: an explicit |
Handelsnetze und Zunftordnungen in den Hansestädten des ... |
type |
string |
The title variant this record belongs to — which of the product's several possible
titles this is. Not a closed enumeration: any string of lowercase letters and hyphens
is accepted, and anything else (digits, underscores, spaces, uppercase) is rejected
with Its effect is that the value is mapped onto ONIX
Codelist 15 and the result returned in
Three of these keys —
The only filterable field of this sub-resource; any other query parameter is rejected
with |
storefront-product-title |
type_onix |
string| null |
The ONIX Codelist 15 title type code corresponding
to Read-only in practice. The field is accepted in a request body, but it is
recomputed from Only the thirteen codes listed under |